HTML标准是这样写的:
The section element represents a generic section of a document or application. A section, in this context, is a thematic grouping of content, typically with a heading.
Examples of sections would be chapters, the various tabbed pages in a tabbed dialog box, or the numbered sections of a thesis. A Web site’s home page could be split into sections for an introduction, news items, and contact information.
Note: Authors are encouraged to use the article element instead of the section element when it would make sense to syndicate the contents of the element.
Note: The section element is not a generic container element. When an element is needed only for styling purposes or as a convenience for scripting, authors are encouraged to use the div element instead. A general rule is that the section element is appropriate only if the element’s contents would be listed explicitly in the document’s outline.
意译如下(【】里面是我的注解):
section元素表示文档或应用的一个部分。所谓“部分”,这里是指按照主题分组的内容区域,通常会带有标题。【也就是每个section对应不同的主题。注意是内容本身的主题,而不是其他人为设定的划分标准。】
section的例子包括书的章节回目、多tab对话框的每个tab页、论文以数字编号的小节。网站的主页可能分成介绍、最新内容、联系信息等section。
注意:网页作者应使用article而不是section元素,如果其内容是用于聚合(syndicate)。【比如blog首页上的每篇blog。又如论坛帖子的一楼、二楼、三楼……n楼。通常这样的每部分内容形式上是类似的,但是来源是独立的。】
也就是说,一般情况下作为元素容器,使用div而不是section,那么section就没有用了吗?图样图森破。
这种情况下使用section就比div要好
section,顾名思义就是一个章节,比如:
<section>
<h1>WWF</h1>
<p>The World Wide Fund for Nature (WWF) is....</p>
</section>
- 1
- 2
- 3
- 4
至于为什么要用,是为了语义化,有section、article、dl看这多舒服,人也好理解,计算机也好理解,比满眼的div好多了。
div section 和article
<section></section>用于对网站或应用程序中页面上的内容进行分块。通常由内容及其标题组成。
<article></article>代表文档、页面或应用程序中独立的、完整的、可以独自被外部引用的内容。当我们描述一件具体的事物的时候,通常使用article来代替section。如一个帖子,一段用户评论等。
<aside></aside>表示当前页面或者文章的附属信息部分。如与当前页面或主要内容相关的引用、侧边栏、广告、nav元素组等。
<nav></nav>用作页面导航的链接组,其中可以包括<ul><li><p>元素等。
<time></time>表示某个时间或者某个日期。其中pubdate属性代表了文档的发布日期,可以用到time标签里。
<header></header>整个页面或者页面内容区块的标题,可以包含其他内容。
<footer></footer>页脚,页面底部或者版块的内容。
<hgroup></hgroup>页面上标题的组合,通常对h1~h6进行分组。
<address></address>文档作者或者文档维护者的联系信息。
<figure></figure>通常用于图片,统计图或代码示例,带有可选标题。将其从网页上移除后不会对网页上其他内容产生影响。
<figcaption></figcaption>表示figure的标题,从属于figure元素。
<mark></mark>页面中需要凸显出或者高亮显示的,对于当前用户具有参考作用的一段文字。
<progress></progress>代表一个任务完成的进度。
<details></details>描述文档或者用户要求得到并且可以得到的细节信息。与summary元素配合使用。
<summary></summary>给details元素提供标题或者图例。标题是可见的,用户点击标题时,会显示细节信息。
<datelist></datelist>选项列表。与input元素配合使用,来定义input可能的值。
<keygen></keygen>给表单添加一个公钥.
<menu></menu>菜单列表。HTML4中不推荐使用。
从开发的角度,语义化标签提高开发的易读性和可维护性,网站的发布者:有利于seo优化,但是语义化标签有兼容问题
在IE9以上包括ie9 支持H5和css3 但是IE9以下基本不支持H5和CSS3,i9以下不认识H5的标签,会将语义化标签默认会看成行内元素(可以测试下),所以行内元素不能设置宽高属性等, 所以语义化标签需要动态设置 在js里面可以设置 比如
var a = document.creatElement("section");并且需要设置成块级元素
但是在js中需要大量的代码实现这个兼容性,所以我们用一个插件解决这个问题
这个插件就是html5shiv.js 这个插件能完成这个问题 需要将这个js必须引入在头部,用于提前解析h5标签,但是在支持h5语义标签的不需要加载 ,但是在ie9以下要加载,这里需要优化以下:
在js中可以获取浏览器信息 navigator.useragent 这个可以获取浏览器版本,但是这个不能是html5shiv.js做提前加载
所以需要用条件注释,在css中有普通的注释,还有一种是条件注释
条件注释可以在网页的任何地方,这里加载兼容js需要放在网页的头部,根据浏览器版本加载html
<!--[if !IE]> <--> <script src="/assets/js/jquery-3.2.0.min.js" type="text/javascript"></script> <!--> <![endif]-->
格式是固定 下面这个lt是小于的意思 gt 是大于 lte小于等于 gte大于等于
<!--[if lt IE 9]> <--> <script src="/assets/js/jquery-3.2.0.min.js" type="text/javascript"></script> <!--> <![endif]-->从各个地方搜集的信息加上自己的理解 仅供大家参考,有问题可以留言及时改正