我简直不敢相信我网站上正在发生的事情。当我添加此行时:
<html xmlns="http://www.w3.org/1999/xhtml"> <!DOCTYPE html> <html> <head>
一切正常。如果我不这样做,CSS就会“混乱”,一切都会变得不同,布局也会变得“丑陋”。
这条线如何解决所有问题?
您正在将HTML与XHTML混合使用。
通常,<!DOCTYPE>声明用于区分HTMLish语言的版本(在这种情况下为HTML或XHTML)。
<!DOCTYPE>
不同的标记语言将表现不同。我最喜欢的例子是height:100%。在浏览器中查看以下内容:
height:100%
<!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> <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文档的根元素使用:
xmlns
XHTML文档的根元素必须为html,并且必须包含将xmlns其与XHTML名称空间关联的属性。
html
您会明白,了解XHTML不是HTML而是XML(一种截然不同的生物)非常重要。(好吧,是一种不同的生物)xmlns属性只是文档必须是有效XML的那些内容之一。为什么?因为有人在使用该标准,所以是这样说的;)(您可以在Wikipedia上阅读有关XML名称空间的更多信息,但我省略了该信息,因为它实际上与您的问题无关!)
如果像这样构造文档…
<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规则来达到预期的效果。
<table>
DOCTYPE
html, body { height:100%; }