我正在测试这个,因为我理解使用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中没有区别。
答案 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/html
。 That tells the browser to interpret your code as normal HTML.要告知浏览器将您的XHTML解释为XML,您必须将内容发送为application/xhtml+xml
。 There 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。