【问题标题】:XHTML 1.0 DocType ignored in all browsers?XHTML 1.0 DocType 在所有浏览器中都被忽略了吗?
【发布时间】:2010-06-14 02:47:55
【问题描述】:

我正在对此进行测试,因为我理解使用 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 中没有任何区别。

【问题讨论】:

    标签: html xhtml


    【解决方案1】:

    如果我必须这样做,使用 XHTML 有什么意义,我还不如只使用 HTML?

    正在使用 HTML,假设您以 Content-Type: text/html 的身份提供您的网页,(遗憾的是)您现在必须这样做。

    如果您想要 XML 的标记简单性优势,您必须将页面作为 XML 媒体类型提供服务,例如 application/xhtml+xml。不幸的是,这会破坏旧的浏览器和 IE。有些人建议使用取决于浏览器的 Accept 请求标头的可变内容类型来提供 XHTML,但我不会,因为这意味着您需要遵守两组非常不同的标记、样式和脚本规则,并且它可以进行缓存不太有效。 (如果你在这样的响应中设置Vary: Accept,它会破坏 IE 中的缓存,如果你不这样做,浏览器可能会得到缓存的错误类型。)

    在“真实”XHTML 中为 any 元素使用自闭合形式是有效的,但此时您没有使用“真实”XHTML,您正在使用与 HTML 兼容的 XHTML由 XHTML 标准的Appendix C 定义。与 HTML 兼容的 XHTML 并没有真正在浏览器方面带来任何优势,但它确实意味着您可以在支持 XML 的工具中创作您的内容,这些工具可以轻松地执行格式正确检查、转换或模板化文件等操作。

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

    base
    meta
    link
    hr
    br
    param
    img
    area
    input
    col
    

    Transitional 和 Frameset DTD 添加:

    basefont
    isindex
    frame
    

    【讨论】:

      【解决方案2】:

      我会看看以下问题。

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

      只有部分标签支持自闭合。

      【讨论】:

        【解决方案3】:

        回答这个问题XHTML specification 只允许十个不同的标签有空元素。据我所知,这样做的原因主要是与 HTML 兼容。

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

        • &lt;base /&gt;
        • &lt;meta /&gt;
        • &lt;link /&gt;
        • &lt;hr /&gt;
        • &lt;br /&gt;
        • &lt;img /&gt;
        • &lt;area /&gt;
        • &lt;input /&gt;
        • &lt;col /&gt;

        但您的代码实际上并没有被解释为 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.

        【讨论】:

        • XML 和 XHTML 规范允许对任何元素使用自闭合语法,但如您所说,这些仅适用于您发送具有正确 Content-Type 的文档时。
        【解决方案4】:

        这是真的。 DOCTYPE 不控制文档在浏览器中的解析方式。只有在 HTTP Content-Type 标头中发送的 MIME 类型可以。

        Detailed explanation of MIME type pitfall.

        这是设计使然:

        HTML WG 已经讨论过这个问题:目的是让旧的 (仅 HTML)浏览器接受 XHTML 1.0 文档,遵循 指南,并将它们作为 text/html 提供。因此,文件作为 text/html 应该被视为 HTML 而不是 XHTML。应该没有 嗅探 text/html 文档以查看它们是否真的是 XHTML。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-12
          • 2011-05-07
          • 2016-01-07
          • 2021-01-26
          • 1970-01-01
          • 1970-01-01
          • 2011-04-20
          • 2011-05-08
          相关资源
          最近更新 更多