Mémo HTML

Michel Llibre - Mai 2025

Table des matières

1 Généralités - Doctype et balise html

2 Lesbalises du head

3 balises du body

4 Unités de mesure

4.1 Unités de mesure absolues

4.2 unités de mesures relatives

5 Couleurs

6 Les Balises de sectionnement de niveau bloc

7 Balises de formatage du texte

8 L'attributs style et les attributs/propriétés de style

8.1 de disposition

8.1.1 Cas display:flex

8.1.1.1 flex-grow, flex-shrink et flex-basic

8.1.1.2 flex

8.1.1.3 justify-content

8.1.1.4 align-items

8.1.1.5 Exemple pratique :

8.2 de positionnement

8.2.1 Propriétés position, top, bottom, left, right

8.2.2 Propriétés style float et clear

8.2.3 Propriété style z-index

8.3 ropriétés de police

8.4 du cadre (box model)

8.5 d'alignement du texte

8.6 Propriétés de fond et couleur du texte

8.7 Propriétés du curseur : cursor

9 Ancres et redirections

9.1 Lien hypertexte, Balise <>

9.2 Pseudo-lien javascript

10 Insertion d'images : balise <IMG.../>

11 Info-bulles

12 Zone interactives dans image

13 Région figure

14 Insertion fichier texte

15 Contrôles et Formulaires

15.1 Les balises input (text, button, checkbox, radio) et button

15.2 La balise Label

15.3 Les formulaires

15.4 Liste à choix multiple: balise select

15.5 balise output et événement onInput

16 Les événements standard du code HTML

CSS : Style et feuilles de style

1 Balise style dans le Head

2 Sélecteur des attributs Class et ID

3 Feuille de Style CSS

4 Les sélecteurs et séparateurs de style

4.1 . : sélecteur de

4.2 # : sélecteur d'entifiant

4.3 : Sélecteur universel

4.4 [ attrib] Sélecteur d'attribut

4.4.1 Balise possédant un attribut de valeur donnée

4.4.2 Balise possédant un attribut de valeur contenant une partie donnée

4.5 Combinateurs

4.5.1 + : voisin direct ou successeur

4.5.2 ~ : voisins de parent commun

4.5.3 > : enfants directs

4.5.4 ˽ (espace) : descendants

4.5.5 || : combinateur de colonnes

4.6 : (deux points) pseudo-classe action usager

4.7 , (virgule) : sélection par groupe

4.8 Préseance des règles

4.9 Liste complète des sélecteurs

5 Les balises de bloc sémantiques (main, section.,.)

6 Exemples de propriétés de style

7 Règles @

7.1 Définir utf-8 pour une feuille de style

7.2 @import : Inclusion de feuilles de style externes

7.3 Conditionnelle à un navigateur @support

7.4 Conditionnelle à un media : @media

7.5 Définition d'une nouvelle police

8 Fonctions dans les CSS

Formules mathématiques avec MathJax

 

Site pour valider du code HTML : The W3C Markup Validation Service

1 Généralités - Doctype et balise html

Principaux systèmes permettant de créer des pages dynamiques

Un document  HTML5 comporte normalement la première ligne suivante qui indique que le type du document est du HTML :

<!DOCTYPE html>

Les anciens documents  XHTML 1.0 comportaient tout au début les lignes suivantes :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Heureusement c'est du passé!

Le langage HTML est du XML (Extensible Markup Language) avec des balises, des attributs et des propriétés (valeurs) adaptés à la description des pages internet.

Généralement les balises fonctionnent par paire : <balise>......</balise>.

Mais on utilise également des balises orphelines :<balise   />, par exemple <img xxx/> ou <basefont xxx/>, où les champs xxx contiennent les attributs précisant les fonctions à réaliser.  Le / final avant le dernier > n'est pas obligatoire et tend à disparaitre.

Le nom de la balise (orpheline ou non) peut être suivi d'attributs

Un attribut est un nom suivi du signe égale (=) et d'une valeur ou plusieurs. La casse du nom des attributs n'est pas significative, mais certains préconisent l'utilisation des minuscules. La valeur peut être mise telle que, ou entre guillemets, simples ou doubles (ces derniers sont préconisés).

Tout le code significatif du langage HTML est compris entre les deux balises <html> code html </html>. La casse des balises n'est pas significative, mais certains préconisent l'utilisation des minuscules.

Dans cette balise on peut mettre l'attibut <html lang="fr"> qui spécifie la langue utilisé ce qui est utile pour le référencement et les traductuers autmatiquess.

Le code html comprend deux sections qui sont :

Commentaire : Toute partie comprise entre <!-- et --> n'est pas interprétée. C'est un commentaire.

2 Les principales balises du head

3 Les principales balises  du body

La partie comprise entre les balises <body>  et </body> constitue le corps du document affiché. A l'intérieur de la balise ouvrante < body .....> on peut mettre des attributs qui vont s'appliquer à tout le document. Exemples :

text=#BA48DF fixe la couleur du texte de toute la page en violet (couleur rvb avec #000000=noir, #FF0000=rouge et #FFFFFF=blanc)

bgcolor="green" fixe la couleur du fond de toute la page en vert.

background="http://michel.llibre.pagesperso-orange.fr/img/2004-imgp1302.jpg" met une image localisée par son url en fond d'écran. Si l'image est dans le même système informatique que la page d'acceuil, elle peut être localisée relativement à celle-ci. Exemple :

background="2004_1.jpg" ou ="./2004_1.jpg" si cette image est située dans le même répertoire que la page d'acceuil.

Les 3 attributs suivants concernent les liens qui figurent entre les balise <a> </a>, cf paragraphe 9 :

link="couleur d'un lien avant clic" (bleu par défaut)

alink="couleur d'un lien pendant le clic" (rouge par défaut)

vlink="couleur d'un lien déjà exploré" (bleu par défaut). Il semble que cet attribut ne fonctionne pas.

4 Unités de mesure

Les propriétés faisant référence à des dimensions peuvent être spécifiées à l'aide de différentes unités de mesure absolues ou relatives.

4.1 Unités de mesure absolues

4.2 unités de mesures relatives

5 Couleurs

16 noms de couleurs réservés :

6 Les Balises de sectionnement de niveau bloc

Elles définissent un élément physique de la page, généralement une certaine zone précédée et suivie par un double interligne, à l'exception d'un seul interligne pour l'élément <div>.

Les balises d'éléments de niveau bloc sont opposés aux balises de niveau ligne que l'on trouve à l'intérieur des éléments de niveau blocs.

Parmi les éléments de niveau bloc, on trouve :

Balise de paragraphe

Balises de titre :

Listes :

Exemple :

 

<table>

<tr>

  <th>Titre01</th> <th>Titre02</th> <th>Titre03</th> <th>Titre04</th>

</tr>

<tr>

  <td>El. 11</td> <td>El. 12</td> <td>El. lin 13</td>

</tr>

<tr>

  <td>El. 21</td> <td>El. 22</td>

</tr>

<tr>

  <td>El. lin 31</td> <td>El. 32</td> <td>El. 33</td> <td>El. 34</td>

</tr>

</table>

Balises spéciales break et espaces particuliers

On peut spécifiers les espaces particulier suivants :

7 Balises de formatage du texte

On trouve ces balises à l'intérieur des d'élément de niveau blocs pour particulariser certaines parties internes.

Balises modifiant localement la police du texte :

