Пробелы HTML: пробелы до и после <br>
Я пытаюсь лучше понять модель обработки пробелов HTML. Сейчас я сравниваю два фрагмента HTML:
<div>a <br>z</div>
и
<div>a<br> z</div>
Первый сниппет, когда он выставляется, дает две строки: "a "
и "z"
(Таким образом, первая строка имеет конечное пространство.)
Второй фрагмент дает две строки: "a"
и "z"
. На второй строке нет ведущего места.
Мой вопрос: почему? В настоящее время я использую этот http://www.w3.org/TR/CSS2/text.html#white-space-model в качестве ссылки. В нем указано
- Если пробел (U + 0020) в начале строки имеет "белое пространство", установленное в "normal", "nowrap" или "pre-line", оно удаляется.
- Все вкладки (U + 0009) отображаются как горизонтальный сдвиг, который выравнивает начальный край следующего глифа со следующей остановкой табуляции. Остановки табуляции встречаются в точках, кратных 8-кратной ширине пробела (U + 0020), отображаемой в блочном шрифте из края исходного кадра.
- Если пространство (U + 0020) в конце строки имеет "белое пространство", установленное в "normal", "nowrap" или "pre-line", оно также удаляется.
- Если пробелы (U + 0020) или вкладки (U + 0009) в конце строки имеют "белое пространство", установленное в "pre-wrap", UA могут визуально свернуть их.
Наивное чтение этого будет означать, что, поскольку пространство, в котором должно быть удалено начало или конец строки (когда "белое пространство" является "нормальным" ), первый из моих отрывков не должен приводить к отсутствию конечное пространство. Но это не так.
Итак, что происходит?
Моя нынешняя теория заключается в том, что <br>
тайно считается "персонажем", который в первом фрагменте предотвращает "конечное" конечное пространство своей строки. Но я действительно не знаю.
EDIT: чтобы быть ясным, я знаю, как использовать
для создания пробелов по желанию. Мой вопрос в том, какое правило (в отношении какой-то спецификации) вызывает вышеуказанное поведение.
Ответы
Ответ 1
Хороший вопрос! Я подтвердил поведение как в Chrome, так и в Firefox, и подтвердил, что он не имеет ничего общего с <br>
, поскольку он также вызван обычным прерыванием строки в white-space: pre-line
условиях:
<div style="white-space:pre-line">a
z</div>
Я отправил электронное письмо в список, прося разъяснить эту проблему и запросив, нужно ли менять спецификацию для соответствия реализациям, или файлы ошибок в браузерах, чтобы соответствовать спецификации.