是否有必要编写HEAD,BODY和HTML标签?

是否有必要编写<html><head><body>标签?

例如,我可以制作这样一个页面:

<!DOCTYPE html>     
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Page Title</title>
    <link rel="stylesheet" type="text/css" href="css/reset.css">
    <script src="js/head_script.js"></script><!-- this script will be in head //-->


<div>Some html</div> <!-- here body starts //-->

    <script src="js/body_script.js"></script>

Firebug正确分离头部和身体: 在这里输入图像描述

W3C验证说它是有效的。

但我很少在网络上看到这种做法。

有没有任何理由写这些标签?


HTML规范肯定允许省略htmlheadbody标签。 其根本原因在于浏览器一直试图与现有的网页保持一致,而早期的HTML版本并未定义这些元素。 当HTML 2.0第一次做的时候,这样做的方式是标签在丢失时被推断出来。

我经常发现在原型设计时忽略标签是很方便的,尤其是在编写测​​试用例时,因为它有助于将标记集中在正在讨论的测试上。 推理过程应该以您在Firebug中看到的方式创建元素,并且浏览器在这方面非常一致。

但...

IE在这方面至少有一个已知的错误。 即使IE9展出了这一点。 假设标记是这样的:

<!DOCTYPE html>
<title>Test case</title>
<form action='#'>
   <input name="var1">
</form>

你应该(并在其他浏览器中)得到一个如下所示的DOM:

HTML
    HEAD
        TITLE
    BODY
        FORM action="#"
            INPUT name="var1"

但在IE中,你会得到这个:

HTML
    HEAD
       TITLE
       FORM action="#"
           BODY
               INPUT name="var1"
    BODY

亲自查看。

这个错误似乎局限于任何文本内容和任何body开始标签之前的form开始标签。


Google的HTML样式指南建议省略所有可选标签。
包括<html><head><body><p><li>

https://google.github.io/styleguide/htmlcssguide.html#Optional_Tags

为了文件大小优化和可扫描性目的,考虑省略可选标签。 HTML5规范定义了哪些标签可以省略。

(这种方法可能需要将宽限期作为更宽泛的指导方针来制定,因为它与Web开发人员通常所教的内容有很大不同。出于一致性和简单性的原因,最好省略所有可选标记,而不仅仅是选择。

<!-- Not recommended -->
<!DOCTYPE html>
<html>
  <head>
    <title>Spending money, spending bytes</title>
  </head>
  <body>
    <p>Sic.</p>
  </body>
</html>

<!-- Recommended -->
<!DOCTYPE html>
<title>Saving money, saving bytes</title>
<p>Qed.

与@Liza Daly关于HTML5的说明相反,该规范实际上非常具体地指出哪些标签可以省略,何时(以及规则与HTML 4.01有点不同,主要是澄清注释和空白之类的不明确的元素属于哪里)

相关参考文献是http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#optional-tags,它说:

  • 如果html元素中的第一个内容不是注释,则可以省略html元素的开始标记。

  • 如果html元素没有紧接着评论,则可以省略html元素的结束标签。

  • 如果元素为空,或者头元素内的第一个元素是元素,则可以省略头元素的开始标记。

  • 如果头元素之后没有紧跟空格字符或注释,则可以省略头元素的结束标记。

  • 如果元素为空,或者body元素中的第一个元素不是空格字符或注释,则body元素的开始标记可以省略,除非body元素中的第一个元素是脚本或样式元素。

  • 如果body元素之后没有注释,则可以省略body元素的结束标记。

  • 因此,您的示例是有效的HTML5,并且可以像这样解析,html,head和body标签位于其隐含的位置:

    <!DOCTYPE html><HTML><HEAD>     
        <meta http-equiv="Content-type" content="text/html; charset=utf-8">
        <title>Page Title</title>
        <link rel="stylesheet" type="text/css" href="css/reset.css">
        <script src="js/head_script.js"></script></HEAD><BODY><!-- this script will be in head //-->
    
    
    <div>Some html</div> <!-- here body starts //-->
    
        <script src="js/body_script.js"></script></BODY></HTML>
    

    请注意,“这个脚本将在头部”的注释实际上被解析为身体的一部分,尽管脚本本身是头部的一部分。 根据规范,如果您希望完全不同,那么</HEAD><BODY>标签不能省略。 (尽管相应的<HEAD></BODY>标签仍然可以)

    链接地址: http://www.djcxy.com/p/88911.html

    上一篇: Is it necessary to write HEAD, BODY and HTML tags?

    下一篇: In XHTML 1.0 Strict do attribute values need to be surrounded with quotes?