La paire de balise <font ... >texte... </font> précise le format du texte qu'elle enserre. Ensuite le texte reprend le format qu'il avait avant.

La balise orpheline<basefont..../> précise le format du texte jusqu'à ce que ce format soit modifié par une nouvelle balise <basefont..../>.

Le format est spécifié par les attributs :

Le fonctionnement de l'attribut size est différent dans basefont et font : Dans basefont on spécifie la taille en absolue size=2 par exemple, alors que dans font, on le spécifie en relatif à la taille par défaut size=-1 par exemple.

En HTML5 les balises <basefont..../>  et <font> ne sont pas recommandées. La mise en forme devant être confiée à CSS.

8 L'attributs style et les attributs/propriétés de style

L'attribut style est un attribut universel qui peut être utilisé pour n'importe quel élément. Toutes les éléments peuvent être pourvues d'un attribut de style (et un seul par élément) qui permet de préciser un ou plusieurs couples attributs de style:propriété valables dans la région. Si plusieurs couples sont précisées, on les sépare par un point virgule (;). Les valeurs (propriétés) sont précisées après un deux-points (:). Comme on le voit le vocabulaire est un peu confus. l'attibut de style est également appelé proriété et la valeur affectée est également appelée propriété. Exemples :

style = "font-family:arial ; font-size:16pt ; border-width:large ; height:100"

Les propriétés précisées au niveau de l'attribut style peuvent concerner l'encadrement  de la région, ses dimensions, son fond, la police de caractère et le formatage du texte (décoration, indentation, alignement).

Remarque : En HTML5 l'utilisation de cet attribut style à l'intérieur du document html est déconseillée. On conseille de passer plutot par une feuille de style.

8.1 Propriétés style de disposition display, flex, justify...

Cas d'utilisation classiques de flexbox - CSS : Feuilles de style en cascade | MDN (mozilla.org)

La propriété display est très importante car c'est elle qui permet de poistionner un élément à l'intérieur de son conteneur. Elle peut prendre les valeurs suivantes :

none : l'élément n'est pas affiché et sort du flux.

inline : l'élément est interprété comme étant un seule ligne, ex: span.

block : l'élément est interprété comme un bloc, ex: div.

inline-block : l'élément est interprété comme à un élément inline avec un comportement bloc, ce qui permet de le positionner à gauche (par défaut, au centre ou à droite.

list-item : l'élément est interprété comme un bloc principal avec dedans un élément inligne pour un item de liste. Ex: li.

flex : l'élément est interprété comme un élément block de type qui contient des éléments de largeurs adaptables, dont la méthode d'adaptation sera précisée par une des propriétés de flex.

grid : l'élément est interprété comme un élément block de type conteneur d'élément grille.

... et encore d'autres...

8.1.1 Cas display:flex

La propriété flex-direction peut être utilisée pour indiquer comment les éléments flexibles sont placés à l'intérieur du conteneur  :

row : en ligne (par défaut)

row-reverse : en ligne ordre inversé

column : en colonne

column-reverse : en colonne ordre inversé

 

8.1.1.1 flex-grow, flex-shrink et flex-basic

Trois propriétés :  flex-grow, flex-shrink et flex-basic permettent de préciser comment les éléments flexibles s'adaptent :

8.1.1.2 flex

La propriété flex permet de spécifier simultanément les 3 propriétés flex-grow, flex-shrink et flex-basis.

 : Elle peut être utilisée avec 1, 2 ou 3 valeurs qui sont attribuées aux propriétés  flex-grow, flex-shrink et flex-basis.

- trois valeurs : flex-grow flex-shrink  flex-basis

- deux valeurs : (flex-grow=flex-shrink)  flex-basis

- une seule valeur : (flex-grow=flex-shrink) | flex-basis

 - 1 valeur numérique réelle sans unité définit son (flex-grow=flex-shrink)

        - 1 seule valeur avec unité définit son flex-basis

 

Valeurs littérales :

none : => 0 0 auto : ne peut pas s'étirer ou retrécir. Est tracé à sa taille nominale

auto : => 1 1 auto : tous les objets grandissent et rétrécissent de la même façon à partir d'une taille de base automatique

initial : => 0 1 auto : ne s'étire pas et peut  rétrécir à son minimum, dim auto (par défaut).

8.1.1.3 justify-content

La propriété justify-content permet de gérer l'espace dans le sens de l'axe principal défini par flex-direction (axe horizontal par défaut), ce qui suppose que tous les éléments ont un flex-grow à 0 (valeur par défaut) car sinon un ou plusieurs éléments vont s'étirer pour occuper l'espace disponible. Les valeurs définies sont les suivantes :

start : les éléments sont tassés coté début

center : les éléments sont tassés au centre

space-between : les éléments sont tassés sur les bords laissant un vide entre eux

space-evently : Un espace égal sépare les éléments (simple entre 2 éléments)

space-around : Un espace égal entoure les éléments (doublé entre 2 éléments)

8.1.1.4 align-items

La propriété align-items permet de gérer l'espace dans le sens de l'axe perpendiulaire à l'axe principal défini par flex-direction (dans le sens de l'axe vertical par défaut). Elle peut prendre les valeurs suivantes :

stretch : l'objet s'étire à tout l'espace disponible

center : centre l'objet

start : se place en haut ou à droite selon  flex-direction

end : se place en bas ou à gauche selon  flex-direction

La propriété align-self s'applique à un item, et elle surpasse la propriété précédente align-items.

8.1.1.5 Exemple pratique :

 #menu {

      display: flex;

      justify-content: center; /* Centre horizontalement sur l'axe principal */

      align-items: start; /* placé en haut sur l'axe transversal */

      border: 1px solid black; /* Bordure pour visualiser le conteneur */

      gap: 10px; /* Espace entre les éléments */

 }

Ces lignes définissentt le style d'un contener d'id="menu".

flex-direction n'est pas utilisé, l'axe principal est l'axe horizontal par défaut.

Les éléments à l'intérieur du contener seront centrés horizontalement (justify-content: center;)

Les éléments à l'intérieur du contener seront centrés verticalement (align-items: center)

8.2 Propriétés style de positionnement

8.2.1 Propriétés position, top, bottom, left, right

La propriété position definit la façon dont l'élément est position dans le document ou son conteneur, conjointement aux propriétés top, right, bottom et left.

8.2.2 Propriétés style float et clear

Utilisables pour toute zone, mais surtout utilisé pour positionner des images relativement à du texte qui se positionnera dans la zone restante du conteneur.

Généralement on applique float:left ou float:droit à un cadre que l'on veut placer à gauche ou à droite avec du texte à coté, puis on appliquera clear:both au paragraphe à partir duquel on veut faire cesser la réservation précédente.

8.2.3 Propriété style z-index

La propriété z-index permet de spécifier quels éléments sont dessus ou dessous quand il occupent la même position à l'intérieur de leur parent. Elle peut prendre des valeurs entières à partir de 0 (tout derrière) ou la valeur auto qui place le dernier élément défini au-dessus du précédent.

8.3 Propriétés style de police

Propriétés pour la police des caractères de la section :

8.4 Propriétés style du cadre (box model)

Le modèle de Boîte - Apprendre le développement web | MDN (mozilla.org)

 

Propriétés du cadre autour de la section :

Si la propriété display:inline est présent, et pour tous les éléments en-ligne par défaut, width et height sont ignorés.

Il est plus facile d'utiliseur les  raccourcis margin-right: margin-left: margin-top: et margin-bottom.

