Почему браузер отображает новую строку как пробел?
в течение самого долгого времени я хотел понять, почему браузер добавляет пустое пространство между визуализированными элементами HTML, когда между ними есть новая строка, например:
<span>Hello</span><span>World</span>
html выше выведет строку "HelloWorld"без пробел между "Hello" и "World", однако в следующем примере:
<span>Hello</span>
<span>World</span>
html выше выведет строку "Hello World"С пробел между "привет" и "Мир."
теперь у меня нет проблем с принятием того, что это просто так работает период, но то, что меня немного беспокоит, заключается в том, что у меня всегда было впечатление, что пробелы (или новые строки) между элементами html не будут иметь значения в то время, когда браузер отобразил html пользователю.
спасибо.
5 ответов:
браузеры конденсируют несколько пробелов (включая новые строки) в один пробел при рендеринге. Единственное исключение-внутри
<pre>
элементы или те, которые имеют свойства CSSwhite-space
значениеpre
илиpre-wrap
set. (Или в XHTML,.)
пробелы между элементами блока игнорируются. Однако пробелы между встроенными элементами преобразуются в одно пространство. Аргументация заключается в том, что встроенные элементы могут быть перемежены с обычным внутренним текстом родительского элемента.
рассмотрим следующий пример:
<p>This is my colored <span class="red_text">Hello</span> <span class="blue_text">World</span> example</p>
в идеальном случае, вы хотите, чтобы пользователь, чтобы увидеть
This is my colored Hello World example
удаление пробелов между двумя пролетами, однако, приведет к:
This is my colored HelloWorld example
но это тот же пример может быть переписан автором (с ОКР о форматировании HTML: -)) как:
<p> This is my colored <span class="red_text">Hello</span> <span class="blue_text">World</span> example </p>
было бы лучше, если бы это было сделано в соответствии с предыдущим примером.
Если бы у вас был символ 'a' между двумя тегами, вы ожидали бы, что он будет отображаться. В этом случае у вас есть символ '\n' между двумя тегами; поведение аналогично и согласовано ('\n' отображается как один пробел).
браузеры ошибаются здесь:
http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.1
SGML (см. [ISO8879], раздел 7.6.1) указывает, что разрыв строки сразу после начального тега должен игнорироваться, как и разрыв строки непосредственно перед конечным тегом. Это относится ко всем элементам HTML без исключения.