Pourquoi en effet ? Est-ce que quelque chose comme &br;
serait plus approprié ?
Réponses
Trop de publicités?Une référence d'entité HTML est, selon la version HTML, soit une entité SGML, soit une entité XML (HTML hérite des entités de la technologie sous-jacente). Les entités sont un moyen d'insérer dans le document des morceaux de contenu définis ailleurs.
Toutes les entités HTML sont des entités à un seul caractère, et sont donc fondamentalement les mêmes que les références de caractères (techniquement, elles sont différentes des références de caractères, mais comme il n'y a pas d'entités à plusieurs caractères définies, la distinction n'a pas d'impact sur HTML).
Lorsqu'un processeur HTML voit, par exemple —
il le remplace par le contenu de cette référence d'entité avec l'entité appropriée, en fonction de la section de la DTD qui dit :
<!ENTITY mdash CDATA "—" -- em dash, U+2014 ISOpub -->
Il remplace donc la référence de l'entité par l'entité —
qui est à son tour une référence de caractère qui est remplacée par le caractère —
(U+2014). En réalité, à moins que vous ne fassiez cela avec un processeur XML ou SGML polyvalent qui ne comprend pas directement le HTML, cela se fera en une seule étape.
Maintenant, par quoi remplacerions-nous votre hypothétique &br ; pour provoquer un saut de ligne ? Nous ne pouvons pas le faire avec un caractère de nouvelle ligne, ni même avec le moins connu U+2028 LINE SEPARATOR (qui, sémantiquement, en texte clair, a la même signification que <br/>
en HTML), parce qu'il s'agit de caractères d'espacement qui ne sont pas significatifs dans la plupart du code HTML, ce dont vous devriez être reconnaissant car l'écriture du HTML serait beaucoup plus difficile si nous ne pouvions pas formater pour la lisibilité dans le code source.
Ce dont nous avons besoin, ce n'est pas d'une entité, mais d'un moyen d'indiquer sémantiquement que l'entité rendu contient un saut de ligne à cet endroit. Nous devons également ne rien indiquer d'autre (nous pouvons déjà indiquer un saut de ligne en commençant ou en terminant un élément de bloc, mais ce n'est pas ce que nous voulons). La seule façon raisonnable de le faire est d'avoir un élément qui signifie exactement cela, et nous avons donc l'élément <br/>
et la balise correspondante est placée dans le code source.
Une balise et une référence d'entité de caractère existent pour des raisons différentes - les entités de caractère sont des substituts de certains caractères (parfois requis comme séquences d'échappement - par exemple &
pour une esperluette &
), les balises sont là pour la structure.
La raison pour laquelle le <br>
existe est que le HTML réduit les espaces blancs. Il doit y avoir un moyen de spécifier un saut de ligne dur - un endroit que a pour avoir un saut de ligne. C'est la fonction de la fonction <br>
étiquette.
Il n'y a pas de caractère unique qui ait cette signification, bien que U+2028 LINE SEPARATOR
a une signification similaire, et même s'il devait être utilisé, il ne serait d'aucune utilité car il est considéré comme un espace blanc et le HTML le réduirait.
Voir les réponses de @John Kugelman y @John Hanna pour plus de détails sur cet aspect.
Il y a une autre raison, non entièrement liée, qui explique pourquoi une &br;
n'existe pas : un saut de ligne est défini de telle manière qu'il pourrait avoir plus d'un caractère, voir la référence à l'entité de caractère Spécification HTML 4 :
Un saut de ligne est défini comme étant un retour de chariot (

), un saut de ligne (

), ou une paire retour chariot/saut de ligne.
Les entités de caractères sont des échappatoires à caractère unique, et ne peuvent donc pas représenter ceci, encore une fois dans le cadre de l'option Spécification HTML 4 :
Une référence d'entité de caractère est une construction SGML qui fait référence à un caractère du jeu de caractères du document.
Vous verrez que toutes les entités de caractères définies correspondent à une entité de type simple personnage. Un saut de ligne ou une nouvelle ligne ne peuvent pas être représentés proprement de cette manière, et une entité est donc nécessaire au lieu d'une référence à une entité de caractère.
C'est pourquoi un saut de ligne ne peut pas être représenté par une référence d'entité de caractère.
Quoi qu'il en soit, ce n'est pas nécessaire car il suffit d'utiliser la fonction Enter insère un saut de ligne.
Les entités sont des substituts d'autres personnages ou de morceaux de texte. En HTML, elles sont utilisées pour représenter des caractères difficiles à taper (par exemple, le mot "entité"). —
pour "-") ou pour les caractères qui doivent être échappés ( &
pour "&"). Qu'est-ce qu'un hypothétique &br;
représente-t-elle ?
Ça ne peut pas être \r
o \n
o \r\n
car ils sont déjà assez faciles à taper (il suffit d'appuyer sur la touche Entrée). Le problème que vous essayez de contourner est le suivant Le HTML réduit les espaces blancs dans la plupart des contextes et traite les nouvelles lignes comme des espaces. C'est-à-dire, \n
n'est pas un caractère de saut de ligne, c'est juste un espace blanc comme les tabulations et les espaces.
Une entité &br;
devrait être remplacé par un autre texte. Quel caractère utilisez-vous pour représenter le concept de "saut de ligne dur" ? Le caractère standard de retour à la ligne \n
est exactement le bon caractère, mais malheureusement il n'est pas adapté puisqu'il est jeté dans le seau générique "espace blanc". Il faudrait soit surcharger un autre caractère de contrôle pour représenter le "saut de ligne", soit utiliser un caractère Unicode étendu. Lorsque le HTML a été conçu, Unicode n'était qu'une norme naissante, encore en développement, et ce n'était donc pas une option.
A <br>
était le moyen le plus simple et le plus direct d'ajouter le concept de "retour à la ligne" à un document, car aucun caractère ne pouvait représenter ce concept.
En HTML, tous les les coupures de ligne sont traités comme des espaces blancs :
Un saut de ligne est défini comme étant un retour chariot (

), un saut de ligne (

), ou une paire retour chariot/saut de ligne. Tous les sauts de ligne constituent des espaces blancs.
Et espace blanc ne fait que séparer les mots et les séquences d'espace blanc est effondré :
Pour tous les éléments HTML sauf
PRE
, des séquences d'espaces blancs séparent les "mots" (nous utilisons ici le terme "mot" pour signifier "séquences de caractères non blancs"). [ ][ ]
Notez qu'une séquence d'espaces blancs entre les mots dans le document source peut donner lieu à un rendu totalement différent de l'espacement entre les mots (sauf dans le cas de l'espacement entre les mots).
PRE
élément). En particulier, les agents utilisateurs doivent réduire les séquences d'espace blanc en entrée lors de la production d'espace inter-mots en sortie. [ ]
Cela signifie que les sauts de ligne ne peuvent pas être exprimés par des caractères ordinaires. Et bien qu'il existe certains caractères spéciaux dans Unicode pour séparer sans ambiguïté les lignes et les paragraphes, ils ne sont pas spécifiés pour le faire également en HTML :
Notez que, bien que


