Pourquoi les balises <b> et <i> sont-elles obsolètes?

98

Cette question a été posée dans l'une de mes classes de collège. Le professeur ne donne la réponse qu'il était plus descriptif, mais il semble que <b>et <i>sont assez explicites dans leur sens et est plus facile à saisir que <strong>et <em>.

Quels étaient les arguments officiels en faveur de la dépréciation de ces balises?

LanceLafontaine
la source
38
Je suis assez sûr <b>et je ne suis <i>pas déconseillé.
Doval
4
J'ai tendance à raisonner comme ceci: est-ce que je veux qu'un lecteur d'écran lise ceci différemment ou pas? Si je veux juste choisir des mots faciles à trouver pour un lecteur (non aveugle), je pourrais peut-être utiliser b- cela signifie littéralement "c'est en gras", pas "c'est souligné". Mais l’essentiel, c’est que leur signification est différente: il n’ya pas de dépréciation, mais seulement quand vous faisiez bou que ivous vouliez dire strongou em.
Luaan
1
@MichaelT Je me souviens que lorsque j'ai commencé à utiliser LaTeX, je ne comprenais pas comment le texte pouvait être mis en italique et en gras lorsque l'on commençait avec un document vierge (sans paquet de style).
Cole Johnson
@Luaan: Même si <i>et <b>ne sont pas réellement obsolètes, <tt>et le <u>sont, et la question serait tout aussi applicable à ceux-là.
Supercat

Réponses:

135

L'été dernier, j'ai lu l'intégralité de la spécification HTML5, ainsi que toutes les précédentes spécifications HTML (même celles qui ont été abandonnées), ainsi que toutes les spécifications CSS que j'ai pu trouver, ainsi que de nombreuses spécifications XML. Comme j'aime les documents hypertextes riches sur le plan sémantique, permettez-moi de vous donner une idée de la sémantique HTML pertinente en HTML5.

Avant HTML5

Avant HTML5, iet bétaient effectivement démodés. La raison en était qu’ils fonctionnaient essentiellement comme emet strong, respectivement, mais en mettant l’accent sur la présentation et non sur la sémantique (ce qui est mauvais).

