HTML5 / CSS 2.x/3 / PHP / MySQL ...

Des images qui font bonne figure

L'élément figure est loin d'être connu par les développeurs qui se mettent au HTML5. Il gagne pourtant à être maîtrisé.

L'indépendance des images

Jusqu'à présent, les images étaient simplement insérées dans la continuité du texte sous cette forme:

   <img src="monImage.jpg"/>

Mais si on veut associer une légende à cette image, il est nécessaire d'encadrer l'image avec un élément div> de cette manière:

<div>
   <img src="monImage.jpg"/>
   <div>légende de l'image</div>
</div>

Avec cette manière de coder, il est difficile d'associer explicitement la légende encadrée par div avec l'image. Un programme d'analyse syntaxique, ceux des moteurs de recherche par exemple, vont comprendre cette division comme sous-ensemble du texte général.

Le nouvel élément figure règle ce problème en séparant clairement l'élément img du contexte du flux général:

<figure>
   <img src="imageExemple.jpg"/>
   <figcaption>l'apéro</figcaption>
</figure>

Et ce que ça donne:

l'apéro

L'élément figure n'a initialement aucun style associé. Pour notre exemple, nous souhaitons qu'il s'affiche à droite du texte général. On va lui associer le code CSS suivant:

figure {
    display: block;
    float: right;
    width: 200px;
    text-align: center;
    margin: 0px;
    padding: 4px;
    border: 1px solid #cfcfcf;
}
 
figure img {
    width: 100%;
    margin: 0px;
    padding: 0px;
}
figure figcation {
    font-style: italic;
}
l'apéro

Ici, l'image est bien sortie du contexte général.

Au passage, on en profite pour forcer la dimension de l'image à 200 pixels. L'image originale faisant 320 pixels de large, on la contraint à prendre la taille maximale du contenant, ici la largeur de l'élément figure qu'on a fixé à 200 pixels.

On a défini img en css, ainsi seul l'élément img placé dans figure aura une taille et un style modifié, les autres éléments img en dehors de figure conserveront leur présentation inchangée.

L'élément figcaption doit être utilisé à l'intérieur de figure pour afficher la légende associée à l'image. Dans notre exemple, on a mis cette légende sous l'image, en caractères italique et texte centré.

Avec figure et figcaption il n'est plus nécessaire de faire des acrobaties avec des imbrications de div ou des horreurs avec table.

Une galerie simplifiée

Le problème qui nous est soumis est le suivant: comment afficher une succession d'images, et une arrivé en bout d'écran, on revient en début de ligne suivante? Si on a un écran peu large, on affiche 3 ou 4 images par lignes, si on a un écran très large, on affiche 6 ou 8 ou plus d'images par ligne.

Vous l'avez compris, on va bannir table qui doit servir seulement pour afficher des données en lignes et colonnes.

On redéfinit le css de figure comme suit:

figure {
    display: inline-block;
    height: 180px;
    width: 200px;
    text-align: center;
    vertical-align: middle;
    margin: 2px;
    padding: 4px;
    border: 1px solid #cfcfcf;
}
 
figure img {
    width: 100%;
    margin: 0px;
    padding: 0px;
}
figure figcation {
    font-style: italic;
}

Et maintenant, il n'y a plus qu'à décrire notre succesion d'images:

<figure>
    <img src="vignette.01.jpg"/>
</figure>
<figure>
    <img src="vignette.02.jpg"/>
</figure>
<figure>
    <img src="vignette.03.jpg"/>
</figure>
<figure>
    <img src="vignette.04.jpg"/>
</figure>
...etc...

Et le résultat à l'affichage:

Si on veut mettre plus de vignettes sur la ligne, on peut diminuer la largeur de figure: width: 200px;

Les images Ascii-Art

Les images composées à partir de lettres et autres caractères ASCII ne sont pas des éléments indépendants comme pourraient l'être des images au format jpeg, gif ou png.

Sans figure, nous n'aurions aucun moyen de déclarer sémantiquement ces caractères comme une image. Voici le code pour décrire un petit poisson en art-ascii:

<figure>
     <pre>
 
o           .'`/
    '      /  (
  O    .-'` ` `'-._      .')
     _/ (o)        '.  .' /
     )       )))     ><  <
     `\  |_\      _.'  '. \
       '-._  _ .-'       '.)
           `\__\
     </pre>
     <figcaption>un poisson en Ascii-Art</figcaption>
</figure>

o           .'`/
    '      /  (
  O    .-'` ` `'-._      .')
     _/ (o)        '.  .' /
     )       )))     ><  <
     `\  |_\      _.'  '. \
       '-._  _ .-'       '.)
           `\__\
    
un poisson en Ascii-Art

Sur le plan sémantique, un moteur de recherche qui va analyser cette page web comprendra que les informations comprises entre <figure> et </figure> sont à analyser comme image et non comme des caractères typographiques!

Tous les articles sur ce thème