Icônes

La plupart des images font partie de votre contenu, mais les icônes font partie de votre interface utilisateur. Elles doivent être mises à l'échelle et s'adapter de la même manière que le texte de votre interface utilisateur.

Scalable Vector Graphics

En ce qui concerne les images photographiques, vous avez le choix entre de nombreux formats : JPG, WebP et AVIF. Pour les images non photographiques, vous pouvez choisir entre les formats PNG (Portable Network Graphics) et SVG (Scalable Vector Graphics).

Les formats PNG et SVG sont adaptés aux zones de couleur unie et permettent tous deux d'avoir des arrière-plans transparents. Si vous utilisez un PNG, vous devrez probablement créer plusieurs versions de votre image dans différentes tailles et utiliser l'attribut srcset sur votre élément img pour rendre l'image responsive. Si vous utilisez un SVG, il est responsive par défaut.

Les PNG (ainsi que les JPG, WebP et AVIF) sont des images bitmap. Les images bitmap stockent les informations sous forme de pixels. Dans un SVG, les informations sont stockées sous forme d'instructions de dessin. Lorsque le navigateur lit le fichier SVG, les instructions sont converties en pixels. Mieux encore, ces instructions sont relatives. Quelles que soient les dimensions que vous utilisez pour décrire les lignes et les formes, tout s'affiche avec la netteté appropriée. Au lieu de créer plusieurs SVG de différentes tailles, vous pouvez en créer un seul qui fonctionnera dans toutes les tailles. Il n'est pas nécessaire d'utiliser l'attribut srcset.

<img src="image.svg" alt="A description of the image." width="25" height="25">
<img src="image.svg" alt="A description of the image." width="250" height="250">

Le langage XML est utilisé pour écrire les instructions dans un fichier SVG. Il s'agit d'un langage de balisage, comme le HTML.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="-21 -21 42 42" width="100" height="100">
  <title>Smiling face</title>
  <circle r="20" fill="yellow" stroke="black"/>
  <ellipse rx="2.5" ry="4" cx="-6" cy="-7" fill="black"/>
  <ellipse rx="2.5" ry="4" cx="6" cy="-7" fill="black"/>
  <path stroke="black" d="M -12,5 A 13.5,13.5,0 0,0 12,5 A 13,13,0 0,1 -12,5"/>
</svg>

Un emoji visage souriant jaune qui s'agrandit sans pixellisation.

Vous pouvez même insérer un SVG dans du HTML.

<figure>
  <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="-21 -21 42 42" width="100" height="100">
    <title>Smiling face</title>
    <circle r="20" fill="yellow" stroke="black"/>
    <ellipse rx="2.5" ry="4" cx="-6" cy="-7" fill="black"/>
    <ellipse rx="2.5" ry="4" cx="6" cy="-7" fill="black"/>
    <path stroke="black" d="M -12,5 A 13.5,13.5,0 0,0 12,5 A 13,13,0 0,1 -12,5"/>
  </svg>
  <figcaption>
  A description of the image.
  </figcaption>
</figure>

Si vous intégrez un SVG de cette manière, le navigateur n'a plus besoin d'envoyer une requête. Il n'y aura pas d'attente pour le téléchargement de l'image, car elle arrive avec le HTML…dans le HTML. De plus, comme vous le verrez bientôt, l'intégration de SVG de cette manière vous permet de mieux contrôler leur style.

Icônes et texte

Les images d'icônes présentent souvent des formes simples sur un arrière-plan transparent. Le format SVG est idéal pour les icônes.

Si vous avez un bouton ou un lien contenant du texte et une icône, l'icône est de présentation. C'est le texte qui compte. Lorsque vous utilisez un élément img, un attribut alt vide indique que l'image est de présentation.

<button>
<img src="hamburger.svg" alt="" width="16" height="16">
Menu
</button>

Comme le CSS est destiné à la présentation, vous pouvez placer l'icône dans votre CSS en tant qu'image d'arrière-plan.

