这些标签来定义。
在HTML5中,每个节点都有它自己的标题分级标准。所以即使是一个嵌套的区块也可以用h1作为标题。详见“2.定义标题”部分
例:
<section >
<h1 > Forest elephantsh1 >
<section >
<h1 > Introductionh1 >
<p > In this section, we discuss the lesser known forest elephants.p >
section >
<section >
<h1 > Habitath1 >
<p > Forest elephants do not live in trees but among them.p >
section >
<aside >
<p > advertising blockp >
aside >
section >
<footer >
<p > (c) 2010 The Example companyp >
footer >
这段代码中section定义了一个顶级区块,顶级区块中定义了三个子区块(两个section和一个aside)。这段代码可以提炼出如下的大纲:
1. Forest elephants
1.1 Introduction
1.2 Habitat
1.3 Untitled Section
(译注:还记得吗?aside定义的节点也能出现在大纲中,但上例中并没有为aside定义标题,所以在大纲中出现了untitled section的字样)
2.定义标题
HTML的布局元素用来定义文档的结构,HTML的标题元素则用来给这些结构和这些结构所提炼的大纲赋予意义。
规则很简单:当前区块的第一个标题元素就是这个区块在大纲中节点的标题。
标题元素根据它元素名字里的数字来划分等级,其中h1等级最高,h6等级最低。标题元素等级只有在同一个区块中才有意义;决定大纲的是文档的区块结构,而不是标题元素的等级。举例来说,参考如下代码:
<section >
<h1 > Forest elephantsh1 >
<p > In this section, we discuss the lesser known forest elephants.
...this section continues...
<section >
<h2 > Habitath2 >
<p > Forest elephants do not live in trees but among them.
...this subsection continues...
section >
section >
<section >
<h3 > Mongolian gerbilsh3 >
<p > In this section, we discuss the famous mongolian gerbils.
...this section continues...
section >
这些代码提炼出如下大纲:
1. Forest elephants
1.1 Habitat
2. Mongolian gerbils
(译注:之所以h3元素和h1元素同级,是因为h3所属的区块和h1所属的区块同级,这就说明了决定大纲的是区块结构,而不是标题元素的等级)
请注意标题元素的等级是不重要的(上例中h1是第一个顶级的区块的标题,h2是子区块的标题,h3是第二个顶级区块的标题)。任何等级的标题都可以用在显性区块里,但并不推荐这样做。
3.隐性定义节点
在HTML5中,并不是只能用这些区块定义元素来定义大纲,考虑到兼容统治了web很长时间的HTML4,HTML5制订了不使用区块定义元素而使用标题元素来定义的节点方法,并称之为隐性定义节点。
在一个显性定义的节点中,第一个标题元素是该显性节点的标题,从第二个标题元素开始(包括第二个标题元素),之后的标题元素会定义新的节点,这些新的节点就是隐性定义的节点(因为并没有用到显性定义节点的元素)。
隐性节点有可能作为同级节点或子节点存在,这取决于定义它的标题级别。 如果定义它的标题级别低于之前的标题级别,那么它作为子节点存在。看看代码:
<section >
<h1 > Forest elephantsh1 >
<p > In this section, we discuss the lesser known forest elephants.
...this section continues...
<h3 class ="implicit subsection" > Habitath3 >
<p > Forest elephants do not live in trees but among them.
...this subsection continues...
section >
提炼出下面的大纲:
1. Forest elephants
1.1 Habitat (通过h3元素隐性定义)
如果定义它的标题级别和之前的标题级别相同,它将关闭之前的节点并隐性定义一个同级别的节点:
<section >
<h1 > Forest elephantsh1 >
<p > In this section, we discuss the lesser known forest elephants.
...this section continues...
<h1 class ="implicit section" > Mongolian gerbilsh1 >
<p > Mongolian gerbils are cute little mammals.
...this section continues...
section >
提炼出下面的大纲:
1. Forest elephants
2. Mongolian gerbils (通过h1元素隐性定义,同时关闭之前的区块)
如果定义它的标题级别高于之前的标题级别,它将关闭之前的节点并隐性定义一个同级别的节点:
<body >
<h1 > Mammalsh1 >
<h2 > Whalesh2 >
<p > In this section, we discuss the swimming whales.
...this section continues...
<section >
<h3 > Forest elephantsh3 >
<p > In this section, we discuss the lesser known forest elephants.
...this section continues...
<h3 > Mongolian gerbilsh3 >
<p > Hordes of gerbils have spread their range far beyond Mongolia.
...this subsection continues...
<h2 > Reptilesh2 >
<p > Reptiles are animals with cold blood.
...this section continues...
section >
body >
提炼出下面的大纲:
1. Mammals
1.1 Whales (通过h2元素隐性定义)
1.2 Forest elephants (通过section元素显性定义)
1.3 Mongolian gerbils (通过h3元素隐性定义,同时关闭之前的节点)
1.4 Reptiles (通过h2元素隐性定义,同时关闭之前的节点)
这种大纲并不是稍微瞥一眼就能快速通过标题元素读懂的大纲。为了让你的大纲和HTML(对于人的)可读性更强,建议使用显性标签来定义或关闭节点,并且建议在区块嵌套时,标题元素的级别符合自然习惯。但是,HTML5手册并不强制要求这么做。如果你发现浏览器没有按照你的预期渲染大纲,检查看看是不是有一些节点被标题元素隐性声明的节点关闭了。
译者例 - 稍微复杂的大纲: 提炼出下面的大纲:
1.文档标题
1.h3标题
1.h5标题
2.h4标题
1.h5标题
2.h3标题
3.h1标题
1.h2标题
1.h3标题
2.h2标题
分析:
3.根节点
在HTML中,一个有自己的大纲系统,但是,这些元素对于它们的祖先的大纲没有任何影响。Body元素是文档的逻辑根节点,也有一些元素引入外部的内容,比如blockquote, details, fieldset, figure和td.
举例来说:
<section >
<h1 > Forest elephantsh1 >
<section >
<h2 > Introductionh2 >
<p > In this section, we discuss the lesser known forest elephantsp >
section >
<section >
<h2 > Habitath2 >
<p > Forest elephants do not live in trees but among them. Let's
look what scientists are saying in "<cite > The Forest Elephant in Borneocite > ":p >
<blockquote >
<h1 > Borneoh1 >
<p > The forest element lives in Borneo...p >
blockquote >
section >
section >
上面的代码提炼出如下的大纲:
1. Forest elephants
1.1 Introduction
1.2 Habitat
在section中的blockquote元素不显示在主大纲中,因为它是一个作为外部引用的、拥有独立内部大纲的根节点。(译注:事实上,所有的根节点元素都不会显示在主大纲中)
4.不属于主大纲的区块
HTML5中引入的两个新元素允许开发者定义一个区块,但这个区块不会在大纲中创建节点:
HTML5的aside元素定义一个区块,这个区块属于文档的主元素,但不属于主文档流(比如注释或广告区域)。它有独自的大纲,但不属于主大纲。
HTML5的nav元素定义一个用于承载导航链接的区块。一个文档中可以有好几个nav元素,比如一个用来存放页面内的链接(像是文章目录),一个用来存放站点的导航链接。这些链接并不属于主文档流和主大纲,而且一般不会被屏幕阅读器或其他辅助设备优先渲染。
5.头元素和尾元素
HTML5也引入了两个新的元素用来标记头部和尾部:
HTML5的header元素定义页面的头部——通常包含logo、站点名称,也可能包含一个水平导航菜单。当然header也可以作为区块的头部,用来承载区块的标题、作者等。像article, section, aside和nav元素都可以有它自己的header.不过,你也不一定非要在每个页面或区块的都不放置这样一个元素。
HTML5的footer元素定义页面的尾部——通常包含版权信息、法律声明,有时候还包含一些链接。当然footer也可以作为区块的尾部,可能用来承载区块里面内容的出版时间、版权信息等等。像atricle, section, aside和nav元素都可以有自己的footer.不过,你也不一定非要在每个页面或区块都放置这样一个元素。
Header和footer元素不会在大纲中创建新的节点,它们只用来标记页面中的区域。
总结
HTML5引入的新语义化元素将描述文档结构和大纲标准化。这为拥有HTML5浏览器而且需要大纲来帮助理解页面的人带来了极大的便利,比如需要使用辅助阅读技术的残障人士。这些新的语义化元素使用简单、副作用小,在非HTML5浏览器中也可以使用。
附加节:实际使用中div和section的区别
本小结引自集HTML5+CSS3网页布局教程-2大纲算法
1.何时使用div
div元素在html5之前是最常用的最流行的标签,但他本身是没有任何语义的,它只不过是用来布局页面和CSS样式以及JS调用。
如果是页面布局,且不是header、footer之类的专属区域,都应该使用div;
如果只是单纯的对一个段内容进行CSS样式定义,那么也应该使用div;
如果想对一段内容进行JS控制,那么也应该使用DIV;
2.何时使用section
在html5中,section标签并不是用来取代div的,他是具有语义的文档标签,表示一段文档中的章节,比如包含一个标题和一个段落,而大纲规范中,至少要包含一个标题。