En effet, cela isignifiait que le texte devait être en italique (il expliquait comment le texte devait être restitué à l'écran). Par contre, cela emsignifiait que le texte devait être mis en valeur (il en disait quelque chose sur la sémantique du texte).

Il y a une différence théorique importante ici. Si vous utilisez em, l'agent utilisateur (= browser) sait que le texte doit être mis en évidence. Il peut donc être affiché en italique si le document est affiché à l'écran (ou en majuscule si le formatage n'est pas possible, ou peut-être même en gras. l'utilisateur préfère cela), il peut le prononcer différemment si le document est parlé à l'utilisateur, etc.

Notez que l'accent est vraiment mis sur la sémantique. Par exemple, les phrases

  • Le chat est à moi. (= pas le chien!)
  • Le chat est à moi . (= pas le vôtre!)

n'ont pas le même sens.

La même différence s'applique à b(police en gras) et à strong(accentuation forte).

Un principe général de l'écriture numérique en général, et de la création d'hypertextes en particulier, est qu'il est nécessaire de séparer le contenu et le style. Dans la création hypertexte, cela signifie que le contenu doit être dans le fichier HTML et que le style doit être dans un fichier CSS (ou dans un certain nombre de fichiers CSS). Un principe différent mais connexe est que le document doit être riche en sémantique (comme le balisage d’en-têtes, de pieds de page, de listes, d’accent, de adresses, de zones de navigation, etc.). Cela présente de nombreux avantages:

  • Il est beaucoup plus facile pour les programmes informatiques d’interpréter le document. Ces programmes incluent des navigateurs, des applications de synthèse vocale, des moteurs de recherche et des assistants numériques. (Par exemple, le navigateur peut vous permettre de sauvegarder une adresse dans votre carnet d'adresses si seulement il pouvait la trouver et l'interpréter. De plus, vous savez peut-être que Microsoft Word peut créer et mettre à jour automatiquement une table des matières pour vous si vous marquez correctement vos en-têtes. .)
  • Il est beaucoup plus facile de changer le style plus tard. (Si vous souhaitez modifier la couleur de tous les titres de troisième niveau de votre document de 860 pages, vous pouvez modifier une seule ligne dans la feuille de style. Si vous aviez mélangé le contenu et la présentation, vous auriez à parcourir le document entier manuellement. Et vous manqueriez probablement un titre ou deux, ce qui rendrait le document peu professionnel.)
  • Vous pouvez utiliser différentes feuilles de style en fonction des circonstances (le document est-il affiché à l'écran ou imprimé sur papier?). Vous pouvez même laisser l’utilisateur final choisir lui-même le style. (Mon site Web propose un certain nombre de feuilles de style alternatives. Dans IE et FF, vous les modifiez à l’aide du menu Affichage.)

Donc, en bref, iet bont été déconseillés parce qu’il s’agissait de balises HTML concernées par la présentation , ce qui est totalement faux.

En HTML5

En HTML5 iet bne sont plus obsolètes. Au lieu de cela, ils ont une signification sématique . Donc, ils concernent à présent la sémantique et non la présentation.

Comme auparavant, vous utilisiez empour souligner: "Le chat est à moi." Mais vous utilisez ipour presque tous les autres cas où vous utiliseriez l'italique dans un travail imprimé. Par exemple:

  • Vous ibalisiez les désignations taxonomiques: "J'aime R. norvegicus ."
  • Vous utilisez ipour marquer une phrase dans une langue différente de celle du texte environnant: À la carte
  • Vous utilisez ipour marquer un mot lorsque vous parlez du mot lui-même: " boire est à la fois un nom et un verbe"

C'est également une bonne idée d'utiliser l' classattribut pour spécifier l'utilisation précise (également "microformat" et "microdonnées" de Google). Et, bien sûr, dans le second cas, vous devriez vraiment utiliser l' langattribut pour spécifier la langue correcte. (Sinon, par exemple , un agent de synthèse vocale pourrait mal prononcer le texte.)

Il y a un an environ, la spécification HTML5 indiquait également qu'il citefallait utiliser pour baliser les noms de livres, films, opéras, peintures, etc.:

  • Que pensez-vous de Nymphomane ?

Enfin, depuis longtemps, dfnest utilisé pour marquer l'instance de définition d'une phrase dans un texte (comme une définition mathématique, ou la définition d'un terme):

  • Un groupe est un ensemble X équipé d'une seule opération binaire * telle que ...

Ainsi, l'italique de votre livre imprimé, qui peut signifier beaucoup de choses différentes, est représenté par quatre balises HTML5 différentes, ce qui est vraiment génial, car la sémantique est bonne, comme j'ai essayé de vous convaincre plus tôt. (Par exemple, vous pouvez demander à votre navigateur de dresser une liste de toutes les définitions dans le texte afin de vous assurer de les connaître toutes avant l’examen.)

En ce qui concerne strongand b, la spécification HTML5 indique que strongvous devez utiliser cette option pour baliser une partie importante du texte, comme un avertissement ou un mot très important dans une phrase. D'autre part, bdevrait être utilisé pour marquer les éléments qui doivent être faciles à trouver dans le texte, comme les mots-clés. J'utilise aussi bcomme en-tête dans les éléments de liste (LI).

Andreas Rejbrand
la source
1
Correction: la balise de définition est <dfn>, non <def>. Sinon, excellent résumé complet de toutes les questions. Votre suggestion d'utiliser des <b>en-têtes dans les éléments de liste est intéressante. l'approche sémantique consiste à utiliser une liste de définitions , mais comme aucun navigateur ne prend en charge actuellement display:run-in, le balisage de mots clés en ligne avec <b>ou <span>est ce que vous pouvez faire de mieux.
AmeliaBR
@ AmeliaBR. Merci d'avoir observé la faute de frappe (def). À propos des listes de définitions: les listes de définitions doivent être utilisées pour les paires nom-valeur et je les utilise toujours pour cela (consultez mon livre d'or , par exemple). J'ai aussi adoré display:run-in, mais comme son support diminue , vous devez utiliser le floatou l' content:astuce, voir rejbrand.se/rejbrand/news.asp?ItemIndex=169 . Lorsque je parle d'utiliser bdes balises d'en-tête dans des listes, je ne parle pas de paires nom-valeur, mais de simples listes dans lesquelles je veux utiliser un "en-tête" dans chaque élément.
Andreas Rejbrand
1
@SarahofGaia Il existe au moins deux défauts de raisonnement qui <b>garantissent un texte en caractères gras. 1) Les lecteurs d’écran, les afficheurs braille et autres moyens de consommation de texte pour lesquels des glyphes plus épais sont un concept dénué de sens. 2) b { font-weight: normal }, ce qui signifie que le style d'affichage n'est pas fixé pour l'un <b>ou l'autre.
8bittree
1
Enfin, vous êtes toujours libre de fournir votre propre CSS si vous ne faites pas confiance au navigateur: b, strong { font-weight:bold; }. De cette façon, vous pouvez être aussi sûr que possible. CSS est le moyen de spécifier le format visuel. HTML concerne la signification (contenu), CSS sur la présentation visuelle de celui-ci.
Andreas Rejbrand
1
Cette réponse m'a permis de comprendre pourquoi je dois changer mes balises de police en css. J'ai toujours aimé les balises de caractères gras et tout ça, maintenant je comprends pourquoi je ne devrais pas les utiliser. Merci
Andreas
58

