块之间的空白区域

时间:2010-07-03 08:30:23

标签: html css xhtml whitespace

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规范中提及/定义/允许/假设此规则。)

1 个答案:

答案 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元素,还要压制其他所有元素(应该如此)。他们注意到SCRIPTSTYLE元素'preserve规则,但仍然保持中断。在身体中,它用单个休息替换了多个休息时间。单行上的嵌套DIV标签(及其内容文本)被拆分。

简而言之,Firefox和IE8都不是符合用户代理

不,你不能用white-space属性来抑制两个标签之间的空白(如果你真的想,你可能会用JavaScript / jQuery来做)。 white-space属性指定如何处理元素内容部分中的空格(例如white-space: nowrap阻止文本换行)。