On spécifie la référence du dimensionnement par :

ou globalement avec la super-propriété

On peut appliquer ces propriété qu'à un des cotés avec les 4 super-propriétés

et les propriété simples existent aussi, comme par exemple :  

A partir de CSS3 on peut spécifier le rayon de l'arrondi des angles avec la propriété :

On peut donner une forme elliptique avec 2 rayons comme ceci r1/r2  à la place du rayon unique r.

A partir de CSS3 on peut spécifier l'ombre d'une région au moyen du super-attribut de style :

avec 0px pour le degradé l'ombre est nette, et très floue si elle est égale à decalX ou decalY.

8.5 Propriétés style d'alignement du texte

Dans la section le texte peut être formaté au moyen des propriétés suivantes :

8.6 Propriétés style de fond et couleur du texte

On utilise le codage des couleurs déja vu en 5 pour les deux propriétés de couleur :

Super-propriété

        background:url("soleil.png") fixed no-repeat top right, url("neige.png") fixed;

De plus sur cet exemple 2 configurations sont considérées, séparées par une virgule. La dernière image est placée en premier, et les autres par dessus, la première image de la liste étant au-dessus de toutes les autres.

8.7 Propriétés style du curseur : cursor

On peut modifier la forme du curseur au passage dessus d'une zone avec la propriété cursor qui peut prendre de nombreuses valeurs :

/* Valeurs avec un mot-clé */

cursor: pointer;

cursor: auto;

/* Une valeur d'URL avec un mot-clé par défaut */

cursor: url(hand.cur), pointer;

/* Une valeur d'URL avec des coordonnées et un mot-clé par défaut */

cursor: url(cursor1.png) 4 12, auto;

cursor: url(cursor2.png) 2 2, pointer;

/* Valeurs globales */

cursor: inherit;

cursor: initial;

cursor: unset;

Les mots clés suivants sont habituels :

 

auto

default 

none

context-menu

help

pointer

progress

wait

cell

crosshair

variable

 

 

 

 

 

 

 

 

 

 

 

text

vertical-text

alias

copy

move

no-drop

grab

not-allowed

all-scroll

col-resize

 

 

 

 

 

 

 

 

 

 

row-resize

e-resize

s-resize

w-resize

ne-resize

nw-resize

se-resize

sw-resize

ew-resize

ns-resize

 

 

 

 

 

 

 

 

 

 

nesw-resize

nwse-resize

zoo-in

zoom-out

 

 

 

 

 

 

 

 

 

 

 

 

9 Ancres et redirections

9.1 Lien hypertexte, Balise <a>

Une ancre est définie dans une section quelconque du document à l'aide de l'attribut id, par exemple comme ceci : <p id="hautPage">Début du document</p>

Les balises <a href="url"> ..</a> définissent un lien hypertexte vers une autre url. Lorsque l'utilisateur clique sur l'élément situé entre les deux balises  <a> </a>, le navigateur ouvre la page spécifiée par l'attribut href de cette balise (ce qui suppose que cet attribut soit bien renseigné). Exemple :

<a href="http://www.llibre.fr">Cliquer ici pour aller sur mon site</a>

D'une autre page, on peut se diriger directement vers une section spécifiée par une ancre en faisant suivre l'url la page du nom de l'ancre : http:\\www.mapage.html#hautPage

Entre les balises <a ..> et </a> on peut mettre :

Attributs :

Complément dans les adresses url ou mail : On peut utiliser le ? puis les & pour spécifier des compléments cc (carbon copy), bcc (blid cc), subject et body (attention les espaces, guillemets, etc doivent être codés en html bas niveau). Exemples :

mailto:

mailto:nullepart@mozilla.org

mailto:nullepart@mozilla.org,personne@mozilla.org

mailto:nullepart@mozilla.org?cc=personne@mozilla.org

mailto:nullepart@mozilla.org?cc=personne@mozilla.org&subject=Ceci%20est%20l%27objet

mailto:nullepart@mozilla.org?cc=nom2@rapidtables.com&bcc=nom3@rapidtables.com&subject=L%27objet%20du%20courriel&body=Le%20corps%20du%20courriel

Exemple d'utilisation pour télécharger un fichier :

function txtdownload(strin, fichdest) {

  var el_a = document.createElement('A');

  el_a.href = 'data:text/plain;charset=utf-8,' + encodeURIComponent(strin);

  el_a.download = fichdest;

  el_a.click();

}

txtdownload('Bonjour tout le monde\nBonjour, au revoir.', 'essai.txt');

9.2 Pseudo-lien javascript

On peut également insérer dans le html un pseudo-lien vers du code javascript qui affiche une fenêtre popup comme suit :

<a href="javascript:alert('Coucou !!')">Mon Lien</a>

10 Insertion d'images : balise <IMG.../>

L'insertion d'image gif, jpg, png, bmp se fait à l'aide de la balise orpheline <IMG.../>.  Les principaux attributs sont :

Pour centrer une image on pourra utiliser les propriétés CSS suivantes :

style="display: block; margin-left: auto; margin-right: auto;"

 

11 Info-bulles

On peut utiliser l'attribut titre pour faire apparaitre une info-bulle, mais celle-ci met du temps à apparaitre. On peut obtenir des info-bulles plus réactives à utilisant  la détection du passage de la souris (hover) sur un élément du DOM et en réagissant à ce passage en affichant un élément caché qui contient le texte. Exemple :

<!DOCTYPE html>

<head>

<meta charset="utf-8"/>

<style>

/* Classe bulle utilisable dans un span

Le texte de l'info bulle doit être mis dans un span à l'intérieur du span qui active cette classe. Exemple.

<p>Si votre <span class="bulle">ramage<span>Chant des oiseaux</span></span>est aussi beau que votre plumage</p>

*/

span.bulle {

  position: relative;

  border-bottom: 1px dotted; /* On souligne le texte à renseigner. */

}

span.bulle span {

   display: none; /* On masque l'infobulle. */

}

span.bulle:hover {

   z-index: 500; /* On définit une valeur pour l'ordre d'affichage. */

   cursor: auto; /* On change le curseur par défaut par un curseur d'aide. */

}

span.bulle:hover span {

   display: inline; /* On affiche l'infobulle. */

   position: absolute;

   white-space: nowrap; /* Pour éviter des retours lignes non désirés. */

   top: 30px; /* On positionne notre infobulle. */

   left: 20px;

   background: white; /* Pour cacher le fond */

   padding: 5px;

   border: 1px solid;

   border-left: 2px solid;

}    

</style>

</head>

<body>

  <p>Si votre <span class="bulle">ramage <span>Chant des oiseaux</span></span>est aussi beau que votre plumage</p>

</body>

</html>

12 Zone interactives dans image