Comme le dit Doval, ils ne sont pas obsolètes. Ils existent toujours, mais doivent être utilisés différemment de ceux utilisés avant HTML5.

Il s'agit de HTML sémantique. Il devrait décrire "ce que c'est", au lieu de quoi il devrait ressembler. Le navigateur ou théoriquement tout autre support d'affichage (par exemple une application de lecture pour les aveugles) devrait être en mesure de décider de la manière exacte d'interpréter.

Ceci est similaire à la raison pour laquelle vous ne devriez pas utiliser de noms de classe CSS comme "red" et utiliser des classes plus descriptives décrivant l'idée fonctionnelle derrière l'utilisation d'une couleur différente ici. Vous pouvez décider plus tard que le vert est meilleur (et peut-être que tout ce qui est "fort" devrait être montré en utilisant une couleur rouge au lieu d'un texte en gras). Ou bien un utilisateur daltonien peut avoir certains paramètres de navigateur spéciaux dans lesquels les couleurs sont remplacées par d'autres moyens.

Thorsten Müller
la source
1
Existe-t-il des situations dans lesquelles il est préférable d'utiliser <b> plutôt que <strong>? Ou <strong> est-il toujours une balise "plus sémantique"?
LanceLafontaine
4
En gros, vous pouvez utiliser <b> pour les éléments qui doivent être "surlignés" mais non "soulignés", comme les mots clés dans un texte. Dans la documentation technique, vous trouvez souvent différents styles de texte utilisés pour afficher certains attributs, comme dans les exemples de code de livres de programmation ou les termes techniques. Pour de tels cas d'utilisation, un terme technique <b> ou <i> pourrait être utilisé.
Thorsten Müller
3
@LanceLafontaine Jetez un coup d'œil au standard officiel .
Rufflewind
4
@ thorstenmüller Je pense que c'est aussi un mauvais exemple ... c'est le cas classique où la direction décide plus tard qu'au lieu de gras, ils veulent leurs attributs avec la police d'écriture dactylographique et non en gras mais soulignée, auquel cas, <span class="keyword">...</span>vous économisez en premier lieu. beaucoup de problèmes.
CompuChip
2
@LanceLafontaine <b>est un cas extrême , mais il existe des exemples concrets à utiliser <i>dans les cas <em>inappropriés: noms scientifiques d'espèce ou mots latins adoptés en anglais (vous pouvez utiliser une étendue avec un attribut language, mais cela a toutes sortes d'autres implications - - un lecteur d’écran peut changer de voix pour une langue différente). Il peut également être utilisé pour mettre en italique les titres d’autres œuvres, bien que l’on utilise l’approche sémantiquement correcte <cite>.
AmeliaBR
41

La vraie histoire est que bet iont d' abord été rendu obsolète, dépréciée, maudit, et anatematized comme « présentation » dans divers projets de HTML5 ( au sens large de langue), mais ils ont réalisé que ces balises sont largement utilisés et ont également généré par de nombreux programmes de création. Au lieu de les autoriser simplement, ils ont développé de nouvelles définitions «sémantiques» artificielles pour pouvoir autoriser les éléments, tout en prétendant être stricts à propos du balisage «de présentation». Les nouvelles définitions varient d'un brouillon à l'autre et sont obscures: il est difficile de trouver deux personnes qui les comprennent et les interprètent de la même manière.

Désolé, pas de références. La description ci-dessus résulte du suivi des modifications et de la lecture des brouillons et des discussions, souvent entre les lignes. Ils ne disent pas explicitement la cause. Je pense toujours que c'est l'histoire vraie.

La conclusion est la suivante: avancez. Il n'y a rien d'utile ici. Les éléments bet ifont la même chose que toujours: ils font la police en gras ou en italique, avec les mises en garde habituelles. Vous devez tenir compte de cette réalité, pas de la «sémantique» quasi-islamique qui n’a pas d’impact sur les navigateurs, les moteurs de recherche ou d’autres logiciels.

