是否有必要编写HEAD、BODY和HTML标记?
是否需要编写是否有必要编写HEAD、BODY和HTML标记?,html,tags,Html,Tags,是否需要编写、和标记 例如,我可以制作这样一个页面: <!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"> &
、
和
标记
例如,我可以制作这样一个页面:
<!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>
页面标题
一些html
Firebug正确地将头部和身体分开:
W3C验证说它是有效的
但我很少在网上看到这种做法
是否有理由编写这些标记?Firebug正确地显示了这一点,因为浏览器会自动为您修复错误的标记。此行为没有在任何地方指定,并且可能(将)因浏览器而异。这些标记是您正在使用的DOCTYPE所必需的,不应忽略
是每个html页面的根元素。如果您查看所有其他元素的描述,它会指出元素的使用位置(几乎所有元素都需要头部或身体)。在HTML4中省略它们是有效的:
7.3 The HTML element
start tag: optional, End tag: optional
7.4.1 The HEAD element
start tag: optional, End tag: optional
在HTML5中,没有“必需”或“可选”元素,因为HTML5语法的定义更为松散。例如,标题
:
在大多数情况下,title元素是必需的子元素,但当更高级别的协议提供标题信息时(例如,当HTML用作电子邮件创作格式时,在电子邮件的主题行中),可以省略title元素
在真正的XHTML5中省略它们是无效的,尽管这几乎从未被使用过(相对于XHTML-acting-like-HTML5)
然而,从实际的角度来看,您通常希望浏览器在“标准模式”下运行,以实现呈现HTML和CSS的可预测性。提供DOCTYPE和更结构化的HTML树将保证更可预测的跨浏览器结果 省略
html
、head
和body
标记肯定是html规范允许的。其根本原因是浏览器总是试图与现有网页保持一致,而HTML的早期版本并没有定义这些元素。当HTML2.0第一次这样做时,它是以这样一种方式完成的,即当缺少标记时会推断出标记
我经常发现,在进行原型设计时,尤其是在编写测试用例时,省略标记是很方便的,因为它有助于将标记集中在有问题的测试上。推理过程应该以您在Firebug中看到的方式创建元素,浏览器在这方面非常一致
但是
IE在这方面至少有一个已知的bug。甚至IE9也展示了这一点。假设标记是这样的:
<!DOCTYPE html>
<title>Test case</title>
<form action='#'>
<input name="var1">
</form>
但在IE中,你会得到:
HTML
HEAD
TITLE
FORM action="#"
BODY
INPUT name="var1"
BODY
这个bug似乎仅限于任何文本内容前面的
表单
开始标记和任何正文
开始标记。与@Liza Daly关于HTML5的注释相反,该规范实际上非常具体地说明了哪些标记可以省略,以及何时可以省略(这些规则与HTML4.01有点不同,主要是为了澄清注释和空格等模糊元素的归属)
相关参考是,它说:
- 如果html元素中的第一件事不是注释,则可以省略html元素的开始标记
- 如果html元素后面没有紧接注释,则可以省略html元素的结束标记
- 如果head元素为空,或者如果head元素中的第一个元素是元素,则可以省略head元素的开始标记
- 如果head元素后面没有紧跟空格字符或注释,则可以省略head元素的end标记
- 如果body元素为空,或者如果body元素中的第一个元素不是空格字符或注释,则可以省略body元素的开始标记,除非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>
页面标题
一些html
请注意,注释“此脚本将位于头部”实际上是作为主体的一部分进行解析的,尽管脚本本身是头部的一部分。根据规范,如果您希望这一点有所不同,则不能忽略
和
标记。(尽管相应的
和
标记仍然可以被删除)确实,HTML规范允许在某些情况下省略某些标记,但通常这样做是不明智的
它有两个效果——它使规范变得更复杂,这反过来又使浏览器作者更难编写正确的实现(如IE出错所示)
这使得规范的这些部分出现浏览器错误的可能性很高。作为网站作者,您可以通过包含这些标记来避免问题-因此,虽然规范没有说您必须这样做,但这样做可以减少出错的机会,这是一种良好的工程实践
更重要的是,最新的HTML5.1WG规范目前表示(请记住,这是一项正在进行的工作,可能还会发生变化)
如果主体元素为空,则可以省略该元素的开始标记,或者
如果body元素中的第一个元素不是空格字符或
注释,除非body元素中的第一个内容是
元、链接、脚本、样式或模板元素
这有点微妙。您可以省略body和head,然后浏览器将推断这些元素应插入的位置。这会带来不明确的风险,可能会导致混淆
那么这个
<html>
<h1>hello</h1>
<script ... >
...
你好
...
结果script元素是body元素的子元素,但是
<html>
<script ... >
<h1>hello</h1>
你好
将导致脚本标记成为head元素的子元素
你可以通过这样做来明确
<html>
<body>
<script ... >
<h1>hello</h1>
你好
然后,不管你有什么
<html>
<body>
<script ... >
<h1>hello</h1>
<!-- 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.