网络上有足够多关于HTML5的信息(stackoverflow上也有),但现在我对“最佳实践”很好奇。像section/headers/article这样的标签是新的,每个人都有不同的意见,关于何时/何处应该使用这些标签。你们觉得下面的布局和代码怎么样?

  1  <!doctype html>
  2      <head>
  3          <title>Website</title>
  4      </head>
  5  
  6      <body>
  7          <section>
  8              <header>
  9                  <div id="logo"></div>
 10                  <div id="language"></div>
 11              </header>
 12  
 13              <nav>
 14                  <ul>
 15                      <li>menu 1</li>
 16                      <li>menu 2</li>
 17                      <li>menu 3</li>
 18                      <li>menu 4</li>
 19                      <li>menu 5</li>
 20                  </ul>
 21              </nav>
 22  
 23              <div id="main">
 24                  <div id="main-left">
 25                      <article>
 26                          <header><h1>This is a title</h1></header>
 27  
 28                          <p>Lorem ipsum dolor sit amet, consectetur
 29                          adipiscing elit. Quisque semper, leo eget</p>
 30  
 31                          <p>Lorem ipsum dolor sit amet, consectetur
 32                          adipiscing elit. Quisque semper, leo eget</p>
 33  
 34                          <p>Lorem ipsum dolor sit amet, consectetur
 35                          adipiscing elit. Quisque semper, leo eget</p>
 36  
 37                          <p>Lorem ipsum dolor sit amet, consectetur
 38                          adipiscing elit. Quisque semper, leo eget</p>
 39                      </article>
 40                  </div>
 41  
 42                  <div id="main-right">
 43                      <section id="main-right-hot">
 44                          <h2>Hot items</h2>
 45                          <ul>
 46                              <li>Lorem ipsum</li>
 47                              <li>dolor sit</li>
 48                              <li>...</li>
 49                          </ul>
 50                      </section>
 51  
 52                      <section id="main-right-new">
 53                          <h2>New items</h2>
 54                          <ul>
 55                              <li>Lorem ipsum</li>
 56                              <li>dolor sit</li>
 57                              <li>...</li>
 58                          </ul>
 59                      </section>
 60                  </div>
 61              </div>
 62  
 63              <div id="news-items">
 64                  <header><h2>The latest news</h2></header>
 65  
 66                  <div id="item_1">
 67                      <article>
 68                          <header>
 69                              <img src="#" title="titel artikel" />
 70                              <h3>Lorem ipsum .....</h3>
 71                          </header>
 72                          <p>Lorem ipsum dolor sit amet,
 73                          adipiscing elit. Quisque semper, </p>
 74                          <a href="#">Read more</a>
 75                      </article>
 76                  </div>
 77  
 78  
 79                  <div id="item_2">
 80                      <article>
 81                          <header>
 82                              <img src="#" title="titel artikel" />
 83                              <h3>Lorem ipsum .....</h3>
 84                          </header>
 85                          <p>Lorem ipsum dolor sit amet,
 86                          adipiscing elit. Quisque semper, </p>
 87                          <a href="#">Read more</a>
 88                      </article>
 89                  </div>
 90  
 91  
 92                  <div id="item_3">
 93                      <article>
 94                          <header>
 95                              <img src="#" title="titel artikel" />
 96                              <h3>Lorem ipsum .....</h3>
 97                          </header>
 98                          <p>Lorem ipsum dolor sit amet,
 99                          adipiscing elit. Quisque semper, </p>
100                          <a href="#">Read more</a>
101                      </article>
102                  </div>
103              </div>
104  
105              <footer>
106                  <ul>
107                      <li>menu 1</li>
108                      <li>menu 2</li>
109                      <li>menu 3</li>
110                      <li>menu 4</li>
111                      <li>menu 5</li>
112                  </ul>
113              </footer>
114          </section>
115      </body>
116  </html>

第7行。围绕整个网站的部分?还是只有div?

8号线。每个部分都以标题开始?

第23行。这个div对吗?或者这一定是一个部分?

第24行。用div分割左/右列。

行25。文章标签的正确位置?

第26行。你的h1-tag需要放在head -tag里面吗?

行43。内容与主要文章无关,所以我决定这是一个部分,而不是一个题外话。

行44。无头H2

