“”有什么作用?

时间:2011-04-29 23:22:51

标签: html css xhtml

我无法相信我网站上发生的事情。当我添加这一行时:

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

一切正常。当我不这样做时,CSS“混乱”,一切都变得不同,布局变得“丑陋”。

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

4 个答案:

答案 0 :(得分:80)

您将HTMLXHTML混合在一起。

通常使用<!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一无所知(没有冒犯!)而事实是没有 {{1它的行为正常而且 <html xmlns="http://www.w3.org/1999/xhtml">它不是 - 而你只是认为它是,因为你习惯于编写无效的HTML并因此在{ {3}}

我提供的上述示例是同一问题的一个例子;大多数人认为<html xmlns="http://www.w3.org/1999/xhtml">应该导致height:100%的高度成为整个窗口,并且<table>实际上正在破坏他们的CSS ......但事实并非如此;相反,他们只是不明白他们需要添加DOCTYPE CSS规则来实现他们想要的效果。

答案 1 :(得分:23)

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

你应该使用HTML5 doctype,然后你不需要它用于text / 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,请执行并验证htmlcss
这通常会让您解决布局问题。

答案 2 :(得分:7)

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

答案 3 :(得分:0)

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

点击此处for more detail