[HTML] Semantic HTML 語意化標籤
HTML vs. HTML5
在 HTML5 以前的 HTML 著重在功能方面,例如 <div> 標籤是一個用來放其他內容的區塊、 <p> 標籤是一個用來放文字的段落。過去往往會再給予 class 或 id 來進一步說明或區別這類無語意(non-semantic)的標籤,像是: <div class="nav"> 。
HTML5 新增了語意化標籤(Semantic Elements),讓我們可以使用更合乎語意的標籤(tags)來開發,比方說在 HTML5 之前通通只能用 <div>,但現在可以使用 <header> 標籤來表示頁首、<footer> 標籤來表示頁尾,用 <nav> 標籤來標示網頁的導航區塊。
- 非語意化標籤 non-semantic HTML,像是
<div>、<span>、<p>... - 語意化標籤 semantic HTML,像是
<header>、<footer>、<section>、<nav>、<h1>~<h6>...
使用語意化標籤的優點
提升網站可訪問性(accessibility)
提升各種設備(例如電子閱讀器、盲人閱讀器⋯)對於網站的理解程度,讓不同裝置都能解析網站內容,讓所有讀者都能公平地使用網頁、接收到正確的資訊,是身為一個開發者的責任。
關於「 無障礙網頁」的介紹可以參考:何謂無障礙網頁? - 學習該如何開發 Web | MDN (mozilla.org)。
對 SEO 有幫助
使用符合語意的標籤能讓搜尋引擎的爬蟲 (search engine crawlers) 更瞭解網站的架構與內容,讓搜尋引擎更容易「看懂」你的網站,是影響 SEO 十分重要的因素之一。先前提到的「提升網站可訪問性」來確保每個人都能公平地獲取資訊,同樣也能增進 SEO。
提升程式碼的可讀性
使用語意化標籤來開發網站可以幫助開發者之間更容易理解網頁架構、減少理解成本與差異化。比如說統一使用 <button> 標籤來製作按鈕,只要看到這個標籤無須說明便會知道這是一個按鈕、具有可以點擊的特性及其他 <button> 標籤的原生功能。
HTML 語意化標籤
HTML 語意化標籤根據用途可以分成兩個類別:
- HTML 語意結構標籤 HTML Semantic Tags for Structure
- HTML 語意文字標籤 HTML Semantic Tags for Text
語意結構標籤 semantic HTML tags for structure
用來讓網頁結構(layout)更為明確,將網頁分成像是標題、導覽、頁尾等區塊。
<header> 頁首標籤
用於代表一個網頁的前言、說明或是相關連結,讓使用者知道網頁接下來的內容。
- 位於
<body>內可以代表該網頁的頁首,通常用來放置網站的 logo 與標題;位於<article>或<section>內時,則代表文章或區塊內的首要區塊 <header>標籤通常包含:- 至少一個標題標籤(heading tag,
<h1>-<h6>) - 網站 logo 或是 icon
- 作者資訊
- 至少一個標題標籤(heading tag,
- 一個網頁上可以有數個
<header>標籤,但<header>不應被包含在<footer>、<address>或是其他<header>標籤中
<article>
<header>
<h1>Things you need to know about semantic HTML</h1>
<p>by Ya-Chu Hsieh</p>
</header>
</article>
<nav> 導覽列
用來擺放網頁選單的導覽區塊,幫助使用者探索網頁內容。
- 可以被放在
<header>之中,代表網站的主選單 - 一個網站也可能有數個
<nav>標籤,像是主選單、文章選單、頁尾選單等 - 並非所有連結都要使用
<nav>,只要用於網頁中的主要導航區塊即可
<nav>
<ul>
<li><a href="index.html">Home</a></li>
<li><a href="about.html">About</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</nav>
<main> 主要區塊
代表該頁面的主要內容,用以展現該頁面的獨特性。
- 每個頁面只能有一個
<main>標籤 - 不應被放在
<nav>、<article>、<aside>、<footer>、<header>內
<main>
<h1>我是文章標題</h1>
<article>
<p>床前明月光,疑似地上霜,舉頭望明月,低頭思故鄉。</p>
</article>
</main>
<article> 區塊
Independent content:一個個體具有獨立性必須要是當周圍的元素移走之後,其內文不受影響,無需受制於上下文,依舊能將原意表達出來。
可以獨立存在於該網站或應用程式之外、具有完整內容、可重複使用的區塊。
像是部落格文章,任一篇獨立出來都能夠有其獨立性與完整性,不受限於網站載體、即使重複放到其他網站中也成立。但也不必受限於一定要是「一篇文章」,也有可能是一則留言、一個論壇中的回覆、氣象區塊中的一則當日天氣。
一個頁面可能有多個 <article> 標籤,例如文章列表頁面使用 <article> 包裝每則文章:
<article>
<h2>News 1</h2>
</article>
<article>
<h2>News 2</h2>
</article>
<section> 區塊
一個具有主題性的區塊,用來對內容進行分塊。比方說 tab 列表中不同的 tab 對話窗(tab dialog box)、對文章進行分段(章節),或是一個網站主頁可能會被拆分成代表說明、最新消息、聯繫資訊⋯等不同 section。
- 通常會搭配標題標籤來描述區塊的作用
- 如果只是單純進行排版建議使用
<div>,不要把<section>當作<div>來使用 <section>的內容對外層的其他內容通常仍具有一定的相依性,<article>則通常具有更高的獨立性、完整性
另外也需要注意,取決於內容的不同,可能是 <article> 中包含許多 <section>,也有可能是 <section> 中有很多 <article> 。
<aside> 側欄
與當前主要內容無關的區塊,用來放置額外的附加資訊,像是側邊欄、廣告、其他連結、推薦文章。
<footer> 頁尾
用來表示網頁的頁尾,通常位在網頁的最下方。用來放置作者、聯絡資訊、版權宣告、網站地圖(site map)等資訊。