什么“<html xmlns =”http://www.w3.org/1999/xhtml“>”呢?

我无法相信我的网站正在发生什么。 当我添加这一行时:

<html xmlns="http://www.w3.org/1999/xhtml"> <!DOCTYPE html> <html> <head> 

一切工作正常。 而当我不这样做的时候,CSS“混乱”了,一切都变了,布局变得“丑陋”了。

这条线如何解决所有的问题?

你在用XHTML混合HTML 。

通常使用<!DOCTYPE>声明来区分HTMLish语言(在本例中为HTML或XHTML)的版本。

不同的标记语言将有不同的performance。 我最喜欢的例子是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> 

您会注意到表格的高度差别很大,两个文档之间的唯一区别就是标记的types!

这很好…现在, <html xmlns="http://www.w3.org/1999/xhtml">做什么的?

这并不能回答你的问题。 从技术上讲, xmlns属性被XHTML文档的根元素使用:(根据维基百科 )

XHTML文档的根元素必须是html,并且必须包含一个xmlns属性以将其与XHTML名称空间相关联。

你知道,理解XHTML不是HTML而是XML是非常重要的 – 这是一个非常不同的生物。 (ok,一种不同的生物) xmlns属性只是文档需要成为有效XML的那些东西之一。 为什么? 因为在这个标准上工作的人这样说)(你可以在维基百科上阅读更多关于XML命名空间的信息,但是我省略了这个信息,因为它与你的问题实际上没有关系!

但是为什么是<html xmlns="http://www.w3.org/1999/xhtml">修复CSS?

如果像这样构build文档…(如您在评论中所build议的那样)

 <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,因此在怪癖模式下工作。

我提供的上述例子是同样问题的一个例子, 大多数人认为height:100%应该导致<table>的高度为整个窗口,并且DOCTYPE实际上正在打破他们的CSS …但事实并非如此; 相反,他们只是不明白,他们需要添加一个html, body { height:100%; } html, body { height:100%; } CSS规则来达到他们想要的效果。

它是一个XML命名空间。 当您使用XHTML 1.0或1.1 doctypes或application / xhtml + xml mimetypes时,它是必需的。

你应该使用HTML5的文档types,那么你不需要它的文本/ HTML。 最好从这样的模板开始:

 <!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <title>domcument title</title> <link rel="stylesheet" href="/stylesheet.css" type="text/css" /> </head> <body> <!-- your html content --> <script src="/script.js"></script> </body> </html> 


当你把你的Doctype直 – 做和validation你的HTML和你的CSS 。
这通常会解决你的布局问题。

这听起来像你的网站有CSS或JS,依赖于在怪癖模式下运行。 这就是为什么你需要在doctype之上的垃圾来渲染“正确”。 我build议删除说垃圾,然后修复您的CSS + JS实际工作在标准模式; 从长远来看,你会为自己节省很多的痛苦。

 The namespace name http://www.w3.org/1999/xhtml is intended for use in various specifications such as: Recommendations: XHTML™ 1.0: The Extensible HyperText Markup Language XHTML Modularization XHTML 1.1 XHTML Basic XHTML Print XHTML+RDFa 

在这里检查更多的细节