线53。没有标头的节

第63行。Div与所有(不相关的)新闻项目

第64行。带有h2的标头

第65行。嗯,div还是section?或者删除这个div,只使用article标签

第105行。页脚:-)


Section should be used only to wrap a section inside a document (like chapters and similar) With header tag: NO. Header tag represents a wrapper for page header and is not to be confused with H1, H2, etc. Which div? :D Yes From W3C Schools: The tag defines external content. The external content could be a news-article from an external provider, or a text from a web log (blog), or a text from a forum, or any other content from an external source. No, header tag has a different use. H1, H2, etc. represent document titles H1 being the most important

我没有回答其他问题,因为很难猜到你指的是什么。如果还有其他问题,请告诉我。


为什么不使用item_1, item_2等等。文章标签上的id ?是这样的:

<article id="item_1">
...
</article>
<article id="item_2">
...
</article>
...

似乎没有必要添加包装器div。ID值在HTML中没有语义意义,所以我认为这样做是完全有效的——您不是说第一篇文章总是item_1,只是当前页面上下文中的item_1。id不需要具有任何独立于上下文的含义。

另外,至于你在第26行提出的问题,我认为这里不需要<header>标签,我认为你可以省略它,因为它在“main-left”div中是单独的。如果它在文章的主列表中,为了保持一致性,你可能想包括<header>标签。


事实上,当谈到页眉/页脚时,你是非常正确的。以下是关于如何使用主要HTML5标签的一些基本信息(我建议阅读底部链接的完整源代码):

section – Used for grouping together thematically-related content. Sounds like a div element, but it’s not. The div has no semantic meaning. Before replacing all your div’s with section elements, always ask yourself: “Is all of the content related?” aside – Used for tangentially related content. Just because some content appears to the left or right of the main content isn’t enough reason to use the aside element. Ask yourself if the content within the aside can be removed without reducing the meaning of the main content. Pullquotes are an example of tangentially related content. header – There is a crucial difference between the header element and the general accepted usage of header (or masthead). There’s usually only one header or ‘masthead’ in a page. In HTML5 you can have as many as you want. The spec defines it as “a group of introductory or navigational aids”. You can use a header in any section on your site. In fact, you probably should use a header within most of your sections. The spec describes the section element as “a thematic grouping of content, typically with a heading.” nav – Intended for major navigation information. A group of links grouped together isn’t enough reason to use the nav element. Site-wide navigation, on the other hand belongs in a nav element. footer – Sounds like its a description of the position, but its not. Footer elements contain informations about its containing element: who wrote it, copyright, links to related content, etc. Whereas we usually have one footer for an entire document, HTML5 allows us to also have footer within sections. Source: https://clzd.me/html5-section-aside-header-nav-footer-elements-not-as-obvious-as-they-sound/

此外,这里有一个关于文章的描述,在上面的源代码中没有找到:

article -用于指定独立的、自成体系的内容的元素。一篇文章本身就应该有意义。在用文章元素替换所有div元素之前,一定要问问自己:“它是否可能独立于网站的其他部分阅读?”


我认为你不应该在新闻摘要中使用标签(第67、80、93行)。 可以使用section,也可以使用div。

一篇文章需要能够站在自己&仍然有意义或完整。由于它不完整或只是一个摘录,它不可能是一篇文章,它更像是一个章节。

当你点击“阅读更多”的后续页面可以


主要的错误是:你在整个文档中都有“divitis”。为什么呢?

<header>
    <div id="logo"></div>
    <div id="language"></div>
</header>

而不是:

<header role="banner">
    <!-- Not the best -->
    <h1 id="logo"></h1> <!-- or <figure> and <figcaption>, or <h1> and <p>... -->
    <h2 id="language"></h2>

    <!-- Better, if the IDs have not semantic sense -->
    <h1></h1>
    <h2></h2>
</header>

使用CSS层次结构:body > section > header > h1, body > section > header > h2

更多,…第63行:为什么头包装h2??如果在header中没有包含更多的元素,只使用一个h2。请记住,您的结构不是对文档进行风格化,而是构造一个自解释的文档。

将此应用于文档的其余部分; 祝你好运;)


该文档的标记可能如下所示:

