Pourquoi le navigateur affiche-t-il une nouvelle ligne en tant qu’espace?

Pendant longtemps, j’ai voulu comprendre pourquoi le navigateur ajoute un espace vide entre les éléments HTML rendus lorsqu’il y a un NewLine entre eux, par exemple:

HelloWorld 

Le html ci-dessus affichera la chaîne «HelloWorld» sans espace entre «Hello» et «World», mais dans l’exemple suivant:

 Hello World 

Le html ci-dessus affichera une chaîne “Hello World” avec un espace entre “Hello” et “World”.

Maintenant, je n’ai aucun problème à accepter que c’est juste la façon dont cela fonctionne, mais ce qui me dérange un peu, c’est que j’ai toujours eu l’impression que les espaces (ou les nouvelles lignes) entre les éléments html le navigateur a rendu le HTML à l’utilisateur.

Donc, ma question est de savoir si quelqu’un sait quelle est la raison philosophique ou technique de ce comportement.

Je vous remercie.

Les navigateurs condensent plusieurs caractères d’espacement (y compris les nouvelles lignes) dans un seul espace lors du rendu. La seule exception concerne


éléments


ou ceux dont l' white-space propriété CSS est défini sur pre ou pre-wrap set. (Ou en XHTML, l'atsortingbut xml:space="preserve" .)

Les espaces entre les éléments de bloc sont ignorés. Cependant, les espaces blancs entre les éléments en ligne sont transformés en un seul espace. Le raisonnement est que les éléments en ligne peuvent être entrecoupés de texte interne régulier de l’élément parent.

Prenons l’exemple suivant:

 

This is my colored Hello World example

Dans le cas idéal, vous voulez que l’utilisateur voie

 This is my colored Hello World example 

La suppression des espaces entre les deux scopes entraînerait cependant:

 This is my colored HelloWorld example 

Mais ce même échantillon peut être réécrit par un auteur (avec OCD à propos du format HTML :-)) en tant que:

 

This is my colored Hello World example

Il serait préférable que cela soit rendu cohérent avec l’exemple précédent.

HTML est spécifié pour le faire comme ça:

Les sauts de ligne sont également des espaces blancs

http://www.w3.org/TR/REC-html40/struct/text.html#h-9.1

Si vous aviez le caractère ‘a’ entre deux balises, vous vous attendriez à ce qu’il soit rendu. Dans ce cas, vous avez un caractère ‘\ n’ entre deux balises; le comportement est analogue et cohérent (‘\ n’ est rendu comme un seul espace).

Les navigateurs font une erreur ici:

http://www.w3.org/TR/html4/appendix/notes.html#hB.3.1

SGML (voir [ISO8879], section 7.6.1) spécifie qu’un saut de ligne immédiatement après une balise de début doit être ignoré, de même qu’un saut de ligne immédiatement avant une balise de fin. Cela s’applique à tous les éléments HTML sans exception.