【问题标题】:Definition of HTML whitespace rules?HTML空白规则的定义?
【发布时间】:2010-11-28 09:22:21
【问题描述】:

我正在寻找这个定义以使我的 HTML 渲染器更符合要求。目前它正在猜测要保留哪个空格,要折叠哪个空格以及要扔什么。 SGML 标准很难找到,而 HTML 标准似乎没有按照我的需要来处理这个主题。

目前,我的渲染器将 HTML 解析为树,然后执行递归布局传递以定位所有元素及其内容。我正在尝试在解析阶段抛出一些空格,即在某些情况下不发出仅空格的文本块。哪种情况适用于大多数情况,但也有相当多的边缘情况难以处理。

(我还在开发 HTML 控件的编辑器子类,并且布局时间解决方案在编辑器中被证明有点问题,因此我正在努力让它们进入解析阶段。布局信息不是在您编辑文档后的某个时间之前可用直到回流时间。)

用链接/火焰开火。

【问题讨论】:

    标签: html whitespace sgml


    【解决方案1】:

    我认为9.1 White space in the HTML 4 specification 部分是您正在寻找的内容。

    【讨论】:

    • 我读过,它没有我需要的细节。目前正在浏览 HTML 5 解析器文档,以了解它如何覆盖元素周围的空白。
    【解决方案2】:

    如果您正在编写自己的 HTML 解析器,那么我强烈建议您使用 HTML 5 规范中的解析算法。 http://www.whatwg.org/html5 它涵盖了大量的边缘和角落案例,以及一般的浏览器怪异。浏览器不遵循 SGML 规则,但它们都在做 HTML 5 规范所说的事情,或者与其等效的功能。有几个可用的开源解析器可以实现该算法,所以它应该有你需要的一切。

    【讨论】:

    • 现在我已经有一些时间阅读了 HTML5 规范,以及处理解析的部分,我还没有更接近于确定哪些空白字符最终会被渲染,哪些会消失。
    • 对。渲染哪个空白区域与您提出的问题不同,即在解析阶段可以抛出哪个空白区域。请记住,像 white-space:pre 这样的 css 可以在 parse 阶段之后很长时间由 javascript 应用,因此 parse 阶段不能丢弃以后可能会受到此类应用程序影响的任何空白。
    • 顺便说一句,查看浏览器实际操作方式的一个好工具是使用 Hixie 的 Live DOM Viewer (software.hixie.ch/utilities/js/live-dom-viewer)。您会看到,当您在“标记为测试”框中创建空白时,“#text:”节点会在 DOM 中创建,表明在解析阶段不会抛出空白。请注意,当前/最近的浏览器的行为方式并不完全相同,但如果您使用的是 gecko、webkit 或基于 presto 的浏览器,效果应该足够清晰。
    【解决方案3】:

    所以我认为我最接近的答案是在这里: http://www.w3.org/TR/CSS2/text.html#white-space-model

    【讨论】:

    【解决方案4】:

    【讨论】:

      猜你喜欢
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多