<body>
     <header>...</header>
     <nav>...</nav>
     <article>
          <section>
               ...
          </section>
     </article>
     <aside>...</aside>
     <footer>...</footer>
</body>

你可以在这篇文章A List Apart中找到更多信息。


编辑:不幸的是,我必须纠正自己。

请参考https://stackoverflow.com/a/17935666/2488942下面的w3规范链接,其中包括一个示例(与我前面看到的不同)。

但后来… 这里有一篇关于它的好文章,感谢@Fez。

我最初的回答是:

w3规范的结构方式:

4.3.4节 4.3.4.1体元素 4.3.4.2 section元素 4.3.4.3 nav元素 4.3.4.4 article元素 ....

在我看来,这部分比文章的水平更高。如本回答部分所述,将主题相关的内容进行分组。在我看来,一篇文章中的内容无论如何都是与主题相关的,因此,至少对我来说,这也意味着与文章相比,章节组在更高的层次上。

我认为它应该是这样使用的:

section: Chapter 1
    nav: Ch. 1.1
         Ch. 1.2

    article: Ch. 1.1
             some insightful text

    article: Ch. 1.2
             related to 1.1 but different topic

或者对于新闻网站来说:

section: News
    article: This happened today
    article: this happened in England

section: Sports
    article: England - Ukraine 0:0
    article: Italy books tickets to Brazil 2014

我建议你阅读W3 wiki上关于HTML5结构的页面:

<header> Used to contain the header content of a site. <footer> Contains the footer content of a site. <nav> Contains the navigation menu, or other navigation functionality for the page. <article> Contains a standalone piece of content that would make sense if syndicated as an RSS item, for example a news item. <section> Used to either group different articles into different purposes or subjects, or to define the different sections of a single article. <aside> Defines a block of content that is related to the main content around it, but not central to the flow of it.

其中包括一张我在这里清理过的图片:

In code, this looks like so: <body> <header></header> <nav></nav> <section id="sidebar"></section> <section id="content"></section> <aside></aside> <footer></footer> </body> Let's explore some of the HTML5 elements in more detail. <section> The <section> element is for containing distinct different areas of functionality or subjects area, or breaking an article or story up into different sections. So in this case: "sidebar1" contains various useful links that will persist on every page of the site, such as "subscribe to RSS" and "Buy music from store". "main" contains the main content of this page, which is blog posts. On other pages of the site, this content will change. It is a fairly generic element, but still has way more semantic meaning than the plain old <div>. <article> <article> is related to <section>, but is distinctly different. Whereas <section> is for grouping distinct sections of content or functionality, <article> is for containing related individual standalone pieces of content, such as individual blog posts, videos, images or news items. Think of it this way - if you have a number of items of content, each of which would be suitable for reading on their own, and would make sense to syndicate as separate items in an RSS feed, then <article> is suitable for marking them up. In our example, <section id="main"> contains blog entries. Each blog entry would be suitable for syndicating as an item in an RSS feed, and would make sense when read on its own, out of context, therefore <article> is perfect for them: <section id="main"> <article><!-- first blog post --></article> <article><!-- second blog post --></article> <article><!-- third blog post --></article> </section> Simple huh? Be aware though that you can also nest sections inside articles, where it makes sense to do so. For example, if each one of these blog posts has a consistent structure of distinct sections, then you could put sections inside your articles as well. It could look something like this: <article> <section id="introduction"></section> <section id="content"></section> <section id="summary"></section> </article> <header> and <footer> as we already mentioned above, the purpose of the <header> and <footer> elements is to wrap header and footer content, respectively. In our particular example the <header> element contains a logo image, and the <footer> element contains a copyright notice, but you could add more elaborate content if you wished. Also note that you can have more than one header and footer on each page - as well as the top level header and footer we have just discussed, you could also have a <header> and <footer> element nested inside each <article>, in which case they would just apply to that particular article. Adding to our above example: <article> <header></header> <section id="introduction"></section> <section id="content"></section> <section id="summary"></section> <footer></footer> </article> <nav> The <nav> element is for marking up the navigation links or other constructs (eg a search form) that will take you to different pages of the current site, or different areas of the current page. Other links, such as sponsored links, do not count. You can of course include headings and other structuring elements inside the <nav>, but it's not compulsory. <aside> you may have noticed that we used an <aside> element to markup the 2nd sidebar: the one containing latest gigs and contact details. This is perfectly appropriate, as <aside> is for marking up pieces of information that are related to the main flow, but don't fit in to it directly. And the main content in this case is all about the band! Other good choices for an <aside> would be information about the author of the blog post(s), a band biography, or a band discography with links to buy their albums. Where does that leave <div>? So, with all these great new elements to use on our pages, the days of the humble <div> are numbered, surely? NO. In fact, the <div> still has a perfectly valid use. You should use it when there is no other more suitable element available for grouping an area of content, which will often be when you are purely using an element to group content together for styling/visual purposes. A common example is using a <div> to wrap all of the content on the page, and then using CSS to centre all the content in the browser window, or apply a specific background image to the whole content.


