您将HTML 与XHTML 混淆了。
通常<!DOCTYPE> 声明用于区分 HTMLish 语言的版本(在本例中为 HTML 或 XHTML)。
不同的标记语言会有不同的表现。我最喜欢的例子是height:100%。在浏览器中查看以下内容:
XHTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<style type="text/css">
table { height:100%;background:yellow; }
</style>
</head>
<body>
<table>
<tbody>
<tr><td>How tall is this?</td></tr>
</tbody>
</table>
</body>
</html>
...并将其与以下内容进行比较:(注意明显缺少<!DOCTYPE> 声明)
HTML(怪癖模式)
<html>
<head>
<style type="text/css">
table { height:100%;background:yellow; }
</style>
</head>
<body>
<table>
<tbody>
<tr><td>How tall is this?</td></tr>
</tbody>
</table>
</body>
</html>
您会注意到表格的高度完全不同,两个文档之间的唯一区别是标记的类型!
太好了……现在,<html xmlns="http://www.w3.org/1999/xhtml"> 做了什么?
但这并不能回答您的问题。从技术上讲,xmlns 属性由 XHTML 文档的根元素使用:(根据Wikipedia)
XHTML 文档的根元素必须是html,并且必须包含xmlns 属性以将其与XHTML 命名空间相关联。
您知道,了解 XHTML 不是 HTML 而是 XML - 一个非常不同的生物非常重要。 (好吧,一种不同的生物)xmlns 属性只是文档需要是有效 XML 的那些东西之一。为什么?因为从事该标准工作的人是这样说的;)(您可以阅读有关XML namespaces on Wikipedia 的更多信息,但我省略了该信息,因为它实际上与您的问题无关!)
但是为什么<html xmlns="http://www.w3.org/1999/xhtml"> 修复了 CSS?
如果像这样构建您的文档...(正如您在 your comment 中建议的那样)
<html xmlns="http://www.w3.org/1999/xhtml">
<!DOCTYPE html>
<html>
<head>
[...]
... 正在修复您的文档,这让我相信您对 CSS 和 HTML 了解不多(无意冒犯!),而事实是 没有 <html xmlns="http://www.w3.org/1999/xhtml">它的行为正常,而 <html xmlns="http://www.w3.org/1999/xhtml"> 不是 - 而你只是 认为 它是,因为你习惯于编写无效的 HTML 并因此在 quirks mode 中工作。
我提供的上述示例是同一问题的示例;大多数人认为height:100% 应该导致<table> 的高度是整个窗口,而DOCTYPE 实际上正在破坏他们的CSS……但事实并非如此;相反,他们只是不明白他们需要添加html, body { height:100%; } CSS 规则才能达到他们想要的效果。