在所有浏览器中都忽略了XHTML 1.0 DocType?

时间:2010-01-26 22:58:51

标签: html xhtml

我正在测试这个,因为我理解使用XHTML让我使用任何有效的XML用于空<div>元素:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Test</title>
</head>

<body>
<div style="border:solid 10px black; width:100px; height:100px"></div>
<div style="border:solid 10px red; width:100px; height:100px"></div>
<div style="border:solid 10px blue; width:100px; height:100px"></div>

<div style="border:solid 10px black; width:100px; height:100px" />
<div style="border:solid 10px red; width:100px; height:100px" />
<div style="border:solid 10px blue; width:100px; height:100px" />
</body>
</html>

它在我尝试的任何浏览器中都不起作用......这就是FireBug告诉我它理解文档的方式:

<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>
<title>Test</title>
</head>
<body>
<div style="border: 10px solid black; width: 100px; height: 100px;"/>
<div style="border: 10px solid red; width: 100px; height: 100px;"/>
<div style="border: 10px solid blue; width: 100px; height: 100px;"/>
<div style="border: 10px solid black; width: 100px; height: 100px;">
 <div style="border: 10px solid red; width: 100px; height: 100px;">
  <div style="border: 10px solid blue; width: 100px; height: 100px;"/>
 </div>
</div>
</body>
</html>

如果我必须这样做,我对使用XHTML有点困惑,我不妨使用HTML?

注意,将内容类型设置为content =“application / xhtml + xml”至少在FF3中没有区别。

4 个答案:

答案 0 :(得分:2)

  

如果必须这样做,使用XHTML的重点是什么,我不妨只使用HTML?

如果您希望XML的标记简单性优势,则必须将该页面作为XML媒体类型提供,例如Content-Type: text/html。不幸的是,这会打破旧浏览器和IE。有些人建议使用依赖于浏览器的application/xhtml+xml请求标头的可变内容类型来提供XHTML,但我不会因为这意味着您有两套非常不同的标记,样式和脚本规则要遵守,并且它使缓存效率降低。 (如果你在这样的响应中设置了Accept,那么它会破坏IE中的缓存,如果你没有浏览器,则可以获得缓存的错误类型。)

在“真正的”XHTML中对任何元素使用自动关闭表单是有效的,但是目前您没有使用“真正的”XHTML,您使用的是与HTML兼容的XHTML由XHTML标准的Appendix C定义。与HTML兼容的XHTML在浏览器方面并没有真正带来任何优势,但它确实意味着您可以使用XML感知工具创建内容,这些工具可以轻松地执行格式良好检查,转换或模板化文件。

HTML兼容的XHTML要求您使用自动关闭标签,如果(并且仅当)相关元素具有EMPTY的内容模型(即,它永远不能包含任何其他元素或文本内容)。定义为EMPTY的XHTML 1.0 Strict DTD(以及HTML 4.01 Strict DTD)中的元素是:

Vary: Accept

Transitional和Frameset DTD添加:

base
meta
link
hr
br
param
img
area
input
col

答案 1 :(得分:1)

我会看看以下问题。

What are all the valid self-closing tags in XHTML (as implemented by the major browsers)?

只支持一些标签作为自动关闭。

答案 2 :(得分:0)

要回答问题XHTML specification只允许十个不同的标记包含空元素。据我所知,其原因主要是与HTML兼容。

为了记录,有效标签是(from here):

  • <base />
  • <meta />
  • <link />
  • <hr />
  • <br />
  • <img />
  • <area />
  • <input />
  • <col />

但您的代码实际上并未被解释为XML ,您有Content-Type: text/htmlThat tells the browser to interpret your code as normal HTML.要告知浏览器将您的XHTML解释为XML,您必须将内容发送为application/xhtml+xmlThere are other problems with this, though.

答案 3 :(得分:0)

这是事实。 DOCTYPE无法控制在浏览器中解析文档的方式。只有HTTP Content-Type标头中发送的MIME类型才会生效。

Detailed explanation of MIME type pitfall

这是设计:

  

HTML工作组讨论了这个问题:意图是允许旧的   (仅限HTML)浏览器通过以下方式接受XHTML 1.0文档   准则,并将其作为text / html提供。因此,文件作为   text / html应该被视为HTML而不是XHTML。应该没有   嗅探text / html文档以查看它们是否真的是XHTML。