这是我工作的例子


”第23行。这个div对吗?或者这一定是一个部分?”

都不是——有一个主标记用于此目的,它每页只允许使用一次,并且应该用作主要内容的包装器(与侧边栏或站点范围的标题相比)。

<main>
    <!-- The main content -->
</main>

http://www.w3.org/html/wg/drafts/html/master/grouping-content.html#the-main-element


不幸的是,到目前为止给出的答案(包括投票最多的)要么是“只是”常识,要么是完全错误的,要么是令人困惑的。一个关键的关键词都没有出现!

我写了3个答案:

这个解释(从这里开始)。 具体回答OP的问题。 改进了详细的HTML。

要理解这里讨论的html元素的作用,您必须知道其中一些元素是文档的一部分。每个html文档都可以根据HTML5大纲算法进行分段,以便创建大纲-或-目录(TOC)。大纲通常是不可见的(现在),但作者应该以这样一种方式使用html,从而使大纲反映他们的意图。

你可以只用这些元素创建section:

创建(显式)子节 < >部分部分 < >条部分 <导航>部分 除了< >部分 创建兄弟节或子节 带有<h*>2的未指定类型的section(并非所有都这样做,请参见下面) 关闭当前显式(子)节

section可以命名为:

<h*>创建的section自己命名 <section|article|nav|aside> section将由第一个<h*>命名(如果有的话) 这些<h*>是唯一不自己创建节的

关于分段还有一件事:以下上下文(即元素)创建了“轮廓边界”。它们包含的任何部分对它们来说都是私有的:

文档本身带有<body> 表<td>的单元格 < blockquote > <details>, <dialog>, <fieldset>, <figure> 没有其他的

example HTML <body> <h3>if you want siblings at top level...</h3> <h3>...you have to use untyped sections with <h*>...</h3> <article> <h1>...as any other section will descent</h1> </article> <nav> <ul> <li><a href=...>...</a></li> </ul> </nav> </body> has this outline 1. if you want siblings at top level... 2. ...you have to use untyped sections with <h*>... 2.1. ...as any other section will descent 2.2. (unnamed navigation)

这就提出了两个问题:

<article>和<section>之间有什么区别?

both can: be nested in each other take a different notion in a different context or nesting level <section>s are like book chapters they usually have siblings (maybe in a different document?) together they have something in common, like chapters in a book one author, one <article>, at least on the lowest level standard example: a single blog comment a blog entry itself is also a good example a blog entry <article> and its comment <article>s could also be wrapped with an <article> it’s some "complete" thing, not a part in a series of similar <section>s in an <article> are like chapters in a book <article>s in a <section> are like poems in a volume (within a series)

<页眉>,<页脚>和<主>适合吗?

they have zero influence on sectioning <header> and <footer> they allow you to mark zones of each and every section even within a section you can have them several times to differentiate from the main part in this section limited only by the author’s taste <header> may mark the title/name of this section may contain a logo for this section has no need to be at the top or upper part of the section <footer> may mark the credits/author of this section can come at the top of the section can even be above a <header> <main> only allowed once marks the main part of the top level section (i.e. the document, <body> that is) subsections themselves have no markup for their main part <main> can even “hide” in some subsections of the document, while document’s <header> and <footer> can’t (that markup would mark header/footer of that subsection then) but it is not allowed in <article> sections3 helps to distinguish “the real thing” from document’s non-header, non-footer, non-main content, if that makes sense in your case...


