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?
html
deprecation
LanceLafontaine
la source
la source
<b>
et je ne suis<i>
pas déconseillé.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 faisiezb
ou quei
vous vouliez direstrong
ouem
.<i>
et<b>
ne sont pas réellement obsolètes,<tt>
et le<u>
sont, et la question serait tout aussi applicable à ceux-là.Réponses:
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,
i
etb
étaient effectivement démodés. La raison en était qu’ils fonctionnaient essentiellement commeem
etstrong
, respectivement, mais en mettant l’accent sur la présentation et non sur la sémantique (ce qui est mauvais).En effet, cela
i
signifiait que le texte devait être en italique (il expliquait comment le texte devait être restitué à l'écran). Par contre, celaem
signifiait 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
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:
Donc, en bref,
i
etb
ont é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
i
etb
ne 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
em
pour souligner: "Le chat est à moi." Mais vous utilisezi
pour presque tous les autres cas où vous utiliseriez l'italique dans un travail imprimé. Par exemple:i
balisiez les désignations taxonomiques: "J'aime R. norvegicus ."i
pour marquer une phrase dans une langue différente de celle du texte environnant: À la cartei
pour 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'
class
attribut 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'lang
attribut 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
cite
fallait utiliser pour baliser les noms de livres, films, opéras, peintures, etc.:Enfin, depuis longtemps,
dfn
est 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):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
strong
andb
, la spécification HTML5 indique questrong
vous 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,b
devrait être utilisé pour marquer les éléments qui doivent être faciles à trouver dans le texte, comme les mots-clés. J'utilise aussib
comme en-tête dans les éléments de liste (LI).la source
<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 actuellementdisplay:run-in
, le balisage de mots clés en ligne avec<b>
ou<span>
est ce que vous pouvez faire de mieux.display:run-in
, mais comme son support diminue , vous devez utiliser lefloat
ou l'content:
astuce, voir rejbrand.se/rejbrand/news.asp?ItemIndex=169 . Lorsque je parle d'utiliserb
des 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.<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.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.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.
la source
<span class="keyword">...</span>
vous économisez en premier lieu. beaucoup de problèmes.<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>
.La vraie histoire est que
b
eti
ont 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
b
eti
font 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.la source
<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 unclass
attribut 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 faireb.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 ;-)<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>
?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 .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.la source
<b>
et<i>
comme bon lui semble.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 ...
la source
in a monospaced typeface
mais 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é.b
eti
dans 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!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.<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">
.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.
la source
<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 disenti
quand ils veulent direem
.<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 ...