J'interviens un peu tard, mais je suis tombé sur cette page en y réfléchissant moi-même. Bien sûr, je ne sais pas comment Facebook ou Twitter l'ont justifié, mais voici ma propre réflexion pour ce qu'elle vaut.
En fin de compte, j'ai conclu que cette pratique n'est pas si peu sémantique (est-ce un mot ?). En fait, en dehors de la brièveté et de l'association sympathique de "i pour icône", je pense que c'est en fait le choix le plus sémantique pour une icône lorsqu'un simple <img>
L'étiquette n'est pas pratique.
1. L'utilisation est conforme à la spécification.
Bien que ce ne soit pas ce que le W3 avait principalement à l'esprit, il me semble que la spécification officielle de l'initiative <i>
pourrait accueillir une icône assez facilement. Après tout, le symbole de la flèche de réponse dit "répondre" d'une autre manière. Il exprime un terme technique qui peut être peu familier au lecteur et qui serait typiquement en italique. ("Chez Twitter, c'est ce que nous appelons un flèche de réponse .") Et c'est un terme d'un autre langage : un langage symbolique.
Si, au lieu du symbole de la flèche, Twitter a utilisé <i>shout out</i>
ou <i>[Japanese character for reply]</i>
(sur une page en anglais), ce qui serait conforme à la spécification. Alors pourquoi pas <i>[reply arrow]</i>
? (Je parle ici strictement de sémantique HTML, et non d'accessibilité, ce dont je parlerai plus tard).
Pour autant que je puisse voir, la seule partie de la spécification explicitement violée par l'utilisation de l'icône est la phrase "span of text" (lorsque la balise ne contient pas de texte également). Il est clair que le <i>
est principalement destinée au texte, mais il s'agit d'un détail mineur par rapport à l'intention générale de la balise. La question importante pour cette balise n'est pas de savoir quel format de contenu elle contient, mais quelle est la signification de ce contenu.
C'est particulièrement vrai si l'on considère que la frontière entre "texte" et "icône" peut être presque inexistante sur les sites Web. Le texte peut ressembler davantage à une icône (comme dans l'exemple japonais) ou une icône peut ressembler à du texte (comme dans un bouton jpg qui dit "Envoyer" ou une photo de chat avec une légende superposée) ou le texte peut être remplacé ou amélioré par une image via CSS. Texte, image - qui s'en soucie ? Il s'agit de contenu. Tant que tout le monde - humains handicapés, navigateurs handicapés, robots des moteurs de recherche et autres machines de toutes sortes - peut comprendre cette signification, nous avons fait notre travail.
Le fait que les auteurs de la spécification n'aient pas pensé (ou choisi) de clarifier ce point ne doit pas nous empêcher de faire ce qui est logique et conforme à l'esprit de la balise. Le site <a>
était à l'origine destinée à emmener l'utilisateur ailleurs, mais elle peut maintenant faire apparaître une lightbox. La belle affaire, n'est-ce pas ? Si quelqu'un avait trouvé le moyen de faire apparaître une lightbox en cas de clic avant que les spécifications ne le rattrapent, il aurait quand même dû utiliser la balise <a>
et non une balise <span>
même si elle n'était pas entièrement conforme à la définition actuelle - parce qu'elle s'en rapprochait le plus tout en restant conforme à l'esprit de la balise ("quelque chose va se produire lorsque vous cliquez ici"). Même chose pour <i>
- quel que soit le type de chose que vous mettez dedans, ou quelle que soit la créativité avec laquelle vous l'utilisez, il exprime l'idée générale d'un terme alternatif ou à part.
2. Le site <i>
étiquette ajoute une signification sémantique à un élément d'icône.
L'option alternative pour porter une classe d'icônes par elle-même est <span>
qui n'a bien sûr aucune signification sémantique. Lorsqu'une machine demande à la <span>
ce qu'il contient, il dit, "Je ne sais pas. Ça pourrait être n'importe quoi." Mais le <i>
L'étiquette dit : "Je contient une façon différente de dire quelque chose que la façon habituelle, ou peut-être un terme peu familier". Ce n'est pas la même chose que "Je contient une icône", mais cela s'en rapproche beaucoup plus que <span>
Je l'ai !
3. Finalement, c'est l'usage commun qui fait foi.
En plus de ce qui précède, il convient de considérer que les lecteurs automatiques (qu'il s'agisse d'un moteur de recherche, d'un lecteur d'écran ou autre) peuvent à tout moment commencer à tenir compte du fait que Facebook, Twitter et d'autres sites web utilisent la technologie de l'adresse IP. <i>
pour les icônes. Ils ne se soucient pas tant de la spécification que d'extraire le sens du code par tous les moyens nécessaires. Ainsi, ils peuvent utiliser cette connaissance de l'usage courant pour simplement enregistrer que "il peut y avoir une icône ici" ou faire quelque chose de plus avancé comme déclencher une recherche dans le CSS pour un indice de signification, ou qui sait quoi. Ainsi, si vous choisissez d'utiliser le <i>
pour les icônes sur votre site web, vous pouvez donner plus de sens que la spécification.
De plus, si cet usage se généralise, il sera probablement inclus dans la spécification à l'avenir. Vous devrez alors passer en revue votre code, en remplaçant <span>
s avec <i>
's ! Il peut donc être judicieux de se rallier à ce qui semble être la direction de la spécification, en particulier lorsque cela n'entre pas clairement en conflit avec la spécification actuelle. L'usage courant a tendance à dicter les règles linguistiques plutôt que l'inverse. Si vous êtes assez vieux, vous souvenez-vous que "site Web" était l'orthographe officielle lorsque le mot était nouveau ? Les dictionnaires insistaient sur le fait qu'il devait y avoir un espace et que Web devait être mis en majuscule. Il y avait des raisons sémantiques à cela. Mais l'usage commun disait : "Peu importe, c'est stupide. J'utilise 'site web' parce que c'est plus concis et plus joli." Et très vite, les dictionnaires ont officiellement reconnu cette orthographe comme correcte.
4. Je vais donc l'utiliser.
Donc, <i>
donne plus de sens aux machines en raison de la spécification, il donne plus de sens aux humains parce que nous associons facilement "i" à "icône", et c'est seulement une lettre de long. Gagnant ! Et si vous vous assurez d'inclure un texte équivalent soit à l'intérieur de la balise <i>
ou juste à côté (comme le fait Twitter), les lecteurs d'écran comprennent alors où cliquer pour répondre, le lien est utilisable si le CSS ne se charge pas, et les lecteurs humains ayant une bonne vue et un navigateur décent voient une jolie icône. Avec tout cela en tête, je ne vois pas l'inconvénient.
5 votes
Exemple : La flèche de réponse en dessous des tweets sur Twitter :
<i class="sm-reply"></i>
.0 votes
Facebook utilise également le même tag pour afficher les flèches
0 votes
Si vous avez besoin d'utiliser un élément HTML pour afficher une icône, alors il n'y a pas de raison pas à utiliser
<i>
sur<span>
. Les deux ne sont pas très bons, alors autant utiliser le plus court.2 votes
Pourquoi ne pas
<span>
être utilisé ?6 votes
Il me semble que pour des raisons sémantiques et d'accessibilité, la balise img devrait toujours être utilisée pour les icônes, avec le texte alt.
12 votes
@nroose Selon moi, les images utilisées pour les icônes ne font pas partie du contenu, mais du style de la page (contrairement, par exemple, à l'image d'une vache sur la page de wikipedia consacrée aux vaches). C'est pourquoi elles doivent être définies dans la css, et non comme une image dans une balise img.
1 votes
C'est un point de vue intéressant. En fait, je n'ai pas de problème avec le css pour le style, et parfois cela implique des images, bien que ce soit un peu gênant avec l'image étant l'image "d'arrière-plan", plutôt que le premier plan. Pouvez-vous commenter l'accessibilité ?
0 votes
J'ajoute simplement l'avis du W3C sur la balise <i> (et <b>), cf. w3.org/International/questions/qa-b-and-i-tags
0 votes
Il s'agit de l'utiliser à des fins de mise en page, alors qu'il ne devrait jamais être utilisé. Les CSS sont là pour ça. Il n'est pas question de l'utiliser pour d'autres raisons.
1 votes
Il s'agit d'un fil de discussion/question assez intéressant maintenant, étant donné que Bootstrap est passé à l'utilisation de span, Twitter utilise maintenant span, et Facebook utilise principalement span mais quelques restes de i. (Twitter utilise des polices d'icônes et Facebook utilise background-image).
10 votes
Je ne pense pas que les décisions sémantiques en HTML5 doivent être considérées comme "basées sur l'opinion".
0 votes
@onsmith, vous pouvez voter pour la réouverture.
0 votes
C'est dommage que cette question ait été fermée car je pense que la vraie réponse n'a pas encore été donnée. La vérité est que
<i>
est sémantiquement défini comme une plage de texte. Une icône n'est pas une plage de texte.<span>
est défini comme un conteneur générique pour la formulation du contenu. Une icône pourrait correspondre à cette définition. L'icône globaleclass
est conçu pour étendre la sémantique des éléments HTML et n'est pas strictement réservé au style. Par conséquent, on devrait pouvoir conclure objectivement que<span class="icon">
est la seule réponse sémantiquement correcte pour définir les icônes dans la spécification HTML5.