1 .想到的是:提纲、算法、隐式分段 我用<h*>来表示<h1>, <h2>, <h3>, <h4>, <h5>和<h6> 在<aside>或<nav>中也不允许<main>,但这并不奇怪。-在效果上:<主>只能隐藏在(嵌套)下降<section>部分或出现在顶层,即<body>


根据我在“主要”回答中的解释,所讨论的文件应该根据大纲标记出来。

在以下两个表中,我展示了:

原始HTML及其大纲 一个可能的大纲和HTML来做这个

original html (shortened) <body> <section> <header> <div id=logo></div> <div id=language></div> </header> <nav> ... </nav> <div id=main> <div id=main-left> <article> <header> <h1>The real thing</h1> </header> </article> </div> <div id=main-right> <section id=main-right-hot> <h2>Hot items</h2> </section> <section id=main-right-new> <h2>New items</h2> </section> </div> </div> <div id=news-items> <header> <h2>The latest news</h2> </header> <div id=item_1> <article> <header> <h3>...</h3> </header> <a>read more</a> </article> </div> <div id=item_2> <article> <header> <h3>...</h3> </header> <a>read more</a> </article> </div> <div id=item_3> <article> <header> <h3>...</h3> </header> <a>read more</a> </article> </div> </div> <footer> <ul><li>...</ul> </footer> </section> original html relevant for outline <body> <section> // logo and language <nav> ... </nav> <article> <h1>The real thing</h1> </article> <section> <h2>Hot items</h2> </section> <section> <h2>New items</h2> </section> <h2>The latest news</h2> <article> <h3>...</h3> </article> <article> <h3>...</h3> </article> <article> <h3>...</h3> </article> // footer links </section> resulting outline 1. (untitled document) 1.1. (untitled section) 1.1.1. (untitled navigation) 1.1.2. The real thing (h1) 1.1.3. Hot items (h2) 1.1.4. New items (h2) 1.1.5. The latest news (h2) 1.1.6. news item_1 (h3) 1.1.7. news item_2 (h3) 1.1.8. news item_3 (h3) The outline of the original is definitively not what was intended.

下表显示了我对改进版本的建议。我使用以下标记:

<删除> < NEW_OR_CHANGED_ELEMENT > <元素MOVED_ATTRIBUTE = 1 >

possible intended outline 1. (main) 1.1. The real thing 1.2. (hot&new) 1.2.1. Hot items 1.2.2. New items 2. The latest news 2.1. news item_1 2.2. news item_2 2.3. news item_3 modified html <body>  <section> <header> <ASIDE> <div id=logo></div> <div id=language></div> </ASIDE> </header> <nav> ... </nav> <ARTICLE id=main>   <div id=main-left> <article ID=main-left> <header> <h1>The real thing</h1> </header> </article>   </div> <ARTICLE id=main-right> <ARTICLE id=main-right-hot> <h2>Hot items</h2> </ARTICLE> <ARTICLE id=main-right-new> <h2>New items</h2> </ARTICLE> </ARTICLE> </ARTICE> <ARTICLE id=news-items> <header> <h2>The latest news</h2> </header>   <div id=item_1> <article ID=item_1> <header> <h3>...</h3> </header> <a>read more</a> </article>   </div>   <div id=item_2> <article ID=item_2> <header> <h3>...</h3> </header> <a>read more</a> </article>   </div>   <div id=item_3> <article ID=item_3> <header> <h3>...</h3> </header> <a>read more</a> </article>   </div> </ARTICLE> <footer> <NAV> <ul><li>...</ul> </NAV> </footer>  </section>`` resulting outline 1. (untitled document) 1.1. (untitled logo and lang) 1.2. (untitled navigation) 1.3. (untitled main) 1.3.1 The real thing 1.3.2. (untitled hot&new) 1.3.2.1. Hot items 1.3.2.2. New items 1.4. The latest news 1.4.1. news item_1 1.4.2. news item_2 1.4.3. news item_3 1.5. (untitled footer nav) The modified HTML reflects the intended outline way better than the original.


[我的“主要答案”中的解释]

第7行。围绕整个网站的部分?还是只有div?

既不。样式:使用<body>,它已经在那里了。对于section /semantics:正如我的示例HTML中所详细描述的那样,它的效果与实用性相反。对已经包装的内容使用额外的包装器并没有改善,只会产生噪音。

