本文根據原文對譯文做了簡單的一些修改,增加了一些可能引起誤解的英文原文。
人們在標簽使用中最常見到的錯誤之一就是隨意將Html5的<section>等價於<div>——具體地說,就是直接用作替代品(用於樣式)。在XHTML或者Html4中,我們常看到這樣的代碼:
<!-- Html 4-style code --><div id="wrapper"> <div id="header"> <h1>My super duper page</h1> <!-- Header content --> </div> <div id="main"> <!-- Page content --> </div> <div id="secondary"> <!-- Secondary content --> </div> <div id="footer"> <!-- Footer content --> </div></div>
而現在在Html5 中,會是這樣:
<!-- 請不要復制這些代碼!這是錯誤的!--><section id="wrapper"> <header> <h1>My super duper page</h1> <!-- Header content --> </header> <section id="main"> <!-- Page content --> </section> <section id="secondary"> <!-- Secondary content --> </section> <footer> <!-- Footer content --> </footer></section>
這樣使用並不正確:<section>並不是樣式容器[wrapper]。<section>元素表示的是內容中用來幫助構建文檔概要的語義部分。它應該包含一個頭部[heading]。如果你想找一個用作頁面容器的元素(就像HTML或者XHtml的風格),那麼考慮如Kroc Camen所說,直接把樣式寫到body元素上吧。如果你仍然需要額外的樣式容器,還是繼續使用div吧。
基於上述思想,下面才是正確的使用Html5和一些ARIA roles特性的例子(注意,根據你自己的設計,你也可能需要加入div)
<body> <header> <h1>My super duper page</h1> <!-- Header content --> </header> <div role="main"> <!-- Page content --> </div> <aside role="complementary"> <!-- Secondary content --> </aside> <footer> <!-- Footer content --> </footer></body>
如果你還是無法確定使用哪種元素,那麼我建議你參考Html5 sectioning content element flowchart。
寫不需要寫的標簽當然是毫無意義的。不幸的是,我經常看到<header>和<hgroup>被無意義的濫用。你可以閱讀一下關於<header>和<hgroup>元素的兩篇文章做一個詳細的了解,其中內容簡單總結如下:
由於header可以在一個文檔中使用多次,可能使得這樣代碼風格受到歡迎:
<!-- 請不要復制這段代碼!此處並不需要header --><article> <header> <h1>My best blog post</h1> </header> <!-- Article content --></article>
如果你的<header>元素只包含一個頭部元素,那麼丟棄<header>元素吧。既然<article> 元素已經保證了頭部會出現在文檔概要中,而<header>又不能包含多個元素(如上文所定義的),那麼為什麼要寫多余的代碼。簡單點寫成這樣就行了:
<article> <h1>My best blog post</h1> <!-- Article content --></article>
在headers這個主題上,我也經常看到hgroup的錯誤使用。有時候不應該同時使用<hgroup>和<header>:
第一個問題一般是這樣的:
<!-- 請不要復制這段代碼!此處不需要hgroup --><header> <hgroup> <h1>My best blog post</h1> </hgroup> <p>by Rich Clark</p></header>
此例中,直接拿掉hgroup,讓heading 裸奔吧。
<header> <h1>My best blog post</h1> <p>by Rich Clark</p></header>
第二個問題是另一個不必要的例子:
<!-- 請不要復制這段代碼!此處不需要header --><header> <hgroup> <h1>My company</h1> <h2>Established 1893</h2> </hgroup></header>
如果<header>唯一的子元素是<hgroup>,那還要<header>干神馬?如果<header>中沒有其他的元素(比如多個<hgroup>),還是直接拿掉<header>吧。
<hgroup> <h1>My company</h1> <h2>Established 1893</h2></hgroup>
關於
更多的例子和解釋,請參閱相關文章。隨著Html5引入了30個新元素(截止到原文發布時),我們在構造語義化和結構化的標簽時的選擇也變得有些不慎重。也就是說,我們不應該濫用超語義化的元素。不幸的是,nav就是這樣一個被濫用的例子。nav元素的規范描述如下:
The nav element represents a section of a page that links to other pages or to parts within the page: a section with navigation links.
Not all groups of links on a page need to be in a nav element — the element is primarily intended for sections that consist of major navigation blocks. In particular, it is common for footers to have a short list of links to various pages of a site, such as the terms of service, the home page, and a copyright page. The footer element alone is sufficIEnt for such cases; while a nav element can be used in such cases, it is usually unnecessary.
User agents (such as screen readers) that are targeted at users who can benefit from navigation information being omitted in the initial rendering, or who can benefit from navigation information being immediately available, can use this element as a way to determine what content on the page to initially skip or provide on request (or both).
nav元素表示頁面中鏈接到其他頁面或者本頁面其他部分的區塊;包含導航連接的區塊。
注意:不是所有頁面上的鏈接都需要放在nav元素中——這個元素本意是用作主要的導航區塊。舉個具體的例子,在footer中經常會有眾多的鏈接,比如服務條款,主頁,版權聲明頁等等。footer元素自身已經足以應付這些情況,雖然nav元素也可以用在這裡,但通常我們認為是不必要的。
WHATWG Html spec
關鍵的詞語是“主要的”導航。當然我們可以互相噴上一整天什麼叫做“主要的”。而我個人是這樣定義的:
既然並沒有絕對的對錯,所以根據一個非正式投票以及我自己的解釋,以下的情況,不管你放不放,我反正不放在<nav>中:
如果你不確定是否要將一系列的鏈接放在<nav>中,問你自己:“它是主要的導航嗎?”為了幫助你回答這個問題,考慮以下首要原則:
如果這些問題的答案是“不”,那就跟<nav>鞠個躬,然後獨自離開吧。
<figure>以及<figcaption>的正確使用,確實是難以駕馭。讓我們來看看一些常見的錯誤。
我曾告訴各位不要寫不必要的代碼。這個錯誤也是同樣的道理。我看到很多網站把所有的圖片都寫作figure。看在圖片的份上請不要給它加額外的標簽了。你只是讓你自己蛋疼,而並不能使你的頁面內容更清晰。
規范中將<figure>描述為“一些流動的內容,有時候會有包含於自身的標題說明。一般在文檔流中會作為獨立的單元引用。”這正是figure的美妙之處——它可以從主內容頁移動到sidebar中,而不影響文檔流。這些問題也包含在之前提到的Html5 element flowchart中。
如果純粹只是為了呈現的圖,也不在文檔其他地方引用,那就絕對不是