Des découpages avec des hyperliens sont spécifiés à l'intérieur d'un champ <map ...>...</map>. L'attribut name de la balise map permet de donner un nom à ce découpage qui pourra être utilisé par les images le référençant au moyen de l'attribut usemap (en faisant précder le nom du name d'un #). Exemple :

<img src="testimg.jpg" usemap="#rose" width="277" height="149"/>

<map name="rose">

<area shape="rect" coords="0,0,95,75" alt="llibre" href="http://www.libre.fr">

<area shape="rect" coords="190,75,277,149" alt="cofinet" href="http://carnet.cofinet.fr">

</map>

La balise area permet de définir une zone affectée à l'hyperlien. La forme de la zone est spécifiée à l'aide de l'attribut shape : les valeurs possibles sont :

 

13 Région figure

La région enserrée dans les balises <figure>...</figure> peut enserrer divers éléments dont une ou des images et la balise <figcaption>...</figcaption> qui va permettre de donner une légende à la zone. L'intérêt supplémentaire apporté par cette région est de permettre à un programme de récupérer toutes les figures du texte et de les référencer dans une table des figures, par exemple.

Exemple :

<figure>

    <img src="images/internetexplorer.png" alt="Logo Internet Explorer" />

    <img src="images/firefox.png" alt="Logo Mozilla Firefox" />

    <img src="images/chrome.png" alt="Logo Google Chrome" />

    <figcaption>Logos des différents navigateurs</figcaption>

</figure>

 

14 Insertion fichier texte

On peut insérer un fichier texte comme ceci :

  <p><object data="verse2.txt" scrolling="auto"/></p>

15 Contrôles et Formulaires

L'usager peut entrer des informations ou déclencher des actions à l'aide de divers éléments définis par les balises <bouton...>, <input...> ... Les  balises <input...> sont souvent enserrées dans une région délimitée par les balises <form...> ... </form>. Dans le cas où les balises input sont dansune région form, les informations (ou questions) peuvent être envoyées au serveur dans des variables (des tableaux) nommés POST ou GET selon la méthode choisie.

15.1 Les balises input (text, button, checkbox, radio) et button

La balise input est une balise orpheline qui permet de définir un champ de saisie, un checkbox,  bouton radio et zone de saisie, bouton à cliquer..., à l'aide des attributs suivants :

Pour associer une action à un bouton, il est plus simple d'utiliser la balise <button>...</button> avec l'attribut onclick, comme ceci :

<button onclick="login()">Cliquer ici</button>

Le bouton aura pour label Cliqer ici, et un clic provoquera l'appel de la fonction javascript login(). C'est léquivalent de :

<input type="button" value="Cliquer ici" onclick="login()">

L'action qui figure après le onclick est est instruction javascript exécutable, préférablement écrite entre guillemets simples ou doubles (conseillé mais non obligatoire), et nom pas le simple nom d'une fonction, c'est pourquoi, lorsque c'est une fonction elle est suivie des (..) avec ses éventuels arguments à jour.

Remarque : On accède normalement au texte enserré entre les balises qui vont par paire par texteContent, mais comme input est orpheline et ne présente pas de texte insérré, on accède à son texte par l'attribut value.

Voir les autres possibilités page 272 et suivantes de Robin Nixon.

Exemple simple :

<!DOCTYPE html><meta charset="utf-8"><head></head><body>

  <input value="Cliquez moi" type="button" onclick="btnClick()">

  <p id="idp">Vous avez cliqué 0 fois</p>

<script>

var nfois = 0;

function btnClick()

{ document.getElementById("idp").innerHTML="Vous avez cliqué " + (++nfois) + " fois";}

</script></body></html>

 

 

15.2 La balise Label

La balise label est surtout intéressante pour modifier le texte associé à un champ input qui autrement est imposé par le contexte (par exemple "Select. fichiers" dans le cas d'un input de type file). Si on veut choisir ce qui est affiché par l'input, on le cache en lui mettant style="display:none" et on l'enserre dans une balise label, comme suit :

<label style="cursor:pointer; border: solid;">

    <input type="file" onchange="selFichier(this.files)" style="display:none">

    Choisir une image

</label>

A la place du bouton traditionnel avec le texte "Select. fichiers", on aura le texte "Choisir une image", et pour que le curseur change en pointeur au-dessus du texte et que le texte ait l'apparence d'un bouton nous avons donné au label le style="cursor:pointer; border: solid;".

 

Il n'y a pas de saut de ligne après le champ de la balise label ce qui permet de l'utiliser pour donner un nom à un champ input du type=text comme celui-ci : <input type="text" name="pseudo" id="idzone"/>.  ou bien à une liste à choix multiple select (voir paragraphe suivant).

Il n'est pas nécessaire que l' input soit enserré dans le label. Il peut être ailleurs, mais dans ce cas il faut donner une id à l' input et mettre dans le label l'attribut for avec la valeur de l'id .

Quand on clique sur la zone enserrée par le label le curseur est automatiquement déplacé dans la zone dont la valeur de l'id est celle spécifié par la valeur de l'attribut for.

Ci-après un exemple avec un input de type "radio" et d'id="toto", le fait de cliquer sur un label ayant un for="toto" va cocher le radio d'id "toto".

15.3 Les formulaires

La balise form possède les attributs :

La balise method peut être absente si pas d'infos à renvoyer au serveur. Si elle est présente une requête de type XMLHttpRequest est envoyée au serveur. On peut voir la modification de l'url de la page dans la zone d'adresse du navigateur.

Exemple de forme envoyée par la page forme.php en méthode GET. Au début la barre d'adresse ne contient que l'url forme.php  :

<form name="inscription" method="GET" action="forme.php">

Entrez votre pseudo : <input type="text" name="pseudo"/><br>

Garçon ou fille ?<input type="radio" name="sexe" value="M"/>Garçon<input type="radio" name="sexe" value="F"/>Fille<br>

Entrez votre age : <input type="text" name="age"/><br/>

<input type="submit" name="valider" value="OK"/>

</form>

Après l'envoi par appui sur le bouton "OK", l'url se modifie dans la barre d'adresse car les variables du tableau GET sont transmises à la suite de l'url qui devient :

forme.php?pseudo=Armelle&sexe=F&age=15&valider=OK

L'url de la page (forme.php) est suivie du caractère ?, puis de chaque champ name suivi du caractère = séparé du champ suivant par le caractère &.

Dans le cas d'un envoi en méthode POST, comme suit :

<form name="inscription" method="POST" action="forme.php">

Entrez votre pseudo : <input type="text" name="pseudo"/><br>

Garçon ou fille ?<input type="radio" name="sexe" value="M"/>Garçon<input type="radio" name="sexe" value="F"/>Fille<br>

Entrez votre age : <input type="text" name="age"/><br/>

<input type="submit" name="valider" value="OK"/>

</form>

l'url de la barre d'adresse n'est pas modifiée, car les variables du tableau POST sont envoyés dans le corps du message sous la forme du string "pseudo=Armelle&sexe=F&age=15&valider=OK".

Les envois par GET sont moins sécurisés car les données apparaissent en clair et non cryptées dans l'url qui transite, alors qu'en POST ils sont dans le corps du message et cryptées (en hhtps).

La balise form définit une région qui peut être configuré au moyen de toutes les balises utilisables pour les régions définies au chapitre 5.

Dans la région form  les informations peuvent être saisies au moyen des zones du genre :

La balise <textarea ..></textarea> permet d'acquérir du texte multiligne. Le nombre de lignes peut être précisée par rows. On peut préciser le nombre de colonnes par cols et comment gérer les retours avec l'attribut wrap :

La balise input de type="text"offre une zone d'entrée de texte sur une seule ligne. Le champ value est facultatif. Il propose une réponse préliminaire dans la zone d'entrée de l'input. Si on veut mettre un texte explicatif au champ , on le met généralement avant la balise <input..>

Pour déclencher l'envoi, ou remettre à zéros le formulaire on utilise :

Exemple :

    <form name="inscription" method="post" action="annoncerando.php" id="forme1">

        <input type="text" name="date"/><br>

        <input type="text" name="nom" value="Michel"/>

    <textarea rows="6" name="comment"></textarea>

        <?php echo "<input hidden type='password' name='passe' value=".$pass.">"; ?>

        <input type="submit" name="okpass" class="bouton" value="Enregistrer">

        <input type="submit" name="okpass" class="bouton" value="Transfert">    

    </form>

 

Anticipation sur le PHP :

Dans cet example il y aura 2 boutons. L'un nommé Enregistrer et l'autre nommé Transfert. L'appui sur l'un quelconque de ces 2 boutons enverra une requête  XMLHttpRequest que l'on traitera dans une section php du fichier à l'aide du tableau de variables $_POST. Ici les deux boutons ayant le même name="okpass" un test de isset($_POST['okpass'])) donnant true indiquera une requête de leur provenance.

Supposons que la page web a été activée par la livraison d'un bon mot de passe, mémorisée dans le PHP par la variable $pass. La ligne ci-après, écrite dans une portion en PHP :

        <?php echo "<input hidden type='password' name='passe' value=".$pass.">"; ?>  permet de renvoyer le string $pass dans le $_POST['passe'], sans faire apparaitre son contenu ce qui permettra à la réception de la requête de ne la traiter que si le mot de passe est bon.

Les éléments $_POST['date'], $_POST['nom'], $_POST['comment'] contiennent les chaines entrées par l'usager. $_POST['nom'] est pré-rempli avec "Michel". L'élément $_POST['comment'] contient éventuellemnt plusieurs lignes avec les retours à la ligne conservés.

Pour savoir si l'input de type="text" name="date" a été rempli, il faut tester isset($_POST['name']) qui est false si le champ n'a pas été rempli.

On peut utiliser une ou plusieurs lignes du type :

<input type="hidden" name="truc" value="chose">

pour envoyer lors du clic sur un bouton de type="submit" situé dans la forme des informations supplémentaires quelconques. Elles seront accessibles dans $_POST['truc'] (=> "chose").

Forme avec plusieurs boutons submit :

Dans la forme précédente, il y a deux boutons type="submit" avec le même name="okpass". Pour savoir lequel des deux boutons a été cliqué, on testera leur value récupérée dans $_POST['okpass'] qui contiendra soit Enregistrer, soit Transfert.

Différentes formes avec des boutons identiques :

Lorsqu'une forme contient un bouton de type="submit" avec  le même  name et la même  value qu'une autre forme, on peut savoir dans quelle forme le bouton submit a été cliqué en ajoutant aux formes une ligne input cachée avec une chaine "idN" différente pour chaque forme.

<input type="hidden" name="idform" value="idN">

En testant la value renvoyée par $_POST["idform"] on saura quelle est la forme qui a envoyé le POST.

15.4 Liste à choix multiple: balise select

La balise <select...>...</select> et les sous-balises <option> permettent d'afficher une liste à choix multiples.

Attributs :

La balise select utilise également les attributs id, name, tabindex et  onclick et/ou onchange qui permettent de spécifier l'action javascript à exécuter lors d'un click ou d'un changement de sélection.

Remarque : onchange n'appelle pas la fonction à nouveau si le même item est choisi 2 fois de suite. Si on veut contourner cela, il faut, après le traitement nominal effectué dans la fonction, modifier la valeur du  selectedIndex en la mettant par exemple à -1, pour qu'à la sélection suivante le système constate un changement.

Les balises <option>Texte de l'option</option> contiennent les textes des options qui apparaissent dans une liste déroulante. On clique sur l'une d'elle pour la sélectionner. L'attribut selected="selected" permet de présélectionner cette option.

La balise <option> existait en version orpheline <option .... />utilisant l'attribut value="valeur" pour mettre un texte dans son champ. Cela pouvait entrainer une confusion car le texte de l'option sélectionnée est récupéré en javascript par l'attribut value du select et non pas de l'option.

Dans javascript, le numéro de la ligne sélectionnées est accéssible via l'attribut  selectedIndex et le texte de l'option par l'attribut value.

 Exemple :

<select id="seldir" onchange="changeFunc()">

  <option hidden>Developpez la sélection></option>

  <option>1er choix</option>

  <option>2me choix</option>

</select>

<p id="res1"></p>

<p id="res2"></p>

<script>

  function changeFunc() {

    var zs = document.getElementById("seldir");        

    var idx = zs.selectedIndex;

    var str = zs.value;

     document.getElementById("res1").textContent="Choix item numéro : "+ idx;

     document.getElementById("res2").textContent="Texte : "+str;

   zs.selectedIndex = 0.;  // AJOUT MLL, Voir REMARQUE

   }

</script>

Le premier item indice 0 affublé de l'attribut hidden ne sera pas sélectionnable.

REMARQUE :

Si l'item choisi est le même, la callback n'est pas appelée. Pour forcer son appel, on peut à la fin de la callback modifier la valeur de l'index sélectionné, en faisant par exemple :

zs.selectedIndex = 0.;

15.5 balise output et événement onInput

La balise <output> est  utilisée pour afficher une valeur relative à un champ <form>. Elle est souvent utilisée en collaboration avec l'événement onInput activé lorsque l'usager entre des données dans un champ <input>

Exemple 1

      <form oninput="x.value=a.value;">

        <input type="range" id="a" value="50"><output name="x"></output>

      </form>

Ici la forme est munie de l'écouteur oninput qui appelle l'exécution de sa fonction lorsque la valeur de l'input est modifiée. La valeur de a.value (qui initialement vaut 50) est affectée à l'élement de nom x (l'output) ce qui fait que le slider (type="range") sera positionné à 50% dès le départ.

Exemple 2

      <form oninput="x.value=parseInt(a.value)+parseInt(b.value)">0

        <input type="range" id="a" value="50">+<input type="number" id="b" value="50">=

    <output name="x"></output>

      </form>      

Ici les valeurs lues dans les 2 champs imput, slider (a) et texte (b) sont ajoutées et affectées à la value du champ output (x).

Un champ output de name="y" peut être est situé à l'extérieur d'un formulaire qui génère y.value, en faisant référence au formulaire par l'attribut form="id_du_form". Exemple :

<form oninput="y.value=a.value;" id="form1">

    <input type="range" id="a" value = "10">

</form>

<output form="form1" name="y"></output>

 

16 Les événements standard du code HTML

Ils commencent par on (onClick, onLoad, onMouseout, onMouseover ). En fait ce sont des attributs qui indiqueront la fonction callback à appeler lorsque l'évènement survient. Les objets événements qui leur sont associés dans javascript ne comportent pas le préfixe on (événements click, load, mouseout, mouseover...).

Attention, dans le code HTML le nom de ces événement n'est pas sensible à la casse, mais les  noms utilisés dans javascript doivent être écrits tout en minuscule !

Voici une liste plus fournie d'attributs qui peuvent être insérés dans les balises HTML du document associés à divers événements.

 

Événement

Survient

Commentaires

onLoad

après le chargement de la page

 Permet de mettre du code qui doit attendre que la page soit bien organisée pour être excécutée.

onUnload

lors de la fermeture de la page

 

onBeforeunload

juste avant la fermeture de la fenêtre

 

onClick

lors d'un clic

l'événement survient lors d'un clic sur le bouton gauche

onDblclick

lors d'un double-clic

double-clic sur le bouton gauche

onMousedown

quand on enfonce le bouton de la souris

cet événement survient sur un clic gauche ou un clic droit

onMouseup

quand on relâche le bouton de la souris

cet événement survient sur un clic gauche ou un clic droit

onMousemove

lorsque la souris se déplace dans un objet du document

 

onKeydown

quand on enfonce une touche du clavier

 

onKeyup

quand on relâche la touche

 

onKeypressed

quand on enfonce une touche du clavier

Firefox et IE5 sous Windows : équivalent à onkeydown()

onBlur

quand l'élément perd le focus

IE5 sous Windows : l'événement survient lorsque l'élément perd le focus.
Firefox sous Windows : l'événement survient juste avant que l'élément ne perde le focus.

onFocus

quand l'élément a le focus

Cas de l'input de type file <input type=« file » />.
IE5 sous Windows : l'événement se produit lors du clic dans la boîte de texte ou après avoir cliqué sur « OK » ou « Annuler » de la boîte de dialogue « Choisir fichier ». Pas d'événement lors du clic sur le bouton « Parcourir ».
Firefox sous Windows : l'événement se produit uniquement lors du clic sur le bouton « Parcourir ».

onChange

quand l'élément perd le focus et que son contenu a changé

 

oninput

dès que le contenu de l'élément est modifié

Pour les sliders par exemple : <input type="range" ...> oninput est placé dans la balise <form ..>

onSubmit

juste avant l'envoi d'un formulaire

 

onReset

lors de la réinitialisation du formulaire

 

onSelect

quand le contenu d'un élément est sélectionné

Firefox sous Windows : onselect n'est valide que pour les inputs de type texte (text, password, file et textarea).
Le nombre d'appels à cet événement va dépendre de la manière dont est faite la sélection (clavier, double-clic…) et du navigateur. On ne peut pas donc se fier à cette indication pour déterminer le nombre de caractères ou de mots sélectionnés.

onScroll

lors de l'utilisation de la barre de défilement

Firefox sous Windows : l'événement onscroll ne fonctionne pas sur les balises textarea.

onBeforeprint

avant l'impression (après le clic sur le bouton OK de la fenêtre d'impression)

Cet événement ne fonctionne que sous Internet Explorer.

onAfterprint

après l'impression

Cet événement ne fonctionne que sous Internet Explorer.

onCopy

lors du copier vers le presse-papier

Cet événement survient lors d'un « CTRL+C » ou d'un copier via le menu contextuel.

onPaste

lors du coller depuis le presse-papier

Cet événement survient lors d'un « CTRL+V » ou d'un coller via le menu contextuel.

 

17 CSS : Style et feuilles de style

Doc CSS : https://www.w3.org/Style/CSS/learning

Les attributs de style peuvent être définis de 3 manières

  1. 1.Localement dans une section au moyen de l'attribut style, comme déjà vu en 8 : 

    <p style = "font-size:16pt">Gros coucou</p> 

    Cette méthode n'est pas recommandée en HTML5. 

  2. 2.Dans le head à l'intérieur d'une section <style>...</style> comme décrit ci'après en 1 

  3. 3.Dans un fichier.css comme décrit ci après en section 3 et dans ce cas on ajoute la ligne suivante dans le head : <link rel="stylesheet" type="text/css" href="fichier.css" media="all"> 

Dans un bloc CSS, on utilise /* pour les commentaires */ qui peuvent porter sur plusieurs lignes.

18 Balise style dans le Head

En début de fichier, dans la section <head>, on peut à l'aide de balises <style>...</style> (ici ce n'est pas l'attribut style) définir au moyen d'un langage appelé CSS des styles pour certains types de région que l'on veut particulariser (p, div, h2, table,...) : Pour cela on met, après le nom du type de cette région (div par exemple), entre accolades des propriétés qu'on veut lui attribuer.

Exemple :

<head>

    <style>

 div {font-size:12pt}

 p {text-indent:12pt}

 /* Ceci est un commentaire dans le CSS */

        h1

        {

           background-color:yellow;

                text-align:center;

                font-style:italic

        }

            /* Plusieurs balises peuvent avoir le même lot de propriétés */

 h2, em, strong {color: blue}

            .monsty1 {font-style:italic ; color:red}

 .monsty2 {font-weight:bold ; color:green}

    </style>

</head>

Particulièrement utilisé pour que la page utilise toute la largeur de l'écran, quelle que soit sa taille, mettre :

body{width:100%;}

ou bien,  pour une page de largeur 90%, centrée (margin:auto), une largeur minimale de 600 pixels, et une largeur maximale de 2000 pixels, on mettra :

body{width:90%;margin:auto;min-width:600px;max-width:2000px}

19 Sélecteur des attributs Class et ID

L'inconvénient de cette approche est que toutes les régions <p> vont avoir le même style. Si on veut en particulariser certaines, on peut utiliser l'attribut style, ce qui n'est pas recommandé. On utilisera plutot des styles complémentaires associés à un groupe d'élément de même argument class ou de même argument id.

Pour définir un style complémentaire associé à groupe d'élément de même argument class on définit le nom de cette class en faisant précéder son nom d'un point (.) comme ceci .mysty1, comme dans les exemples suivants :

.souligne{text-decoration:underline;}

.barre{text-decoration:line-through;}

.ligne_dessus{text-decoration:overline;}

Les éléments qui ont ce nom comme attribut class, seront affectés de ce style. Exemple : <div class="monsty1" ...>    ... </div>, ou <p class="monsty2"...> ...</p>. On remarquera que le point initial utilisé pour le définir le nom de la class est absent.

La balise  <span class="souligne">Texte souligné</span>  est particulièrement utile pour appliquer une style désiré à un texte limité.

L'attibut class="class1 class2 class3" peut être utilisée pour référencer plusieurs styles qui, a priori, portent sur des propriétés différentes. Si une même propriété apparait dans 2 ou plusieurs styles avec des valeurs différentes, la dernière rencontrée est utilisée.

 

On peut également définir un style complémentaire associé à un élément d'argument  id dans le rubrique style de l'head, comme pour l'attribut class, mais on fait précéder son nom d'un "#" à la place du "." Ensuite, dans l'élement l'attribut id=.... est utilisé (il n'y en a qu'un dans la page car chaque id doit être unique) le style associé sera utilisé. Exemple :

<head>

    <style>

    #toto {color:blue;}

...

    </style>

</head>

...

<p id="toto">HAUT : Ligne écrite en bleu</p>

...

<a href="#toto">Aller en haut</a>

 

Le "." et le "#" font partie des sélecteurs de style décrits en section 4.

 

Si dans une balise il y a un id et une classe qui définissent la même proriété à 2 valeurs différentes, celle de l'id est proritaire.

 

20 Feuille de Style CSS

Le contenu situé entre les balises <style>...</style> (le contenu seulement, sans ces deux balises), peut être isolé dans un fichier monstyle.css appelé feuille de style.

Un fichier feuille de style (*.css) ne doit pas contenir les balises <style>...</style>.

Un fichier CSS peut-être inclus dans une section <head> au moyen de la balise html link, selon la syntaxe suivante :

<link rel="stylesheet" type="text/css" href="monstyle.css" media="all">

L'attribut media (facultatif) permet de préciser à quel périphérique le style est approprié. Voir paragraphe 7.4.

 

Par exemple on personnalise le style en fonction du média client, à l'aide des instructions suivantes :

<link rel="stylesheet" type="text/css href="general.css" media="all">

<link rel="stylesheet" type="text/css href="ecrancss" media="screen">

<link rel="stylesheet" type="text/css href="impression.css" media="print">

 

On verra plus loin (chapitre 7.2)qu'on peut importer le contenu d'une feuille de style d'une autre manière, à l'intérieur d'un champ <style> du head par l'instruction @import url(styles.css) all;

Exemple :

<style type="text/css">@import url(styles.css) all;</style>

Finalement le code CSS peut s'écrire à trois endroits différents :

Le langage CSS ayant beaucoup évolué, les vieux navigateurs coincent parfois. Les sites www.caniuse.com et normansblog.de proposent des tables de compatibilité des fonctionnalités de HTML et CSS sur différents navigateurs (et sur leurs différentes versions).

21 Les sélecteurs et séparateurs de style

L'indication qui précède la liste des propriétés entre accolades est appelé le sélecteur :

div {font-size:12pt}

p {text-indent:12pt}

Ci-dessus p et div sont les sélecteurs.

Tous les noms de zone sont des sélecteurs simples.

Quel que soit le sélecteur, le même élément peut être appelé plusieurs fois. Les propriétés seront ajoutées :

        h1 { background-color:yellow;}

        h1 { text-align:center; }

        h1 { font-style:italic }

S'il y a conflit, la dernière l'emporte.

21.1 . : sélecteur de class

un point précède le nom de la classe définie par l'attribut class="nomclass" : .nomclass

21.2 # : sélecteur d'identifiant

une # précède le nom de l'identifiant défini par l'attribut id="idtruc" : #idtruc

21.3 * : Sélecteur universel

Permet de sélectionner toutes les régions

* {font-style:italic}

21.4 [ attrib] Sélecteur d'attribut

a[title] {...}

Ci-dessus la balise <a ... title=".."..> qui possède un attribut title utilisera ce style.

21.4.1 Balise possédant un attribut de valeur donnée

[type="submit"] {width=100px}

Ci-dessus tous les éléments qui ont l'attribut type="submit" auront une largeur de 100px.

form input [type="submit"] {width=100px}

et ci-dessus, seul les éléments de type submit des input dans une zone form auront une largeur de 100px.

21.4.2 Balise possédant un attribut de valeur contenant une partie donnée

a[title*="ic"] {...}

Ci-dessus la balise <a ... title="clic"..> qui possède un attribut title avec "ic" à l'intérieur utilisera ce style.

21.5 Combinateurs

21.5.1 + : voisin direct ou successeur

Si les balises sont séparées par un +, les propriétés sont appliquées dans les zones qui se succèdent dans cet ordre :

h1 + p {color: yellow}

Ci dessus, la première zone <p> située après une zone <h1> sera en jaune.

21.5.2 ~ : voisins de parent commun

p ~ span permettra de cibler les éléments <span> qui suivent (immédiatement ou non) un élément <p> et qui ont le même élément parent.

21.5.3 > : enfants directs

ul > li permettra de cibler tous les éléments <li> qui sont directement situés sous un élément <ul>.

21.5.4 ˽ (espace) : descendants

Si les balises sont séparées par des espaces, les propriétés sont appliquées dans les zones qui présentent la deuxième caractéristique dans le contexte de la première.

h3 em {color: red}

Ci dessus, les zones <em> situées à l'intérieur des zones <h3> seront en rouge.

En l'utilisant le sélecteur universel et le sélecteur contextuel ˽ on peut faire des sélections subtiles :

#verdir * p {border:2px solid solid green}

Ici l'étoile sélectionne les enfants des zones de classes verdir et les paragraphes enfants de ces enfants, donc au final tous les paragraphes de 2ème génération et plus seront encadrés de vert.

21.5.5 || : combinateur de colonnes

col || td permettra de cibler n'importe quel élément <td> sous la portée d'une colonne <col>.

21.6 : (deux points) pseudo-classe action usager

Quand un sélecteur est suivi de :hover ou :active ou :focus ... le style s'applique en fonction de l'action de l'usager :

a:link lien qui n'a pas encore été visité

a:visited lien qui a déjà été visité

p:hover  lorsque le pointeur est au-dessus de l'élément. Approximatement équivalent d'un écouteur de l'évènement onHover

p:active  lorsque l'élément est activé (souris enfoncée ou relachée).

p:focus lorsque l'élément à le focus

p:focus:over lorsque l'élément à le focus et que le pointeur est au-dessus de l'élément

Il y a également external, target, lang, enabled, disabled, checked, indeterminate, root, nth-child(x), etc.

21.7 , (virgule) : lection par groupe

Si plusieurs sélecteurs sont séparées par des virgules, les propriétés sont associées à chacune d'elles :

h2, em {color: blue}

Ci dessus les zones h2 et em seront en caractères bleus.

21.8 Préseance des règles

Considérons les deux règles suivantes :

#heading #main #menu .text .quote p span { règle 1 }

#heading #main .text .quote .news p span { règle 2 }

et supposons  qu'on soit dans un cas qui satisfait ces 2 conditions. Pour savoir quelle règle appliquer il faut caluler le nombre spécificité de la règle [i c b] ou i est le nombre de règles qui se rapportent à des identifiants (ici #heading, #main et #menu), c le nombre de règles qui se rapportent à des classes (ici .text, .quote et .news) et b le nombre de règles qui ce rapportent à des balises (ici p et span). La spécificité de la règle 1 est [3 2 2] et la spécificité de la règle 2 est [2 3 2]. C'est la spécificité la plus grande qui l'emporte, ici la règle 1.

A préséance égale, la dernière règle trouvé l'emporte. On peut aussi utiliser l'attribut !important qui permet de prendre le dessus en cas d'égalité.

21.9 Liste complète des sélecteurs

Liste complète des sélecteurs ici : CSS3 module: W3C Selectors

22 Les balises de bloc sémantiques (main, section.,.)

Par sémantique on entend une balises qui donnent un certain sens au bloc comme article, section, paragraphe, note de bas de page, etc... Si elle n'est pas particularisée au niveau du CSS, elle n'apporte rien de plus qu'un simple bloc </p>. C'est au niveau du CSS qu'on donne du sens.

<main> est relatif au contenu unique de la page. N'utilisez <main> que une seule fois par page et placez-le directement à l'intérieur de l'élement <body>. Il peut y en avoir plusieurs à conditions qu'ils soient "hidden" sauf un. Idéalement, il ne devrait pas être imbriqué dans d'autres éléments.

<article> entoure un bloc de contenu en relation constituant en soi une unité de sens pris isolément par rapport au reste de la page (par ex. un unique billet de blog.)

<section> ressemble à <article>, mais sert plutôt à contenir une partie isolée de la page constituant un élément de fonctionnalité en soi (par ex. une petite carte ou un ensemble d'intitulés d'article ou de résumés). Il est considéré de bonne pratique de commencer chaque section par un heading ; notez également que vous pouvez fractionner un <article> en plusieurs <section> ou bien des  <section> en divers <article>, selon le contexte.

<aside> contient les composantes non directement liées au contenu principal mais pouvant fournir des informations supplémentaires indirectement en relation avec ce dernier (entrées de glossaire, biographie de l'auteur, liens connexes, etc).

<header> représente un groupe de contenus introductoires. Enfant de <body>, il définit l'en-tête général de la page web, mais enfant de <article> ou <section> il définit un en‑tête propre à cette section (ne confondez pas titles et headings).

<nav> contient les éléments principaux de navigation pour la page. Les liens secondaires, etc., n'entrent pas dans la navigation.

<footer> représente un groupe de contenu de fin pour une page.

23 Exemples de propriétés de style

      body {
       
margin: 0;
     }

      div {
       
box-sizing: border-box;
       
width: 100px;
       
height: 100px;
       
background-image: url(bgtile.png);
       
border: 10px solid red;
     }

 

      li {
       
margin-bottom: 10px;
     }

     li button {
       
font-size: 8px;
       
margin-left: 20px;
       
color: #666;
     }

Remarquer l'appel de la fonction url() avec le nom du fichier image.

24 Règles @

Une règle @ a pour forme générique :

@IDENTIFIANT (RÈGLE);

Le @ doit être le 1er caractère de la ligne

 

Les principaux identifiants sont :

Et pour les règles @ imbriquées qui peuvent être utilisées au plus haut niveau de la feuille de style et aussi à l'intérieur de règles conditionnelles :

Exemples :

24.1 Définir utf-8 pour une feuille de style

@charset "utf-8";

Cette règle doit être le premier élément de la feuille de style (aucun caractère ne doit être écrit avant). Cette règle ne pourra pas être utilisée au sein d'un attribut style d'un élément HTML ou avec l'élément <style> car c'est l'encodage du document HTML qui est alors pris en compte.

24.2 @import : Inclusion de feuilles de style externes

A placer avant toutes les autres règles sauf @charset.

Syntaxe :

 

@import url;

@import url liste-requetes-media;

url est l'emplacement de la ressource qu'on souhaite importer et liste-requetes-media est une liste de requêtes média séparées par des virgules qui conditionnent l'application des règles CSS pour l' url associée.

 

@import url("fineprint.css") print;

@import url("bluish.css") speech;

@import 'custom.css';

@import url("chrome://communicator/skin/");

@import "common.css" screen;

@import url('landscape.css') screen and (orientation:landscape);

 

ATTENTION : Les feuilles de style importées ne dovent pas contenir de balises <style>...</style>.

24.3 Conditionnelle à un navigateur @support

Exemple :

* On utilise la division en grille si elle est supportée */

@supports (display: grid) {

  div {

    display: grid;

  }

}

/* sinon on utilisation standard cadré à droite) */

@supports not (display: grid) {

  div {

    float: right;

  }

}

Cette règle peut être utilisée au plus haut niveau de la feuille de style ou à l'intérieur d'un groupe conditionnel.

24.4 Conditionnelle à un media : @media

La requête média s'applique uniquement si elle est vérifiée pour l'appareil, le contexte avec lequel le contenu est consulté. Elle peut être imbriquée dans une autre règle conditionnelle.

Les types de médias sont :

La condition porte sur des caractériques entourées de parenthèses, qu'on peut combiner avec une virgule (ou vrai dès qu'une caractéristique est vrai), not, and ou only :

Les dimension sont à spécifier en px ou em.

 

Remarque :  min-x : v <==> x > v    et max-x : v <==> x < v à partir de CSS 4 seulement. Utiliser min et max de préférence, et se reporter à cette remarque uniquement pour mémoriser le sens de la comparaison.

 

Exemples :

/* Au niveau le plus haut du code */

@media screen and (min-width: 900px) {

  article {

    padding: 1rem 3rem;

  }

}

 

@media print {

  body { font-size: 10pt }

}

@media screen {

  body { font-size: 13px }

}

@media screen, print {

  body { line-height: 1.2 }

}

 

@media only screen

  and (min-width: 320px)

  and (max-width: 480px)

  and (-webkit-min-device-pixel-ratio: 2) {

    body { line-height: 1.4 }

}

 

/* Pour viser les mobiles utiliser cette règle */

@media all and (max-device-width: 600px)

{

    /* car leur largeur est rarement > à 600 px */

}

 

 

/* Imbriquée dans une autre règle-@ conditionnelle */

@supports (display: flex) {

  @media screen and (min-width: 900px) {

    article {

      display: flex;

    }

  }

}

 

24.5 Définition d'une nouvelle police

Cette règle peut être utilisée au plus haut niveau de la feuille de style ou à l'intérieur d'un groupe conditionnel.

@font-face {

 font-family: "Open Sans";

 src: url("/fonts/OpenSans-Regular-webfont.woff2") format("woff2"),

        url("/fonts/OpenSans-Regular-webfont.woff") format("woff");

}

25 Fonctions dans les CSS

On peut utiliser toutes sortes de fonctions dans les feuilles de style : Fonctions mathématiques, de transformation, de filtrage (invert...), définissant des couleurs (rgb...), des images, des compteurs (counter...), des formes (circle...)...

Parmi les fonctions mathématiques, en plus de traditionnelles min, max, round, sin, cos... :

26 Formules mathématiques avec MathJax

MathJax est un environnement javascript qui permet d’inclure des formules mathématiques avec la syntaxe Latex. Pour cela il faut inclure dans le head la ligne suivante :

<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>  

Quasiment toutes les formules Latex sont comprises, mais les formules en ligne doivent être enserrées entre \( et \) et non pas entre $ et $.

Exemple :

<!DOCTYPE html>

<html>

<head>

<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>    

</head>

<body>

<p>Voici une formule inline : \( E = mc^2 \).</p>

<p>Voici une formule en bloc :</p>

\[

  \int_a^b f(x)\,dx = F(b) - F(a)

\]

</body>

</html>

 

Pour pouvoir bénéficier de ces deux possibilités { entre  \( et \) et entre $ et $ }, il faut ajouter avant la ligne d’importation de la bibli, les lignes suivantes :

<script>

// Version du script qui accepte les formules entre $ $

MathJax = {

  tex: {

    inlineMath: [['$', '$'], ['\\(', '\\)']]

  }

};

</script>

Exemple :

<!DOCTYPE html>

<html>

<head>

<script>

// Version du script qui accepte les formules entre $ $

MathJax = {

  tex: {

    inlineMath: [['$', '$'], ['\\(', '\\)']]

  }

};

</script>

<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>  

</head>

<body>

<p>Voici une formule inline : \( E = mc^2 \).</p>

<p>Voici une autre formule inline : $ E = mc^2 $.</p>

<p>Voici une formule en bloc :</p>

\[

  \int_a^b f(x)\,dx = F(b) - F(a)

\]

</body>

</html>

Dans le premier cas on importe le fichier tex-mml-chtml.js et dans le deuxième c’est le fichier tex-chtml.js.

Utilisation dépot local :

On peut importer la bibliothèque depuis le dépot GitHub https://github.com/mathjax/MathJax et copier le répertoire es5 et son contenu à la racine de son hébergement Web, et à ce moment là on y accèdera par

<script src="/es5/tex-mml-chtml.js"></script>  

ou par :

<script src="es5/tex-chtml.js"></script>  

On peut également utiliser le script suivant qui va chercher la bibli à son dépôt et s’il ne la trouve pas, va utiliser celle qu’on a copiée localement sur notre serveur :

<script>

  (function() {

    const script = document.createElement('script');

    script.src = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js";

    script.onerror = function() {

      console.warn("MathJax CDN unavailable, loading local version.");

      const localScript = document.createElement('script');

      localScript.src = "src_mathjax/tex-mml-chtml.js";

      document.head.appendChild(localScript);

    };

    document.head.appendChild(script);

  })();

</script>