HTML和XHTML之间的显示差异

3
我原本以为XHTML文档应该与“strict” HTML文档一样遵循标准的兼容模式来显示。
然而,在显示
元素方面存在差异:在HTML文档中,如果
开始标签后面跟着LF(或CRLF),则会被忽略。但在XHTML中不是这样。
例如:HTML文件XHTML文件具有相同的内容,但呈现方式不同。
(或者如果您认为提供一个HTML文件和一个XHTML文件具有完全相同的内容,包括DOCTYPE,是作弊的,那么这里有两个遵循更经典规则的文件:HTML 4.01 strictXHTML 1.0 strict。)
那么,这是否意味着像这个W3C页面所说的那样:

所有换行符和空格都会按HTML中出现的位置精确呈现。唯一的例外是在<pre>开始标记之后和</pre>结束标记之前紧接着的换行符,这些会被忽略。

只适用于HTML,而不适用于XHTML?我没有找到任何迹象表明XHTML可以随意显示内容。但是我测试过的所有浏览器都是这样做的。
1个回答

1

去掉起始换行符与HTML的渲染无关,Dave Raggett的页面有点不够精确,而且已经有些过时了。去掉起始换行符是HTML解析器的一个属性。

文档主体树构建阶段中,HTML5规范针对text/html MIME类型表示:

标签名为"pre"、"listing"之一的开始标签

如果开放元素堆栈中有一个在按钮范围内的p元素,则关闭一个p元素。

为该标记插入一个HTML元素。

如果下一个标记是"LF"(U+000A)字符标记,则忽略该标记并继续处理下一个标记。(在pre块开头的换行符被忽略,以方便作者编写。)

将Frameset-ok标志设置为"not ok"。

XML解析器根据XML解析规则不允许这样做,因此XHTML不会删除那个换行符。


可能吧,但是在w3.org网站上没有提到这个区别很奇怪。而且,那真的是这样吗?我的意思是,为什么在</pre>之前的\n也不会被渲染成空行呢?只有在开头的\n才会这样。 - Mr Lister
最终,HTML和XHTML的行为是相同的。它不会被渲染(这是一个渲染问题),因为在换行符后的第一个内联级块之前没有创建行框。 - Alohci
在这方面,空格处理模型是值得认真阅读的。它覆盖了结束情况,以及其他一些有趣的内容,比如在“正常”模式下,空白符串会折叠成第一个空格符,直到最近我才真正深入思考过这个问题。 - Alohci
必须思考。哦,我刚刚注意到HTML版本有趣的一点:当你在Firefox中选择全部,然后执行“查看选定内容源”,DOM会显示第一个\n缺失的pre。但是最后一个\n没有丢失!当然,这种情况不会发生在XHTML版本中。 - Mr Lister
更正一下,我之前说的是“直到换行符后的第一个内联级块。”,实际上应该是“直到换行符后的第一个内联级盒子。” - Alohci
好的,那我就不能再多要求了。 - Mr Lister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接