Предполагается, что свойство «белого пространства» CSS может влиять на пробелы между элементами блока?Свойство «пробел» между блоками
Например, в документе используется в качестве примера в «Whitespace in the DOM» следующим образом, существует пробел между </h1>
и <p>
:
<!-- My document -->
<html>
<head>
<title>My Document</title>
</head>
<body>
<h1>Header</h1>
<p>
Paragraph
</p>
</body>
</html>
Этот пробел обычно удаляется; например, the XHTML spec says that a conforming user agent must meet all of the following criteria:
В элементах, где «XML: пространство» атрибут имеет значение «сохранить», агент пользователь должен оставить все пробелы символы нетронутыми (за исключением ведущих и конечные пробелы символов, которые необходимо удалить). В противном случае, пробельные обрабатывается в соответствии со следующими правилами:
- Все пробельные окружающие блоковые элементы должны быть удалены.
- Ведущее и конечное пробелы внутри элемента блока должно быть удалено.
- Линейные символы в блочном элементе должны быть преобразованы в пробе (за исключением случаев, когда атрибут «xml: space» установлен в «сохранить»).
- Последовательность символов пробела должна быть уменьшена до одного пробела. символ (кроме случаев, когда атрибут 'xml: space' имеет значение 'preserve').
Мои вопросы заключаются в следующем:
Если я использую CSS white-space property на
<body>
, это должно быть в состоянии сохранить пробелы между элементами блока (например, между</h1>
и<p>
) ? Или пробелы между блоками всегда удаляются, а свойство white-space влияет только на пробелы внутри блоков?Спецификация XHTML говорит, что
<body>
cannot directly contain PCDATA (т. Е. Текст). Означает ли это, что пробел (являющийся своего рода текстом), являющийся прямым потомком тега<body>
, всегда незначителен/проигнорирован и не может быть активирован с помощью CSS? Если да и пробелы между</h1>
и<p>
в приведенном выше примере были проигнорированы, потому что это прямой дочерний элемент<body>
, было бы/должно быть, что пробел все равно будет проигнорирован, если в<body>
есть<div style="white-space: pre">
и включающий все остальные элементы?The 'white-space' processing model начинается с: «Любой текст, который содержится непосредственно внутри элемента блока (не внутри встроенного элемента), должен рассматриваться как анонимный встроенный элемент». Что я должен понимать о чистом пробеле (пробелы без текста)?
Есть ли правило (и если да, где это правило определено) об удалении пробелов внутри встроенных элементов? Например, в следующей последовательности
<p>The <strong> lazy </strong> dog.</p>
следует удалить пробелы после тега<strong>
?(Спецификация HTML 4 имеет a rule about this for line breaks; мне было интересно, применимо ли это правило к другим белым строкам без строки и относится ли это правило/определено/разрешено/принято в любой спецификации XHTML или CSS.)
Я думаю, что пробел между двумя блоками должен быть автоматически подавлен (но я не уверен, какой spec указывает это). Мне было интересно, было ли свойство белого пространства иметь возможность сохранять/отображать пробелы между блоками (это обычно сжимается). – ChrisW
Да, согласно схеме, пробелы между двумя блоками должны быть подавлены, но это не связано с тем, что решение Mozilla не следует схеме.Если бы они следовали схеме, свойство 'white-space' сохранил бы это пробел, если бы два блока были обернуты элементом с« белым пространством », установленным в' pre' (например, элементом 'PRE'). –
У меня создается впечатление, что, может быть, в соответствии с современными спецификациями (например, спецификацией XHTML v2) никакие пробелы никогда не удаляются парсером из DOM, а вместо этого он всегда находится в DOM, и либо отображается, либо нет в соответствии с Настройка белого пространства CSS. – ChrisW