是否有必要编写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规范肯定允许省略html
, head
和body
标签。 其根本原因在于浏览器一直试图与现有的网页保持一致,而早期的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>
标签仍然可以)
上一篇: Is it necessary to write HEAD, BODY and HTML tags?
下一篇: In XHTML 1.0 Strict do attribute values need to be surrounded with quotes?