y

sont définis dans [ISO10646] pour séparer sans ambiguïté les lignes et les paragraphes, respectivement, ils ne constituent pas des sauts de ligne en HTML [ ].
Cela signifie qu'il n'existe aucun caractère ordinaire ou séquence de caractères ordinaires pour marquer un saut de ligne en HTML. Et c'est pourquoi il y a le BR
élément .
Maintenant, si vous voulez utiliser &br;
au lieu de <br>
il suffit de déclarer l'entité br pour représenter la valeur <br>
:
<!ENTITY br "<br>">
Avoir cette entité supplémentaire nommée br déclaré, un processeur XML ou SGML polyvalent remplacera chaque occurrence de la référence à l'entité &br;
avec la valeur qu'il représente ( <br>
). Un exemple de document :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd" [
<!ENTITY br "<br>">
]>
<HTML>
<HEAD>
<TITLE>My first HTML document</TITLE>
</HEAD>
<BODY>
<P>Hello &br;world!
</BODY>
</HTML>
Les entités sont le contenu, les balises sont la structure ou la mise en page (en gros). Il semble que celui qui a fait le <br>
une balise a décidé que la rupture d'une ligne a plus à voir avec la structure et la mise en page qu'avec le contenu. Le fait de ne pas pouvoir "voir" une <br>
Je suis plutôt d'accord. Oh et j'invente au fur et à mesure donc n'hésitez pas à ne pas être d'accord ;)