8号线。每个部分都以标题开始?

不,在哪里放置通常被总结为“标题”的内容是作者的选择。如果该标题内容无需额外标记即可清晰识别,则可以完全保留没有<header>的内容。这也是作者的选择。

第23行。这个div对吗?或者这一定是一个部分?

<div>可能是错误的。这取决于你的意图:是否只是为了设计样式,它可能是正确的。如果是出于语义目的,那就错了:它应该是<article>,而不是像我的另一个答案所示的那样。<article>也是正确的,如果它同时用于样式化和分段。

<section>在这里看起来错误,因为在这个之前或之后没有类似的部分,就像一本书中的章节一样。(这是<section>的目的)。

第24行。用div分割左/右列。

不。为什么?

行25。文章标签的正确位置?

是的,有道理。

第26行。你的h1-tag需要放在head -tag里面吗?

不。单独的<h*>元素可能永远不需要放在<header>中(但如果你想的话,它可以),因为它已经很清楚地表明它是即将到来的内容的标题。例如,如果<header>还包含一个标语行(用<p>标记),这是有意义的。

行43。内容与主要文章无关,所以我决定这是一个部分,而不是一个题外话。

<aside>必须与周围的内容“切线相关”,这是一种误解。关键是:如果内容只是“切线相关”或根本不相关,则使用<aside> !

尽管如此,除了<aside>是一个不错的选择之外,<article>可能仍然比<section>更好,因为“热门项目”和“新项目”不应该像一本书中的两个章节一样阅读。你完全可以选择其中一个,而不是另一个就像对一个东西的另一种排序,而不是一个整体的两个部分。

行44。无头H2

是伟大的。

线53。没有标头的节

好吧,这里没有<header>,但是<h2>-heading清楚地显示了这部分中的哪个部分是头文件。

第63行。Div与所有(不相关的)新闻项目

<article>或<aside>可能更好。

第64行。带有h2的标头

讨论了。

第65行。嗯,div还是section?或者删除这个div,只使用article标签

完全正确!删除<div>.;

第105行。页脚:-)

很合理。


让我们以Facebook留言板为例

“墙”带有“部分”标签,表示它与页面是分开的。 所有的帖子都在“文章”标签下。 然后我们有一个单独的帖子,它在“section”标签下。 我们有标题“X用户张贴这个”。为此,我们可以使用“heading”标签。 然后在帖子内部我们有三个部分。一个是图片/文本,喜欢-分享-评论按钮和评论框。 对于评论框,我们可以使用article标签。


根据Nathan的回答,这非常有意义(对于红色和橙色部分,也许你可以分别使用div和/或页眉和页脚):


<body itemscope itemtype="http://schema.org/Blog">
 <header>
  <h1>Wake up sheeple!</h1>
  <p><a href="news.html">News</a> -
     <a href="blog.html">Blog</a> -
     <a href="forums.html">Forums</a></p>
  <p>Last Modified: <span itemprop="dateModified">2009-04-01</span></p>
  <nav>
   <h1>Navigation</h1>
   <ul>
    <li><a href="articles.html">Index of all articles</a></li>
    <li><a href="today.html">Things sheeple need to wake up for today</a></li>
    <li><a href="successes.html">Sheeple we have managed to wake</a></li>
   </ul>
  </nav>
 </header>
 <main>
  <article itemprop="blogPosts" itemscope itemtype="http://schema.org/BlogPosting">
   <header>
    <h1 itemprop="headline">My Day at the Beach</h1>
   </header>
   <div itemprop="articleBody">
    <p>Today I went to the beach and had a lot of fun.</p>
    ...more content...
   </div>
   <footer>
    <p>Posted <time itemprop="datePublished" datetime="2009-10-10">Thursday</time>.</p>
   </footer>
  </article>
  ...more blog posts...
 </main>
 <footer>
  <p>Copyright ©
   <span itemprop="copyrightYear">2010</span>
   <span itemprop="copyrightHolder">The Example Company</span>
  </p>
  <p><a href="about.html">About</a> -
     <a href="policy.html">Privacy Policy</a> -
     <a href="contact.html">Contact Us</a></p>
 </footer>
</body>

参考:nav元素