<button class="menu">
Menu
</button>
.menu {
  background-image: url(hamburger.svg);
  background-position: 0.5em;
  background-repeat: no-repeat;
  background-size: 1em;
  padding-inline-start: 2em;
}

Si vous placez le SVG dans votre HTML, utilisez l'attribut aria-hidden pour le masquer des technologies d'assistance.

<button class="menu">
  <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 80" width="16" height="16">
    <rect width="100" height="20" />
    <rect y="30" width="100" height="20"/>
    <rect y="60" width="100" height="20"/>
  </svg>
  Menu
</button>

Icônes autonomes

Utilisez du texte dans vos boutons et liens si vous voulez que leur objectif soit clair. Vous pouvez utiliser une icône sans texte, mais ne supposez pas que tout le monde comprend la signification d'une icône particulière. En cas de doute, effectuez des tests auprès de vrais utilisateurs.

Si vous décidez d'utiliser une icône sans texte d'accompagnement, elle n'est plus de présentation. Une image d'arrière-plan en CSS n'est pas un moyen approprié d'afficher l'icône. L'icône doit recevoir un nom accessible en HTML.

Si vous utilisez un élément img, l'icône reçoit son nom accessible à partir de l'attribut alt.

<button>
<img src="hamburger.svg" alt="Menu" width="16" height="16">
</button>

Une autre option consiste à placer le nom accessible sur le lien ou le bouton lui-même et à déclarer que l'image est de présentation. Utilisez l'attribut aria-label pour fournir le nom accessible.

<button aria-label="Menu">
<img src="hamburger.svg" alt="" width="16" height="16">
</button>

Si vous placez le SVG dans votre HTML, utilisez l'attribut aria-label sur le lien ou le bouton pour lui donner un nom accessible et utilisez l'attribut aria-hidden sur l'icône.

<button aria-label="Menu">
  <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 80" width="16" height="16">
    <rect width="100" height="20" />
    <rect y="30" width="100" height="20"/>
    <rect y="60" width="100" height="20"/>
  </svg>
</button>

Styliser les icônes

Si vous intégrez vos icônes SVG directement dans votre HTML, vous pouvez styliser certaines parties comme n'importe quel autre élément de votre page. Vous ne pouvez pas le faire si vous utilisez un élément img pour afficher vos icônes.

Dans l'exemple suivant, les éléments rect à l'intérieur du SVG ont une valeur fill de blue pour correspondre aux styles du texte du bouton.

button {
 color: blue;
}
button rect {
  fill: blue;
}

Vous pouvez également appliquer des styles hover et focus.

button:hover,
button:focus {
  color: red;
}
button:hover rect,
button:focus rect {
  fill: red;
}

Ressources

Les icônes sont un élément important de l'image de marque de votre site. Vous allez maintenant découvrir comment rendre d'autres aspects de votre image de marque responsives grâce à la puissance des thèmes.

Vérifiez vos connaissances

Testez vos connaissances sur les icônes

Le format SVG peut gérer n'importe quelle densité de pixels avec un seul fichier ou bloc de code <svg>.

Vrai
Le format SVG inclut la manière de dessiner les formes et les lignes, quelle que soit la densité de pixels, l'échelle ou le niveau de zoom.
Faux
Contrairement aux formats .png ou .jpg, le format SVG n'a pas besoin de srcset ni d'élément <picture>.

Quels sont les avantages du code SVG directement dans le HTML ?

Stylisable à partir de CSS
Faites correspondre les formes des icônes SVG aux boutons et aux couleurs de la marque.
Aucun téléchargement n'est requis.
Toutes les instructions sont disponibles.
Chargement différé par défaut.
Aucun téléchargement à différer.
Moins d'utilisation du processeur.
J'ai inventé ça.
Thème clair ou sombre sans nouvel élément.
Les requêtes média peuvent modifier les styles SVG intégrés.