Jukka K. Korpela
la source
3
Cela dit, vous pouvez suivre la sémantique quasischolastique en le traitant simplement <b>comme un drôle de rendu <span>qui apparaît par défaut en gras. Ensuite, si vous pouvez être dérangé, attribuez également à votre utilisation un classattribut afin que vous puissiez, si nécessaire, reformuler plusieurs éléments à la fois, car ils ont une sémantique commune. C'est quasischolastic en ce sens que les gens penseront que vous êtes presque capable de le faire b.productname {font-weight: normal; font-style: italic; }après avoir changé d'avis sur la présentation et tiré parti de votre choix judicieux de balisage sémantique ;-)
Steve Jessop
1
@SteveJessop: Pour ceux d'entre nous dans le monde qui se soucient encore de la taille du fichier, dire <b>this</b>semble bien plus raisonnable que de <span class="bold">this</b>le penser (la surcharge de huit octets de la première est assez fastidieuse; la surcharge de 23 octets de la seconde semble folle). Je me demande pourquoi HTML n'a jamais défini de représentation abrégée <@quack>this</@>équivalente à <span class="quack">this</span>?
Supercat
4
@supercat: c'est à cela que sert l'encodage de transfert: gzip. Ou peut-être XML + XSLT, selon où et comment vous voulez introduire une notation plus concise pour "charlatan".
Steve Jessop
7
@supercat class='bold'? Maître Suku de The Codeless Code vous expliquera comment utiliser des noms de classe aussi médiocres . Considérez ceci comme votre dernier boldRedText .
2
À l’époque des modems 14.4, CSS était une idée qui n’était pas encore réalisée ni implémentée dans aucun agent utilisateur. Ces éléments HTML sont simplement d'ancien héritage cruel avec lequel nous resterons pour toujours.
Michael Hampton
11

Les balises <b>et ont pour <i>origine les concepts de "gras" et "italique". Le problème est que ceux-ci peuvent être totalement dépourvus de sens pour certains agents utilisateurs. Par exemple, à quoi ressemble "italique" dans un lecteur d'écran pour un aveugle?

Les remplacer par <strong>et <em>supprimer le lien direct vers les concepts typographiques. Au lieu de cela, l'agent utilisateur peut les rendre comme bon lui semble.

Simon B
la source
2
À proprement parler, l'agent utilisateur peut effectuer le rendu <b>et <i>comme bon lui semble.
Jonathan Eunice
8

Les balises <b>and <i>sont essentielles lorsque vous avez littéralement besoin de texte en "gras" ou en "italique".

Si vous écrivez une équation en HTML où un « je » en italique a un sens différent d'un «je» non en italique, il est important de pouvoir faire cette distinction.

Je pense à eux de la même façon que je pense <sup>ou <sub>balises - vous ne pouvez pas représenter correctement le sens d'une équation sans utiliser ces balises « apparence ».

L’approche la plus pure serait d’utiliser MathML ou TeX, mais la prise en charge du navigateur n’existe pas encore ...

