Pourquoi HTML exige-t-il que plusieurs espaces apparaissent comme un seul espace dans le navigateur?

J’ai reconnu depuis longtemps que tout ensemble d’espaces dans un fichier HTML ne sera affiché que sous la forme d’un espace unique. Par exemple, ceci:

Hello. Hello. Hello. Hello. Hello.

affiche comme:

Bonjour. Bonjour. Bonjour. Bonjour. Bonjour.

C’est parfaitement bien, car si vous avez besoin de plusieurs espaces de texte pré-formaté, vous pouvez simplement utiliser la balise

.  Mais quelle est la raison?  Plus précisément, pourquoi est-ce dans la spécification pour HTML? 

Les espaces sont compactés en HTML car il existe une distinction entre le format HTML et le rendu. Considérez une page comme celle-ci:

   A link   

Si le HTML était en retrait par exemple avec des espaces, le lien serait précédé de plusieurs espaces.

Pour essayer de résoudre le “pourquoi”, c’est peut-être parce que HTML était basé sur SGML qui l’avait spécifié de cette manière. Il était à son tour basé sur GML du début des années 60. La raison de la gestion des espaces blancs pourrait très bien être due au fait que les données ont été saisies dans une «carte» à la fois, ce qui pourrait entraîner une rupture indésirable des phrases et des paragraphes. Une différence dans l’ancien langage GML est qu’il spécifie qu’il doit y avoir deux espaces entre les phrases (comme les anciennes règles de machine à écrire), ce qui peut avoir créé un précédent selon lequel les espaces sont indépendants du balisage.

Ce n’est pas seulement dans la spécification , mais il y a un sens à cela. Si les espaces n’étaient pas compactés, vous devriez mettre tous vos fichiers HTML sur une seule ligne. alors quelque chose comme ça:

 

Title

This is some text Read More

Aurait un alignement étrange avec des espaces partout. La seule façon d’y parvenir serait de compacter ce code, ce qui serait difficile à maintenir.

“Pourquoi plusieurs espaces sont-ils convertis en espaces simples?”

Premièrement, les questions “pourquoi” sont difficiles à répondre. C’est dans les spécifications. C’est à peu près tout.

Considérez qu’il existe plusieurs types d’espaces blancs.

  • Espace blanc entre les balises.

    \nhi\n

  • Espace blanc dans le contenu d’une balise.

    Hi everyone.

  • Espace blanc dans une section

    
    

    ou CDATA.

Les deux premiers sont difficiles à distinguer. Les espaces entre les balises, même en XML, sont "facultatifs". Mais lorsque vous avez ce qu'on appelle un "modèle de contenu mixte" - des balises mélangées avec du contenu - la subtilité de "entre les balises" et "dans le contenu mais entre les balises" et "dans le contenu mais pas entre les balises" est impossible. démêler.

Donc, ils ne le font pas. Les espaces entre les balises et les espaces dans le contenu sont tous facultatifs.

Comme d’autres l’ont dit, c’est dans la spécification HTML.

Si vous souhaitez conserver les espaces en sortie, vous pouvez utiliser la balise

 : 

 
This text has extra spaces and newlines

Mais cela affichera aussi généralement le texte dans une police différente.

Si les navigateurs ne le faisaient pas, il pourrait être difficile de formater votre code HTML pour le rendre facilement lisible. Par exemple, vous pourriez vouloir formater votre code comme ceci:

   
I like to indent all content that is inside div tags.

Si le navigateur n’ignore pas les quelque huit espaces avant le texte à l’intérieur de la balise div, votre page Web risque de ne pas ressembler à ce que vous souhaitiez.

Généralement, ces décisions de conception ne sont documentées dans aucune spécification et ne peuvent être extraites que des archives de discussion de groupe de travail qui sont accessibles au public ou expliquées par les auteurs de la spécification eux-mêmes. Cependant, dans ce cas particulier, HTML 3.2 indique ce qui suit:

Sauf dans le texte littéral (par exemple, l’élément PRE ), HTML traite les séquences contiguës de caractères d’espace blanc comme étant équivalentes à un seul caractère d’espace (décimal ASCII 32). Ces règles permettent aux auteurs une grande souplesse lors de l’édition directe du texte marqué. Notez que les futures révisions de HTML peuvent permettre l’interprétation du caractère de tabulation horizontale (ASCII décimal 9) par rapport à une règle de tabulation définie par une feuille de style associée.

Le comportement que vous voyez aujourd’hui est bien sûr beaucoup plus compliqué que ce qui était spécifié dans HTML 3.2, mais je pense que le raisonnement est toujours valable. Un exemple où cette flexibilité peut être utile est lorsque vous avez un long paragraphe que vous voulez envelopper et indenter:

 

Lorem ipsum

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fastidii oportere consulatu no quo. Vix saepe labores an, pri illud mentitum et, ex suas quas duo. Sit utinam volutpat ea, id vis cibo meis dolorum, eam docendi accommodare voluptatibus no. Id quaeque electram vim, ut sed singulis neglegentur, ne graece alterum has. Simul partiendo quaerendum et his.

Si les espaces ne sont pas réduits, vous obtiendrez un paragraphe avec des espaces inhabituellement grands, où le texte est encapsulé à cause de l’indentation.

Aucune autre spécification HTML ne suggère un quelconque raisonnement derrière cette décision de conception. En particulier, HTML 4 ne décrit que le comportement d’effondrement, et HTML5 et les spécifications vivantes sont toutes deux soumises à CSS, ce qui n’explique pas non plus . Les versions antérieures de HTML ne contiennent pas non plus d’explication, bien que l’extrait suivant apparaisse dans un exemple d’extrait dans HTML 2.0 :

 
    ...
      ...
    • Whitespace may be used to assist in reading the HTML source.
    ...

C’est dans la spécification HTML. C’est la partie des espaces inter-mots qui sont rendus sous forme d’espace ASCII.

http://www.w3.org/TR/html401/struct/text.html

Simple, c’est dans la spécification.

A partir de la spécification HTML, section 9.1 :

En particulier, les agents utilisateurs doivent réduire les séquences d’espaces en blanc lors de la production d’espaces inter-mots.

Pour répondre à cela, pourquoi est-ce dans la spécification pour HTML? vous devez considérer les origines du HTML.

Tim Berners-Lee a conçu le HTML pour le partage de documents scientifiques. Il l’a basé sur des idées de syntaxe préexistantes dans SGML, qui comporte également des traitements similaires des espaces.

On peut imaginer que les auteurs précédents de HTML au CERN l’ont fait sans l’aide des outils WYSIWYG, de sorte que la possibilité de traiter les espaces de cette manière facilite la lisibilité de ces fichiers source écrits à la main.

Il y a aussi une réponse typographique: les mots et les phrases doivent avoir un seul espace entre eux, indépendamment de ce que votre professeur de dactylographie vous a dit.

Utiliser un espace entre les phrases

Utiliser un seul espace de mots entre les phrases

Les définitions / spécifications de HTML indiquaient clairement qu’il fallait ignorer les espaces blancs en excès.

Si vous souhaitez inclure des espaces supplémentaires, utilisez la


ou