
無障礙設計 (A11y):語意結構的實務應用
語意化 HTML 與無障礙設計的重要性
什麼是語意化 HTML? 簡單來說,語意化 HTML 是指使用能表達內容意義與角色的標籤來構建網頁,而非僅僅使用沒有語意的容器(例如大量的<div>)。透過語意化標籤,我們能清楚地描述每個區塊在頁面中的用途,例如哪裡是導航、哪裡是主要內容、哪裡是側邊資訊等。這種做法讓程式碼本身就帶有說明性,閱讀 HTML 結構時就能大致瞭解頁面分區。
為什麼語意化對無障礙設計很重要? 對於視障或其他需要輔助工具的使用者來說,語意標籤提供了頁面地標 (landmark) 和結構線索。螢幕閱讀器等輔助技術依賴這些語意資訊來決定如何朗讀網頁、如何讓使用者快速跳轉到所需區域。例如,有了正確的語意標籤,螢幕閱讀器可以提供「跳到主內容」或「跳到導覽列」這類功能,協助使用者更迅速地導航網頁。如果我們只是用<div>堆砌頁面結構,螢幕閱讀器無從得知各區塊的意義,使用者可能得從頭聽到尾,無法有效跳轉,使用體驗大打折扣。
除了無障礙的考量,語意化 HTML 還有額外的優點:可維護性與 SEO。語意明確的標籤讓開發者日後維護程式碼時更容易理解結構;搜尋引擎爬蟲也更容易理解內容的層次與重點(例如辨識主要內容區域),提升網站在搜尋結果中的表現。然而,本篇主要聚焦在無障礙和使用者體驗的改善上。
總之,養成使用語意標籤的習慣,能讓我們寫出對使用者友善、對開發者友善的 HTML。接下來,我們將介紹幾個最常用的語意結構標籤,說明它們的用途以及如何在實作中應用。
常見語意結構標籤及其應用
以下是 HTML5 提供的幾個常見語意結構標籤,每一種都對應頁面中的特定區域或角色。我們將逐一介紹它們的作用、使用時機,以及對應的簡單程式碼範例,說明如何在純 HTML 中使用這些標籤來構建無障礙的語意結構。
<header>:頁首區域
<header> 是什麼: <header>元素代表頁面或區塊的頁首內容,通常包含該網站或章節的標題、導覽工具或標誌等。換句話說,<header>用於呈現介紹性內容或提供導覽輔助。
何時使用: 在網頁的頂部可以使用一個全站共用的<header>作為網站的頁首,同時您也可以在文章、區段等內容單元內部使用<header>作該單元的頭部。很多人誤以為整個頁面只能有一個<header>,其實不然——您可以有多個 <header>,但須分別位於不同的內容範圍中(例如頁面本身一個<header>,每篇文章各自的<header>等)。<header>描述的是「此區內容的開場或標題」,而不是「固定在頁面頂端的那一條」。也因此,<header>可以出現在頁面或區塊的任意位置,只要它在語意上作為該區塊的引言或標頭。
無障礙助益: 當<header>直接是<body>的子元素時,它通常會被螢幕閱讀器視為「橫幅 (banner)」地標,代表全站頁首區域。這有助於使用者快速辨識「這裡是網站的開頭部分」。如果<header>是在文章或區段內,螢幕閱讀器則會將其視為該文章的標頭內容。總之,使用<header>能讓輔助技術更清楚區分出不同區塊的標題部分,而不需依賴開發者額外說明。
範例: 以下是網站全域頁首與文章內頁首的兩種<header>用法範例:
<!-- 網站全域頁首 -->
<header>
<h1>我的作品集</h1>
<nav>
<ul>
<li><a href="#about">關於我</a></li>
<li><a href="#projects">專案列表</a></li>
<li><a href="#contact">聯絡方式</a></li>
</ul>
</nav>
</header>
<!-- 文章內的頁首 -->
<article>
<header>
<h2>無障礙網頁設計的重要性</h2>
<p>發佈日期:<time datetime="2025-10-27">2025 年 10 月 27 日</time></p>
</header>
<p>這是一篇探討無障礙設計的文章內容......</p>
</article>
上述第一段程式碼定義了網站的整體頁首,包含網站名稱(<h1>)和主選單(<nav>,內含清單連結)。第二段程式碼則顯示了一篇文章內部的<header>,包含文章標題(<h2>)和發佈日期。透過語意標籤,開發者與輔助工具都能清楚理解這些區塊的用途。
注意: 可以為每個頁面或每個主要區塊定義自己的<header>,但要清楚區分用途。例如,頁面的總頁首一個,文章內各一個<header>。這些<header>元素在不同範圍中各司其職,不會互相衝突。
<nav>:導覽區域
<nav> 是什麼: <nav>元素表示導航區塊,通常包含一組用於導航的連結,例如網站主要選單、目錄、目標段落目錄或麵包屑導覽等。
何時使用: 當您有一組對使用者而言屬於主要導覽性質的連結時,就應將它們包裹在<nav>中。例如,網站頂部的主選單、側邊欄的目錄、頁面內特定章節的跳轉連結,都適合使用<nav>來標示。請注意,不要把所有的連結清單都一律用 <nav> 包起來——僅將真正屬於導航性質的主要連結群組使用<nav>。像是頁尾的一小排社群媒體連結、文章內容中偶爾出現的相關連結,一般來說就不需要特地使用<nav>標籤。
無障礙助益: <nav>在輔助技術中被視為「導航 (navigation)」地標。螢幕閱讀器會提供快速跳轉到導航區的選項,使使用者不用逐行聽完整頁就能直接找到主選單。透過將主要導覽放入<nav>,我們明確告訴了輔助技術「這一塊是導航連結集合」。此外,對 sighted users 來說這沒有視覺上的改變,但對程式碼閱讀者(開發者)和搜尋引擎都是很大的提升:他們都能更輕易地抓到網站架構的脈絡。
範例: 以下是一個典型的網站主選單,用<nav>包裹一組連結清單:
<nav>
<ul>
<li><a href="/">首頁</a></li>
<li><a href="/blog">部落格</a></li>
<li><a href="/contact">聯絡我們</a></li>
</ul>
</nav>
這段程式碼將三個連結組成的清單放在<nav>內,語意上表示這是一個導覽菜單。螢幕閱讀器遇到<nav>時,會提醒使用者這裡是導航區域,使用者可以選擇跳過或進入瀏覽這些連結。
最佳實踐: 請保留 <nav> 給主要的導覽區塊使用。不是每一組連結列表都需要<nav>包裹。如果只是一般的超連結群組(例如文章內的內文連結串),用<div>或語意上更適合的標籤(如列表 <ul> 本身)即可;將<nav>運用在全站主選單或關鍵的頁面導覽上,才能真正發揮它的作用而不讓語意結構雜亂。
<main>:主要內容區域
<main> 是什麼: <main>元素代表網頁的主要內容區域。這個區域涵蓋了頁面主角般的內容,即與頁面核心主題最相關的部分。通常一個頁面中,除了頁首、導覽、側邊欄、頁尾等重複性或附屬性內容外,剩下的獨一無二內容都應該置於<main>之中。
何時使用: 幾乎每個頁面都應該有一個<main>,用來包裹主要內容。重點在於數量:一個頁面建議只使用一個 <main>。將頁面上最重要、最獨特的內容放進<main>,而不應該有多個平級的<main>在同頁出現。如果您發現需要多於一個<main>,通常表示您可能誤解了<main>的用途 —— 回顧一下:它應當是全頁核心的容器。一頁一個 main,清楚又明確。
無障礙助益: 螢幕閱讀器允許使用者直接跳到主要內容,這通常透過<main>來實現。許多網站一打開會提供「跳到主內容」的隱形連結(讓鍵盤使用者可直接略過繁瑣導覽),這個功能通常是透過跳轉到<main>元素實現的。如果沒有<main>,使用者就很難快速跳過導航或其他重複部分。對輔助技術而言,<main>會被識別為「主內容 (main)」地標,使用者可快速定位並開始閱讀這個區域的內容。此外,<main>內的內容對搜尋引擎來說也被視為重點,因為它們代表頁面的主要資訊。
範例: 下面範例示範一個基礎的頁面結構,包含<header>、<nav>、<main>和<footer>等元素,說明<main>在其中的位置:
<body>
<header>網站標頭</header>
<nav>網站導覽選單</nav>
<main>
<!-- 主內容開始 -->
<h1>歡迎來到我的網站</h1>
<p>這裡是主要內容...</p>
<!-- 主內容結束 -->
</main>
<aside>側邊資訊</aside>
<footer>網站頁尾資訊</footer>
</body>
在以上範例中,<main>元素包含了頁面的核心內容(歡迎標題和一段文字)。使用螢幕閱讀器時,使用者可以一鍵跳到<main>開始的地方,立即聽取主要內容,而無需先聽完整個導覽菜單。開發者閱讀這段 HTML 也能馬上看出主內容在哪裡。
重要: 請記住每個頁面只能有一個<main>。所有與頁面核心主題直接相關的內容都應置於這唯一的<main>中。頁首、導覽、側欄、頁尾等屬於輔助性內容的部分,則放在<main>外部。
<article>:文章 (獨立內容) 區塊
<article> 是什麼: <article>元素代表一段獨立的可自行成篇的內容,例如一篇文章、一則留言、一項新聞稿、一個論壇帖子等。如果將這段內容從網頁抽離出來單獨提供,依然有意義,那通常就適合用<article>來標示。
何時使用: 當您的頁面包含多個可獨立理解的內容片段時(例如部落格首頁列出多篇文章,每篇文章內容獨立;或一個頁面上有多個產品介紹卡片),請使用<article>將每個片段包起來。具體例子包括:博客文章正文、使用者評論區的一則評論、新聞網站上一條新聞、一組商品清單中的單個商品詳細資訊等。如果內容有自己的標題、作者、發佈日期,且可以作為一個完整單元被引用或轉載,那幾乎可以肯定它應該放在<article>中。
容易混淆的點: 開發者常問「<article>和<section>差別是什麼?」 兩者在結構上類似,都可承載區塊內容,但目的不同:<article>強調內容的獨立性,可單獨抽出;<section>強調內容的主題分組,在所在頁面上不可或缺但脫離頁面上下文可能失去部分意義。判斷的經驗法則是:這段內容能不能獨立存在? 如果能獨立發佈或分享(例如RSS提要中的單篇文章),那就用<article>。
無障礙助益: <article>通常會帶有自己的標題(例如內含<h2>以上的標題)及段落,螢幕閱讀器可將其視為獨立內容區。有的螢幕閱讀器在進入<article>時會朗讀「文章,標題為...」來提示使用者,表示這是一個獨立文章區塊。這對使用者來說有助於理解內容邏輯:在主要內容區中,有多篇文章時,每篇文章的範圍是清楚劃定的,他們可以選擇跳到下一篇文章或在兩篇文章間導航。
範例: 以下範例展示一個主內容區<main>中包含了兩個<article>,各自代表一篇文章:
<main>
<!-- 第一篇文章 -->
<article>
<header>
<h2>理解語意化 HTML 的重要性</h2>
<p>作者:小明 | 發佈日期:2025 年 10 月 27 日</p>
</header>
<p>這篇文章討論了為什麼在開發中使用語意化的 HTML 對無障礙和維護性都有幫助...</p>
<footer>
<p>標籤:HTML, 無障礙, 前端開發</p>
</footer>
</article>
<!-- 第二篇文章 -->
<article>
<header>
<h2>CSS Flexbox 指南</h2>
<p>作者:小王 | 發佈日期:2025 年 10 月 20 日</p>
</header>
<p>本文提供 CSS Flexbox 的基礎教學...</p>
<!-- 這篇文章沒有 footer 也可以 -->
</article>
</main>
在這個例子中,我們在<main>裡放了兩個<article>,模擬一個列出多篇文章的情境。每個<article>都有自己的<header>(標題和作者/日期等資訊),以及文章內容段落。第一篇文章還示範了一個<footer>,裡面可能放一些文章相關的附屬資訊(例如標籤、分享連結)。使用語意標籤後,螢幕閱讀器可以識別出這裡有兩篇獨立文章,在朗讀時使用者可以清楚地感知到第一篇文章結束、第二篇文章開始。
<section>:區段區塊
<section> 是什麼: <section>元素表示主題相近的一個內容區段,通常會有自己的標題。它用來將頁面內容依照主題或章節分組。例如,一篇長文章可以用<section>區分章節,一個單頁應用可以用<section>區隔出數個邏輯區塊(例如「關於我們」「產品特色」「聯絡我們」各一個 section)。
何時使用: 當一群內容在主題上相關且形成一個獨立的小節,而您希望有一個子標題來說明這部分內容時,就可以使用<section>來包裹。例如:長文的章節分段、產品頁中不同性質資訊的分隔、FAQ 頁面裡每個問題解答組成一個 section 等等。<section>的一個重要原則是:通常應該搭配標題使用。如果沒有適當的子標題,僅僅想用它來方便 CSS 排版,這時其實應考慮使用<div>而非<section>,因為沒有標題的<section>在語意上比較模糊。
無障礙助益: 當<section>有包含標題(例如<h2>或<h3>)時,螢幕閱讀器能將它作為結構分區來理解,使用者可以根據標題快速瞭解此段內容的主題。如果需要,也能直接跳轉到該區段開始瀏覽。然而需要注意,<section>本身不像<main>或<nav>那樣自帶特定的ARIA地標角色(除非有提供可供辨識的名稱)。實務上,為了無障礙,確保每個<section>都有一個可讓使用者辨識的標題(可見的標題或以 aria-label 提供隱藏標題)。這樣一來,<section>就成為清晰的頁面章節,有助於使用者理解內容架構。
範例: 以下示範在一篇文章(<article>)中使用多個<section>作章節劃分:
<article>
<h1>我的學習之旅</h1>
<section>
<h2>第一部分:HTML 基礎</h2>
<p>在這部分,我學習了基本的 HTML 語法和元素,包括標題、段落、清單等...</p>
</section>
<section>
<h2>第二部分:語意標籤的威力</h2>
<p>接著,我發現使用語意標籤可以讓網頁結構更清晰,像是<header>、<main>、<section> 等等,改變了我寫程式碼的方式...</p>
</section>
</article>
在上述範例中,我們有一篇文章標題<h1>,底下用兩個<section>將內容分成兩部分,每個部分都有自己的二級標題<h2>。這樣的結構不僅在視覺上清楚,在助讀設備上也很友好:使用者可以透過螢幕閱讀器快速聽到「第一部分:HTML 基礎… 第二部分:語意標籤的威力…」,清楚知道文章章節劃分。如果只是為了版型而分組內容,則不應使用<section>;只有當分組內容本身在語意上值得一個小節時,<section>才能發揮應有價值。
經驗法則: 當內容需要一個標題來說明其主題時,請使用<section>來包裹這群內容,並使用適當的標題元素(如<h2>或<h3>)描述該區塊。反之,若僅為方便佈局而分組,沒有語意上的子主題,就以無語意的容器(如<div>)代替,避免誤用<section>導致結構意義混淆。
<aside>:側欄/附屬內容區塊
<aside> 是什麼: <aside>元素表示與頁面主要內容間接相關的區塊,通常以側欄形式出現,也可以是一段脫離主線的附加說明。簡而言之,<aside>承載的是補充性資訊:這些內容雖非主要重點,但對於有興趣的讀者是有額外價值的。
何時使用: 常見的用法是在頁面側邊欄顯示次要內容,例如相關文章列表、重點引用、廣告、作者簡介、提示框等。也可以在文章正文中用<aside>標示一小段插入的補充說明或註解(例如某個術語的解釋框)。如果<aside>直接放在<body>下且與<main>並列,一般表示整頁的側邊欄區域;如果<aside>放在<article>或<section>內部,則是與該文章或章節相關的補充資訊。
無障礙助益: <aside>被視為「附屬內容 (complementary)」地標(在它作為頁面主要結構一部分時)。螢幕閱讀器在進入<aside>內容時,可能會提前告知使用者這是補充或附帶的資訊區域。這意味著使用者可以選擇跳過<aside>以專注於主內容,或在需要時專門瀏覽其中的內容。透過語意標示<aside>,我們讓輔助技術知道「這一段不是主要劇情,但可能有額外參考價值」。
範例: 以下範例展示兩種<aside>的用法:頁面側欄與文章內附註:
<!-- 網站整體的側欄 -->
<aside>
<h2>最新消息</h2>
<ul>
<li><a href="/news/1">功能更新:新增黑暗模式</a></li>
<li><a href="/news/2">活動預告:線上黑客松</a></li>
</ul>
</aside>
<!-- 文章中的附加資訊 -->
<article>
<h1>如何寫出無障礙的HTML</h1>
<p>這篇文章將帶你了解如何透過正確的HTML語意標籤提升網頁的無障礙性...</p>
<aside>
<p><strong>小提示:</strong> 無障礙(A11y)是Accessibility的簡寫,其中11代表中間省略的字母數。</p>
</aside>
<p>接下來我們將探討各種區塊元素的作用...</p>
</article>
在第一段程式碼中,<aside>作為頁面的側欄,包含一個標題和最新消息列表,屬於全頁面的附屬資訊區塊。第二段程式碼示範了在文章內容中使用<aside>作為插入的小提示,提供與主題相關但獨立的說明。螢幕閱讀器在讀到這些<aside>時,會讓使用者知道「接下來是一段補充內容」,使用者可決定要詳讀與否。對於視覺使用者而言,aside 通常透過CSS呈現在側邊或以不同的版型顯示,讓版面更豐富,但即使不看樣式,語意上也清楚它不是主要正文。
<footer>:頁尾區域
<footer> 是什麼: <footer>元素代表頁面或區段內容的頁尾。通常包含該區塊的結束資訊,如版權宣告、聯絡資訊、相關連結、作者署名或附註等。和<header>類似,<footer>既可用於整個頁面的尾部,也可用於一篇文章或一個<section>的結尾部分。
何時使用: 幾乎所有網頁都會在底部使用一個<footer>作為全站頁尾(例如公司版權、隱私條款連結)。另外,在<article>內也常用<footer>來放文章的後續資訊(例如作者資訊、標籤、評論入口等)。<section>內如果有需要結束語或附加連結,也可包含<footer>。一個頁面可以有多個 <footer>,但需注意語意範疇:頁面自身的<footer>應直接位於<body>下,而文章或區段內的<footer>僅屬於該內容單元,不會成為全頁的頁尾。
無障礙助益: 當<footer>直接位於<body>下時,螢幕閱讀器將其視為「內容資訊 (contentinfo)」地標,提醒使用者這裡是整個頁面的結尾資訊,比如版權或聯絡方式。如果<footer>在局部區塊內(如文章內),螢幕閱讀器通常不會將它當作地標,但依然會讓使用者明白它是該內容的收尾部分。例如,讀到文章內的<footer>時,可能會聽到「文章結尾」的提示。適當使用<footer>能使頁面結構更完整:輔助技術能辨別哪裡是主要內容結束,接下來是收尾資訊。
範例: 以下程式碼展示頁面全域頁尾和文章內頁尾的例子:
<!-- 全站頁尾 -->
<footer>
<p>© 2025 我的網站|版權所有</p>
<p><a href="/privacy">隱私權政策</a>|<a href="/contact">聯絡我們</a></p>
</footer>
<!-- 文章內頁尾 -->
<article>
<h2>語意標籤的優點</h2>
<p>...文章內容...</p>
<footer>
<p>作者:小張|更新日期:2025/10/28</p>
<p>感謝您的閱讀!歡迎分享這篇文章。</p>
</footer>
</article>
第一段<footer>是網站的整體頁尾,包含版權資訊和一些連結,這通常出現在每頁底部且內容大致相同。第二段示範在文章內使用<footer>提供該文章的附加資訊(作者名及更新日期)以及結語。透過語意標記,螢幕閱讀器使用者在讀到第一段頁尾時會清楚那是全頁的結尾資訊,而在讀到文章內頁尾時,能理解那是該文章的結束區域。
以上介紹的 <header>, <nav>, <main>, <article>, <section>, <aside>, <footer> 七個元素,是打造語意清晰且無障礙的頁面結構的基石。善用這些標籤,您的 HTML 不僅對自己和其他開發者更具可讀性,對使用輔助工具的使用者而言也將更加友好。最後,我們彙整一些常見問題,以解答您在實作語意化結構時可能遇到的疑惑。
常見問題與解答
問:使用了語意化標籤後,我還需要再加 ARIA 屬性或 role 嗎?
答: 一般來說,如果已正確使用語意化的 HTML 標籤,就不需要再額外添加對應的 ARIA role 屬性。這些標籤本身已經隱含了適當的角色資訊(例如<nav>隱含role="navigation")。瀏覽器和輔助技術會自動識別。不過,在某些情況下可以輔以 ARIA 來增強語意:例如當您有兩個以上的<nav>時,可以加上 aria-label 為每個導覽區命名,以便螢幕閱讀器區分不同導覽;或者一個沒有可見標題的<section>可以透過aria-label賦予名稱。原則上,「先使用原生語意標籤,後補 ARIA」:先讓語意標籤發揮作用,只有在標籤本身不足以表達時再考慮 ARIA。
問:一個頁面可以有多個 <header>、<footer>、<nav> 嗎?這樣會不會讓結構混亂?
答: 可以有多個,但要注意語意範圍:
<header>:一個頁面通常有一個全域的頁首<header>,但在每篇文章或每個<section>裡也能有自己的<header>作為該部分的頭部。這是允許且常見的。例如多篇文章列表中,每篇文章各自的標題區都可以是<header>。螢幕閱讀器會根據<header>所在位置來判斷其作用域,不會混淆。
<nav>:頁面中可以有主導航、次導航等多個<nav>區塊。但請盡量保持精簡。如果有多個<nav>,建議使用aria-label或隱藏標題為每個<nav>做出描述,例如「主導覽」、「次導覽」或「相關連結」,避免使用者混淆每個導航的目的。
<footer>:類似<header>,頁面底部通常有一個全域<footer>,而文章內也可以有一個局部的<footer>。瀏覽器會將<body>直屬的<footer>視為頁面的內容資訊地標,而內嵌於文章的<footer>只被視為該文章內容的一部分。這不會造成衝突,但請確保頁面尾部資訊(例如版權)放在全域<footer>裡,而不要散落在各處。
總之,多個語意標籤並非不可,但每個都有自己的範疇。只要結構清晰、適當運用範圍,輔助技術可以正確解讀。
問:如果我不使用這些語意標籤,而全部用 <div> 來排版,會怎麼樣?
答: 網頁在視覺上可能仍能呈現,但可及性和結構資訊將大打折扣。全用<div>不會主動告知瀏覽器或輔助技術任何有用的語意。例如:螢幕閱讀器無法分辨哪裡是主內容、哪裡是導航,只能線性地從頭讀到尾,使用者體驗很差。搜尋引擎爬蟲也只能靠猜測來理解您的頁面架構,可能錯過重要內容。當然,您可以在<div>上添加 ARIA role 去模擬語意標籤的效果,但那既繁瑣又容易出錯,而且還得自行確保鍵盤操作等無障礙細節。相較之下,使用語意化標籤是更簡潔可靠的方式。保留<div>給沒有對應語意標籤的情況(比如純粹為了佈局的包裝容器),在有適當語意標籤時應優先使用,這會讓您的網站對所有人都更友善。
問:語意化標籤會不會影響我的頁面外觀和 CSS 呈現?使用它們需要注意什麼?
答: 語意化標籤對預設的頁面外觀影響非常小。大多數這些元素(<main>, <section>, <article>, <nav> 等)在瀏覽器的預設樣式中都被當作區塊級元素 (display: block) 處理,就像<div>一樣。這意味著它們天然會佔滿父容器的寬度並從新行開始,但除此之外沒有特殊的樣式。您可以像針對<div>那樣用 CSS 自由佈局與裝飾<header>, <nav>, <section> 等。使用語意標籤不會限制您的排版能力。唯一需要注意的是:某些舊版瀏覽器對 HTML5 新語義標籤支援較差,但現在這通常只在非常古老的瀏覽器才是問題,而且有 shim 可以解決。在現代環境中,大可放心使用。總之,盡管標籤名稱不同,但在呈現上與<div>等無異,因此可以安心應用語意標籤來組織頁面,而不用擔心破壞版面。
問:<section> 和 <article> 在用法上有點像,能再簡單總結一下何時用哪一個嗎?
答: 確實,這兩者比較容易混淆:
使用 <article>:當內容具備自成一格的性質時使用,也就是這段內容即使脫離目前頁面,單獨放在別處(例如RSS、社群分享)依然成立。有自己的主題與意義,典型例子如獨立的文章貼文、使用者評論等。
使用 <section>:當內容是頁面大主題下的一個主題分支或章節時使用,通常需要有小標題。<section>著重於頁面內的分段組織,而非獨立可搬移。若沒有標題或清晰主題,只是出於版面需要的分隔,那可能不適合用<section>。
一句話區分:能單獨發表的是 <article>,在頁面內分段的是 <section>。如果還拿不定主意,想想這段內容拿到其他地方時是否需要額外背景才能看懂:需要背景的,多半就是<section>;完全獨立無須上下文的,就是<article>。
問:新手在實作語意化結構時最容易犯的錯誤有哪些?我該如何避免?
答: 常見的幾個誤區:
把語意和呈現混為一談: 語意標籤是關於內容的角色,而不是視覺呈現。例如,別因為想讓文字粗體就用<strong>,或為了斜體就用<em>——應視語境決定是否需要強調語意。如果只是樣式需求,應使用 CSS。區塊標籤同理,不要因為內容在右側呈現就誤用<aside>(它應當基於內容性質決定,而非位置)。避免用錯語意就不會誤導輔助技術。
濫用語意標籤: 有些開發者知道語意重要後反而「過度熱心」,給每個東西都套上一個語意標籤。請遵循我們前述的指南:語意標籤各司其職,用在恰當的地方即可。不符合條件時,寧用<div>也不要硬套。例如只有一組小連結就硬包一個<nav>、為了加CSS而把無語意的一堆元素包<section>,都是濫用的例子。記得語意標籤貴精不貴多,正確使用勝過數量。
忽視結構層次: 語意化不僅是標籤,還包含正確的結構順序。例如標題應按階層使用(<h1>到<h6>不能跳級)、內容區塊的排列順序要與視覺和邏輯一致。新手可能會在視覺上調整順序卻沒注意 DOM 結構順序,導致螢幕閱讀體驗混亂。解決方法是:先寫有意義的 HTML 結構,再用 CSS 微調版面,而非顛倒過來。
只要牢記以上這些點,多加練習並主動使用語意標籤,漸漸地就能避開這些陷阱,寫出結構清晰又無障礙的程式碼。
結語
透過本指南的講解,相信您已經體會到語意化 HTML 在無障礙設計中的價值。總結來說:以語意標籤構築頁面結構,有助於所有使用者更好地理解和導航您的網站——無論是透過螢幕閱讀器的視障者,還是日後接手維護網站的開發者,都能從中受益。
在實務應用中,請從規劃階段就考慮頁面的語意區塊,善用<header>, <nav>, <main>, <article>, <section>, <aside>, <footer>等元素,打造邏輯清晰、層次分明的 HTML 架構。如此一來,您的網站將更接近「以人為本」的設計初衷——提供給所有使用者無障礙且友善的瀏覽體驗。
祝您在開發旅程中寫出更語意明確、無障礙良好的程式碼!