CSS'white-space'属性是否应该能够影响块元素之间的空白?
例如,在“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:space'中的元素 属性设置为'保留', 用户代理必须留下所有空格 字符完整(除外 前导和尾随空格 字符,应删除)。 否则,处理空格 根据以下规则:
- 应删除块元素周围的所有空格。
- 块元素中的前导和尾随空格必须是 除去。
- 必须将块元素中的换行符转换为空格 ('xml:space'属性除外) 设置为“保留”)。
- 必须将一系列空格字符缩小为单个空格 字符('xml:space'除外) 属性设置为“保留”)。
我的问题如下:
如果我使用<body>
上的CSS white-space property,这是否应该能够保留块元素之间的空白(例如</h1>
和<p>
之间的空格)?或者总是删除块之间的空格,而white-space属性只影响块内的空格?
XHTML规范指出<body>
cannot directly contain PCDATA(即文字)。这是否意味着<body>
标签的直接子节点的空白(作为一种文本)始终无关紧要/被忽略,并且无法通过CSS启用?如果是,并且上例中的</h1>
和<p>
之间的空格被忽略,因为它是<body>
的直接子节点,如果有{<div style="white-space: pre">
,那么该空格是否应该被忽略{1}}在<body>
内并且包含所有其他元素?
The 'white-space' processing model以“任何直接包含在块元素内(不在内联元素内)的文本应被视为匿名内联元素”开头。我应该了解纯空白(没有文字的空白)?
是否有关于删除内联元素中的空格的规则(如果是这样,此规则在何处定义)?例如,在以下序列中<p>The <strong> lazy </strong> dog.</p>
是否应移除<strong>
标记后面的空格? (HTML 4规范有a rule about this for line breaks;我想知道这条规则是否也适用于其他非线条空白空间,以及是否在任何XHTML或CSS规范中提及/定义/允许/假设此规则。)
答案 0 :(得分:1)
你的问题肯定会让我好奇。我希望能够对它们有所了解。
XHTML schema将以下三个元素说明为preserve
:
STYLE
SCRIPT
PRE
这意味着所有其他容器元素都应该抑制它们周围的空格。您的Mozilla链接("Whitespace in the DOM")说:
在Mozilla中,文本中的所有空格 原始文件的内容是 在DOM中表示......
当运行具有大量空格和间隔的测试页时,这一点变得明显。查看生成的代码(您可以使用 Web Developer 工具栏执行此操作:选择查看源 - 查看生成的源)显示“文本内容“表示HTML
根标记内的所有内容。因此,换句话说,最外面的标记(HTML
)上只有空格抑制。
在IE8中运行相同的页面讲述了一个略有不同的故事(按 F12 查看生成的源代码,在开发人员工具中,按 CTRL - G < / KBD>)。它们也不是100%一致,但比Firefox更符合要求。他们不仅要压制HTML
元素,还要压制其他所有元素(应该如此)。他们注意到SCRIPT
和STYLE
元素'preserve
规则,但仍然保持中断。在身体中,它用单个休息替换了多个休息时间。单行上的嵌套DIV
标签(及其内容文本)被拆分。
简而言之,Firefox和IE8都不是符合用户代理。
不,你不能用white-space
属性来抑制两个标签之间的空白(如果你真的想,你可能会用JavaScript / jQuery来做)。 white-space
属性指定如何处理元素内容部分中的空格(例如white-space: nowrap
阻止文本换行)。