SAL
la source
14
J'aimerais que les gens qui militent pour un balisage "sémantique" sachent que, dans certains cas, les anciennes balises étaient sémantiquement plus correctes que toutes les alternatives. Si le texte d'un document fait référence à certains mots soulignés, il serait sémantiquement incorrect de les afficher autrement que de les souligner. Si vous importez du texte à partir d'un système qui en met une partie, in a monospaced typefacemais ne fait pas de distinction entre les raisons, utiliser l'un des "remplacements" <tt>impliquerait faussement que le code qui importait en savait plus sur le but recherché.
Supercat
Je suis d’accord avec l’adéquation de bet idans des contextes mathématiques (et physiques), mais une telle utilisation n’est pas mentionnée dans les brouillons HTML5. Lorsque j'ai soulevé cette question, il a été sérieusement répondu que les caractères spéciaux Unicode (lettres mathématiques en gras et lettres italiques mathématiques) soient utilisés à la place!
Jukka K. Korpela
1
@supercat: la prétention générale (ce qui, je l'avoue, n'est pas toujours applicable) est qu'il ne faut pas écrire de chèques que l'agent utilisateur ne peut pas encaisser. En particulier, vous ne devriez pas écrire une page prétendant que le lecteur d'écran de quelqu'un parlera dans une police à espacement fixe (j'imagine qu'une voix robotique serait appropriée: je n'ai jamais réellement utilisé un lecteur d'écran). Bien sûr, cela ne tient pas compte du fait que les pages de la plupart des gens ne fonctionnent pas du tout sur les lecteurs d'écran, et il est donc inutile de payer quoi que ce soit pour une accessibilité hypothétique dont ils se fichent. Mais le W3C néglige délibérément ce fait par principe.
Steve Jessop
Dans le cas de l'importation de code, je suppose que la réponse canonique (si non satisfaisante) est class="source-X-asserts-it-should-be-monospace", le distinguant ainsi du texte sémantiquement différent en ce sens qu'une autre source affirme pour des raisons inconnues qu'elle devrait être monospace. En réalité, il s'agit d'auditer les éléments que HTML considère comme mauvais, au lieu de simplement les traduire en HTML.
Steve Jessop
1
@SteveJessop: En d'autres termes, nous devrions améliorer <TT>ce qui a directement suggéré que le texte soit placé dans une police monospace contrastée, avec un balisage qui, après quelques couches d'indirection, indiquera que le texte doit être affiché dans une police particulière qui arrive à soyez monospace. Bien que je ne m'attende pas à ce que tous les lecteurs d'écran fassent quelque chose d'utile <tt>, je m'attendrais à ce qu'ils aient beaucoup plus de facilité <tt>qu'avec <span class="styleNameThisImportUtilityPicked">.
Supercat
0

Les principes de conception qui sous-tendent les balises HTML sont qu’elles doivent être «sémantiques», c’est-à-dire qu’elles doivent indiquer le sens et l’intention plutôt que des instructions de bas niveau.

Le test classique est "les tags peuvent-ils être utilisés utilement dans un navigateur pour les aveugles".

Donc, pour un navigateur basé sur l’audio, le «i» pour l’italique est plutôt inutile, car vous ne pouvez pas parler en italique. Toutefois, la balise "em" a un sens, car un périphérique audio peut souligner une phrase de plusieurs façons: en augmentant la hauteur, en augmentant le volume ou en modifiant l’accent. Un rendu en braille pourrait mettre l’accent sur les points en modifiant l’espacement, la taille ou les vibrations.

James Anderson
la source
Comme vous le dites, vous ne pouvez pas parler en italique - mais vous pouvez avoir un texte en italique dans lequel le fait que ce soit en italique a un sens sémantique, par exemple, les équations ...
SAL le
2
"Donc, pour un navigateur basé sur l'audio, le" i "pour l'italique est plutôt inutile car vous ne pouvez pas parler en italique." ... Oui, et il en va de même <img>parce que vous ne pouvez pas parler d'image et qu'un système sans matériel audio ne peut pas se présenter <audio>. Parfois, la présentation est le but même d'un élément, et il n'a pas besoin d'être universellement prise en charge (et contrairement à d'autres éléments potentiellement non pris en charge, <i>ne nécessite pas de texte alternatif car le fait qu'il soit en italique est la seule information perdue). Le vrai problème, c'est quand les gens disent iquand ils veulent dire em .
nmclean
@SAL: Pourquoi ne peut-on pas avoir un "discours en italique"? Si la parole normale est prononcée avec une valeur de "hauteur" de 100, avoir du texte dans une <i>étiquette utilise une hauteur de 120 et le texte dans une <b>étiquette utilise 80, et avoir du texte dans une <tt>synchronisation de la parole avec une machine à écrire synthétisée produisant le texte permettrait à l'auditeur distinguer facilement ces formes de balisage. Le travail serait beaucoup plus difficile si, au lieu d'utiliser une <i>balise, le texte utilisait plutôt une méthode <span class="whatever">qui faisait apparaître certaines parties du texte en utilisant "Acme SemiScript" plutôt que "Waldorf Sans" [certaines familles de polices ...
supercat
... n'a pas une bonne police en italique, mais parfois une police en italique uniquement peut sembler bonne lorsqu'elle est définie dans du texte écrit avec une autre famille de polices].
Supercat
@supercat Vous décrivez un discours accentué, pas un discours en italique. Si vous voulez un ton différent, vous devriez utiliser em, comme dit nmclean. Si vous le souhaitez en italique, utilisez i. Peu importe qu'un lecteur d'écran ne sache pas quoi faire, car il n'a rien à faire. Les titres de livres sont souvent en italique, mais vous ne les prononcez pas différemment.
DCShannon