Пробелы 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: чтобы быть ясным, я знаю, как использовать &nbsp; для создания пробелов по желанию. Мой вопрос в том, какое правило (в отношении какой-то спецификации) вызывает вышеуказанное поведение.

Ответы

Ответ 1

Хороший вопрос! Я подтвердил поведение как в Chrome, так и в Firefox, и подтвердил, что он не имеет ничего общего с <br>, поскольку он также вызван обычным прерыванием строки в white-space: pre-line условиях:

<div style="white-space:pre-line">a 
z</div>

Я отправил электронное письмо в список, прося разъяснить эту проблему и запросив, нужно ли менять спецификацию для соответствия реализациям, или файлы ошибок в браузерах, чтобы соответствовать спецификации.