執行摘要:現代 Web 語意的架構工程
HTML (HyperText Markup Language) 的演進已從單純的文件標記語言,轉變為支撐複雜網頁應用程式(Web Applications)的結構骨幹。隨著 HTML5 Living Standard 的持續迭代,現代前端開發不再僅止於「讓畫面顯示出來」,而是必須兼顧語意精確性(Semantic Precision)、可訪問性(Accessibility/a11y)、搜尋引擎優化(SEO) 以及 關鍵渲染路徑(Critical Rendering Path) 的效能優化。
本報告旨在提供一份專家級的 HTML5 標籤百科,將超過 100 個標準元素依據功能邏輯進行嚴謹分類。每一章節不僅提供標籤的定義與屬性速查,更深入探討其在 DOM(文件物件模型)中的行為、隱式 ARIA 角色(Implicit ARIA Roles)、瀏覽器解析機制,以及 2025 年以後的開發最佳實踐。本報告嚴格採用專業技術敘事風格,旨在為資深開發者、架構師及技術負責人提供權威參考。
元數據(Metadata)元素定義了文件存在的環境。這些元素通常不直接向使用者渲染可見內容,而是負責協調文件與外部資源的關係、定義字元編碼、控制瀏覽器行為以及提供機器可讀的資訊給搜尋引擎與社群爬蟲。這些標籤的配置直接影響頁面的安全性(如 CSP)、效能(如 Preload)與 SEO 排名。
1.1 根源上下文 (The Root Context)
所有 HTML 文件皆始於根元素。正確配置根元素是確保後續 CSS 繼承與輔助科技(Assistive Technology)正常運作的基礎。
| 標籤 | 完整定義 | DOM 介面 | 隱式 ARIA 角色 | 核心屬性與注意事項 |
|---|---|---|---|---|
<html> |
HTML 文件的根元素 (Root Element)。除了 <!DOCTYPE> 之外,所有其他元素都必須是此元素的後代。 |
HTMLHtmlElement |
document |
|
1.2 文件元數據 (Document Metadata)
這些元素主要駐留於 <head> 容器內,負責在內容繪製(Paint)之前建構瀏覽環境。
<head>
定義:包含關於文件的機器可讀資訊(Metadata)的容器。
載入順序優化:<head> 內的標籤順序對效能至關重要。
- meta charset:應置於最前,確保瀏覽器在解析後續位元組前已知曉編碼,避免重新緩衝(Re-buffering)。
- meta viewport:觸發移動端渲染邏輯。
- title:儘早出現以利瀏覽器分頁顯示。
- link rel="preconnect/preload":建立早期連線。
- style / script:阻塞性資源應根據需求排序。
<title>
定義:定義文件標題,顯示於瀏覽器標題列或分頁標籤上。
SEO 戰略價值:這是單一頁面中權重最高的 On-page SEO 因素。標題應精確概括內容,並在 55-60 字元內包含核心關鍵字。
限制:內部只能包含純文字,任何 HTML 標籤皆會被忽略並視為文字顯示。
<base>
定義:為頁面上所有相對 URL 指定基礎 URL 和/或預設目標(Target)。
風險評估:在單頁應用程式(SPA)或依賴錨點導航(#id)的頁面中使用 <base> 需極度小心,因為它可能導致內部連結被解析為絕對路徑重定向,而非原本的視圖切換。
<link>
定義:規定當前文件與外部資源之間的關係。
功能變體:
- rel="stylesheet":載入 CSS。
- rel="canonical":SEO 關鍵標籤,用於解決重複內容問題,指明標準網址。
- rel="preload":高優先級提取關鍵資源(如字體、LCP 圖片),不阻塞 window.onload。
- rel="modulepreload":預先加載 ES Module 腳本圖譜。
- rel="icon":定義 Favicon。
<meta>
定義:表示那些不能由其他 HTML 元相關元素(如 base、link、script、style、title)表示的元數據。
關鍵屬性組合:
- 字元編碼:<meta charset="utf-8">。現代網頁標準,防止 XSS 編碼攻擊。
- 視口設定:<meta name="viewport" content="width=device-width, initial-scale=1">。響應式網頁設計(RWD)的觸發點,防止行動瀏覽器以桌面縮放模式渲染。
- 內容安全策略 (CSP):<meta http-equiv="Content-Security-Policy" content="...">。防禦 XSS 的最後一道防線,限制腳本、圖片、樣式等資源的載入來源。
- SEO 描述:<meta name="description" content="...">。雖不直接影響排名,但決定 SERP 的摘要顯示,影響點擊率(CTR)。
<style>
定義:包含文件的樣式資訊。
效能應用:將「關鍵渲染路徑 CSS(Critical CSS)」內聯於 <style> 標籤中,可消除外部 CSS 的網路請求往返時間(RTT),顯著改善首次內容繪製(FCP)。
實戰應用程式碼:企業級 <head> 配置
<!DOCTYPE html>
<html lang="zh-TW" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<meta http-equiv="Content-Security-Policy"
content="default-src 'self'; img-src https://cdn.example.com; script-src 'self' https://trusted.analytics.com;">
<title>HTML5 全標籤語法百科 | 專業開發者指南</title>
<meta name="description" content="一份詳盡的 HTML5 標籤技術手冊,涵蓋語意結構、ARIA 可訪問性與高效能實踐。">
<meta name="robots" content="index, follow, max-image-preview:large">
<meta property="og:title" content="HTML5 全標籤語法百科">
<meta property="og:type" content="article">
<meta property="og:url" content="https://tech.example.com/html5-guide">
<meta property="og:image" content="https://tech.example.com/assets/og-html5.jpg">
<meta name="twitter:card" content="summary_large_image">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" href="/assets/fonts/inter-bold.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/css/main.min.css">
<link rel="canonical" href="https://tech.example.com/html5-guide">
<script src="/js/app.js" defer></script>
</head>
<body>
</body>
</html>
2. 內容分區與結構 (Content Sectioning)
此類別包含定義文件結構輪廓的元素。HTML5 引入了語意化分區元素來取代通用的 <div> 容器,這不僅讓程式碼更具可讀性,更重要的是為輔助科技建立了「導航地標(Landmarks)」。
2.1 語意化骨幹 (The Semantic Skeleton)
| 標籤 | 定義 | DOM 介面 | 隱式 ARIA 角色 | 應用情境與備註 |
|---|---|---|---|---|
<body> |
代表 HTML 文件的內容主體。 | HTMLBodyElement | generic | 文件中僅能有一個 body。 |
<main> |
代表 <body> 的主要內容。 | HTMLElement | main | 唯一性:每個頁面應只有一個可見的 <main>。螢幕閱讀器提供「跳轉至主要內容」的快捷鍵即是依賴此標籤。請勿將全站導航或頁尾置於此內。 |
<nav> |
提供導航連結的區塊。 | HTMLElement | navigation | 並非所有連結群組都需要用 <nav>,應保留給主要導航、目錄或分頁器。過度使用會造成螢幕閱讀器使用者的導航雜訊。 |
<aside> |
與周圍內容間接相關的區塊。 | HTMLElement | complementary | 用於側邊欄、廣告插槽、相關文章推薦或補充資訊框(Call-out boxes)。 |
<header> |
引導性內容或導航連結的容器。 | HTMLElement | banner (若為 body 子層) | 通常包含標題、Logo 或搜尋表單。可存在於 article 或 section 中,此時不具備 banner 角色。 |
<footer> |
區塊的頁尾。 | HTMLElement | contentinfo (若為 body 子層) | 包含版權資訊、作者連結、相關文件連結。同樣可被 article 或 section 作用域化(Scoped)。 |
2.2 結構層級辨析
<article> vs <section>:開發者的永恆辯論
這是 HTML5 最常被混淆的概念之一。區分兩者的核心在於獨立性與可分發性。
<article> (文章/獨立單元):
定義:代表文件中一段獨立的、自包含的內容。
判斷標準:如果你將這個區塊及其內容單獨提取出來,放到 RSS Feed 中或另一個網站上,它是否仍然具有完整的意義?如果是,請使用 <article>。
場景:部落格文章、論壇貼文、新聞報導、單個產品卡片、使用者評論。
<section> (章節/通用區塊):
定義:代表文件中一個通用的獨立章節,通常具有一個標題。
判斷標準:它是否只是內容邏輯分組的一部分?如果它依賴上下文才能完整理解,則使用 <section>。
場景:文章的「介紹章節」、「聯絡資訊章節」、頁面上的「功能特色區塊」。
專家提示:如果一個區塊只是為了 CSS 樣式佈局(Layout)或腳本操作而存在,不具備語意分組意義,請繼續使用 <div>。
<h1> 至 <h6>:大綱算法的現狀
層級邏輯:這些標籤定義了由高至低的六個層級標題。
HTML5 大綱算法 (Document Outline):理論上,HTML5 允許每個 <section> 或 <article> 重新從 <h1> 開始,瀏覽器應自動計算其層級。然而,現實情況是瀏覽器與輔助科技對此算法的支援極差。
2025 最佳實踐:應嚴格遵守視覺與結構上的層級。頁面應只有一個主標題 <h1>(通常與 <title> 呼應),其餘依序使用 <h2> 至 <h6>,避免跳級(例如從 <h2> 直接跳到 <h4>),這對 SEO 與 Accessibility 至關重要。
<address>
定義:提供最近的 <article> 或 <body> 祖先元素的聯絡資訊。
常見誤用:不要用它來標記任意的郵寄地址。它專指文件作者或擁有者的聯絡方式(如 Email 連結、作者頁面連結)。
實戰應用程式碼:巢狀語意結構
<main>
<article aria-labelledby="main-heading">
<header>
<h1 id="main-heading">Web Components 的未來發展</h1>
<p>作者:<address><a href="mailto:expert@example.com" rel="author">王大明</a></address></p>
<time datetime="2025-06-12">2025年6月12日</time>
</header>
<p class="lead">Web Components 正徹底改變我們構建 UI 的方式...</p>
<section aria-labelledby="intro-heading">
<h2 id="intro-heading">技術簡介</h2>
<p>Shadow DOM 提供了強大的封裝性...</p>
</section>
<section aria-labelledby="usage-heading">
<h2 id="usage-heading">實戰應用</h2>
<p>透過 Custom Elements API...</p>
</section>
<aside class="terminology" aria-label="術語解釋">
<h3>關鍵術語</h3>
<dl>
<dt>Shadow Boundary</dt>
<dd>普通 DOM 與 Shadow DOM 之間的分界線。</dd>
</dl>
</aside>
<footer>
<p>標籤:<a href="/tags/js">JavaScript</a>, <a href="/tags/html">HTML5</a></p>
<p>© 2025 技術週刊版權所有</p>
</footer>
</article>
</main>
3. 文字內容與分組 (Text Content & Grouping)
此類別包含用於組織段落、列表、引用及格式化區塊的元素。
3.1 區塊級容器 (Block-Level Containers)
| 標籤 | 定義與行為 | 特殊限制與注意事項 |
|---|---|---|
<p> |
段落 (Paragraph)。 | 自動關閉機制:<p> 標籤不能包含其他區塊級元素(如 <div>, <h1>, <ul>)。若在 <p> 中放入 <div>,瀏覽器會自動強制結束該段落,導致 DOM 結構與預期不符。 |
<div> |
通用流容器 (Division)。 | 無語意。僅在無其他合適語意元素時使用。通常用於 CSS 佈局包裝(Wrapper)或 JS 鉤子。 |
<blockquote> |
區塊引用。 | 代表引自他處的長篇內容。應配合 cite 屬性(提供來源 URL)。預設帶有縮排樣式。 |
<pre> |
預格式化文字。 | 保留原始碼中的空白與換行符號。通常與 <code> 搭配使用來顯示程式碼區塊。 |
<hr> |
主題轉換 (Thematic Break)。 | 在 HTML5 中,它不再只是「水平線」,而是代表段落層級的主題轉換(例如故事中的場景切換)。 |
3.2 列表與圖表 (Lists & Figures)
<ul>, <ol>, <li>
- 無序列表 (<ul>):項目的順序不改變含義(如購物清單)。
- 有序列表 (<ol>):項目的順序至關重要(如食譜步驟、排名)。
- 屬性:start(起始數字)、reversed(倒序)、type(編號樣式,如 a, I, 1)。
- 列表項目 (<li>):<ul> 或 <ol> 的唯一合法直接子元素。
<dl>, <dt>, <dd>
描述列表 (Description List):用於鍵值對(Key-Value pairs)。
靈活性:一個 <dt>(術語)可以對應多個 <dd>(描述),反之亦然。
應用:名詞解釋、元數據列表、問答集(FAQ)。
<figure> & <figcaption>
定義:代表一個獨立的內容單元(Self-contained content),通常帶有一個說明標題(Caption)。
語意關聯:<figcaption> 提供了與 <figure> 內容的程式化關聯(Programmatic Association),這比單純用 <p> 在圖片下方寫字更具可訪問性。
內容:不限於圖片,可用於程式碼片段、引用、圖表、詩歌。
實戰應用程式碼:複雜分組
<figure>
<blockquote cite="https://www.w3.org/TR/html5/">
<p>The web is a universal platform...</p>
</blockquote>
<figcaption>— Tim Berners-Lee, <cite>W3C Specs</cite></figcaption>
</figure>
<h3>技術規格書</h3>
<dl>
<dt>HTML5</dt>
<dd>超文件標記語言的最新版本。</dd>
<dt>CSS3</dt>
<dt>JavaScript</dt>
<dd>現代前端開發的核心技術堆疊。</dd>
</dl>
4. 行內文字語意 (Inline Text Semantics)
此類別負責處理細微的文字層級語意。這些標籤通常不會破壞行流(Flow),而是包裹單詞或短語以賦予強調、重要性或技術定義。
4.1 強調與重要性辨析
開發者常混淆視覺效果相似的標籤。HTML5 明確區分了「樣式」與「語意」。
| 標籤 | 預設樣式 | 語意定義 | 建議使用情境 |
|---|---|---|---|
<em> |
斜體 | 語氣強調 (Stress Emphasis) | 改變句子語氣的重音。例如:「我沒說過」(暗示是別人說的)。 |
<strong> |
粗體 | 高度重要性 (Strong Importance) | 表示內容嚴重、緊急或關鍵。如警告訊息、錯誤提示。 |
<i> |
斜體 | 替代語氣 (Alternative Voice) | 與周圍文字語氣不同的區塊。用於:分類學名、技術術語、外文短語、心聲、船艦名。 |
<b> |
粗體 | 注意力引導 (Bring Attention) | 引起注意但無額外重要性。用於:摘要中的關鍵字、產品名稱。請勿用於標題。 |
<s> |
刪除線 | 不再準確 (Inaccurate) | 資訊已過時或不再適用。如:「原價 $500 特價 $200」。 |
<del> |
刪除線 | 已刪除 (Deleted) | 文件編輯紀錄。表示從文件中被移除的內容,常配合 <ins> 使用。 |
<ins> |
下底線 | 已插入 (Inserted) | 文件編輯紀錄。表示新增到文件中的內容。 |
<mark> |
黃底 | 標記相關性 (Relevance) | 為了參考目的而標記的文字。如:搜尋結果關鍵字高亮。 |
<small> |
小字體 | 附屬註解 (Side Comments) | 免責聲明、版權聲明、法律條款等「細則」。 |
4.2 技術與資料語意
<a> (Anchor)
角色:創建超連結。
安全性關鍵:當使用 target="_blank" 開啟新分頁時,務必加上 rel="noopener noreferrer",以防止新頁面透過 window.opener 操控原頁面(Reverse Tabnabbing 攻擊)。
功能屬性:
- download:指示瀏覽器下載資源而非導航。
- href="tel:..." / mailto:...:觸發電話或郵件應用。
<time>
定義:代表特定的時間週期或時間點。
機器可讀性:datetime 屬性應使用 ISO 8601 格式(如 2025-11-23T14:00)。這對搜尋引擎索引活動時間、日曆整合至關重要。
<code>, <var>, <samp>, <kbd>
- <code>:電腦程式碼片段。
- <var>:數學表達式或程式碼中的變數(通常顯示為斜體)。
- <samp>:電腦程式的輸出範例。
- <kbd>:使用者輸入(鍵盤按鍵)。
<data>
定義:將給定的內容與機器可讀的翻譯聯繫起來。
用途:<data value="PROD-398">藍莓口味</data>(其中 398 是庫存 SKU)。
4.3 語言學與格式化
- <abbr>:縮寫或首字母縮略詞。可配合 title 提供完整形式。
- <q>:行內引用。瀏覽器會自動根據 lang 添加適當的引號。
- <cite>:引用作品的標題(書名、論文名、畫作名)。注意:不是引用的人名。
- <dfn>:術語的定義實例。標示該處為該術語的首次定義。
- <ruby>, <rt>, <rp>:東亞排版注音(如日文振假名、中文注音)。<rt> 提供發音,<rp> 提供不支援時的括號回退。
- <bdi>, <bdo>:雙向文字處理(Bi-directional)。<bdi> 用於隔離可能與周圍文字方向不同的未知文字(如使用者名稱),防止佈局崩潰。
實戰應用程式碼:豐富文字語意
<p>
<dfn>約束驗證 API (Constraint Validation API)</dfn> 允許開發者檢查使用者輸入。
正如 <cite>MDN Web Docs</cite> 所述:
<q cite="https://developer.mozilla.org">此 API 功能強大。</q>
</p>
<p>
商品:<data value="SKU-992"><strong>超級小工具</strong></data><br>
上市日期:<time datetime="2025-11-23">11月23日</time><br>
狀態:<s style="color:red">缺貨</s> <ins>已補貨</ins>
</p>
<p>
安裝請輸入 <kbd>npm install</kbd> 並等待
<samp>Success</samp> 訊息出現。
</p>
<ruby>
漢 <rt>ㄏㄢˋ</rt>
字 <rt>ㄗˋ</rt>
</ruby>
5. 圖片與多媒體 (Image & Multimedia)
HTML5 將多媒體原生化,移除了對 Flash 等外掛的依賴,並引入了複雜的響應式載入機制。
5.1 圖片與效能優化
<img>
定義:嵌入圖片。
必備屬性:
- alt:替代文字。對 Accessibility 和 SEO 絕對必要。若圖片為純裝飾,設為空字串 alt=""。
- src:圖片來源。
現代效能屬性 (Performance Attributes):
- loading="lazy":延遲載入。指示瀏覽器直到圖片接近視口(Viewport)時才下載。大幅節省頻寬與提升初始載入速度。
- decoding="async":指示瀏覽器在主執行緒(Main Thread)之外解碼圖片,減少捲動卡頓。
- fetchpriority="high":2025 年關鍵屬性。用於提升 LCP(Largest Contentful Paint)圖片的優先級,覆蓋瀏覽器的預設低優先級推測。
- srcset & sizes:響應式圖片的核心。提供多種解析度或寬度的圖片資源,讓瀏覽器根據裝置像素密度(DPR)與佈局寬度自動選擇最合適的檔案。
<picture>
定義:提供藝術指導 (Art Direction) 或格式切換的容器。
與 srcset 的區別:srcset 讓瀏覽器決定載入哪張(基於效能);<picture> 強制瀏覽器根據 media 條件載入特定來源(例如手機版載入直式裁切圖,桌面版載入橫式全景圖)。
格式切換:利用 <source type="image/avif"> 提供次世代格式,並以 <img> 作為 JPEG 回退。
5.2 時間媒體 (Time-Based Media)
<video> & <audio>
屬性:
- controls:顯示原生播放控制條。
- autoplay:自動播放。現代瀏覽器政策通常要求配合 muted 屬性才允許自動播放,以防止干擾使用者。
- playsinline:iOS 關鍵屬性,防止影片自動全螢幕播放。
- poster:影片載入前顯示的縮圖。
可訪問性:必須包含 <track> 元素以支援字幕(Captions)與音訊描述。
<track>
功能:為媒體元素指定計時文字軌(Timed Text Tracks)。
屬性:
- kind:subtitles(翻譯)、captions(包含音效描述,給聽障者用)、descriptions(旁白,給視障者用)、chapters。
- src:連結 .vtt (WebVTT) 檔案。
5.3 嵌入內容
- <iframe>:巢狀瀏覽上下文。安全性:sandbox 屬性極為重要,可限制 iframe 內的腳本執行、表單提交與彈窗行為,實現最小權限原則。
- <object>:通用外部資源容器。可用於 SVG、PDF。
- <embed>:非 HTML 應用程式的容器(舊時代遺物,現少用)。
- <map> & <area>:客戶端影像地圖。定義圖片上的可點擊熱區。需配合 <img> 的 usemap 屬性。
實戰應用程式碼:極致優化的媒體標記
<picture>
<source srcset="hero-mobile.avif" media="(max-width: 600px)" type="image/avif">
<source srcset="hero-desktop.avif" type="image/avif">
<source srcset="hero-desktop.jpg" type="image/jpeg">
<img
src="hero-desktop.jpg"
alt="HTML5 架構詳解圖表"
width="1200" height="600"
loading="eager"
fetchpriority="high"
decoding="sync">
</picture>
<video controls poster="preview.jpg" width="800" playsinline>
<source src="demo.webm" type="video/webm">
<source src="demo.mp4" type="video/mp4">
<track kind="captions" src="captions-zh.vtt" srclang="zh-TW" label="繁體中文" default>
<track kind="descriptions" src="desc-en.vtt" srclang="en" label="Audio Description">
<p>您的瀏覽器不支援 HTML5 影片,請<a href="demo.mp4">下載影片</a>。</p>
</video>
6. 腳本與繪圖 (Scripting & Graphics)
這些元素引入了邏輯運算與動態渲染能力,是現代 Web App 的引擎。
6.1 腳本執行策略
<script>
類型變革:
- Classic Script (<script src="...">):預設會阻塞 HTML 解析器(Parser-Blocking),直到下載並執行完畢。
- Module Script (<script type="module">):啟用 ES6 Modules。預設行為類似 defer,且支援 import / export 語法。
非阻塞載入策略 (Async vs Defer):
- async:非同步下載,下載完畢立即執行(會暫停 HTML 解析)。執行順序不保證。適用於完全獨立的腳本(如 Google Analytics)。
- defer:非同步下載,但等到 HTML 解析完成後、DOMContentLoaded 事件觸發前依序執行。這是應用程式邏輯腳本的黃金標準,確保了 DOM 已備妥且腳本執行順序正確。
<noscript>
定義:定義在腳本被停用或不支援時顯示的替代內容。對於依賴 JS 的 SPA 網站,這是提供基礎內容給爬蟲或受限環境的重要回退機制。
6.2 圖形渲染
<canvas>
定義:點陣圖(Raster)繪圖介面。
機制:本身只是個空白畫布,需透過 JavaScript (getContext('2d') 或 WebGL) 逐像素繪製。
適用場景:高效能動畫、遊戲、即時視訊處理、複雜數據視覺化(如股票圖表)。
缺陷:內容對 DOM 不可見,搜尋引擎與螢幕閱讀器無法讀取內容。務必在標籤內部提供回退文字。
<svg> (Scalable Vector Graphics)
定義:基於 XML 的向量圖形。
優勢:每個圖形(圓、線、路徑)都是獨立的 DOM 節點。這意味著可以對其使用 CSS 樣式、添加 JS 事件監聽器(如 hover 效果)。
適用場景:圖標(Icons)、Logo、互動式地圖、簡單圖表。縮放不失真。
實戰應用程式碼:現代腳本載入
<script async src="https://analytics.provider.com/tag.js"></script>
<script type="module" src="/js/main.js"></script>
<script nomodule src="/js/legacy-bundle.js"></script>
<canvas id="stock-chart" width="800" height="400" aria-label="台積電 2025 年股價走勢圖">
<table summary="台積電 2025 年每季股價數據">
<tr><th>Q1</th><td>$800</td></tr>
</table>
</canvas>
7. 表格內容 (Table Content)
表格的唯一用途是展示多維度數據(Tabular Data)。切勿使用表格進行頁面佈局(Layout),這是 90 年代的過時做法。
| 標籤 | 定義 | 結構與可訪問性重點 |
|---|---|---|
<table> |
表格容器。 | |
<caption> |
表格標題。 | 必要性:必須是 <table> 的第一個子元素。為輔助科技使用者提供表格內容的摘要,讓他們決定是否需要深入閱讀。 |
<thead> |
表頭群組。 | 包裹標題列,列印時可重複出現在每一頁頂部。 |
<tbody> |
表身群組。 | 包裹數據列。 |
<tfoot> |
表尾群組。 | 用於匯總數據(如總計)。 |
<tr> |
表格列 (Row)。 | |
<th> |
表頭單元格。 | 關鍵屬性:scope="col" 或 scope="row"。這告訴螢幕閱讀器該標題是解釋「整欄」還是「整列」的數據,是表格可訪問性的核心。 |
<td> |
數據單元格。 | |
<colgroup> |
欄位群組。 | 允許對整欄進行樣式設定(如背景色),無需在每個 td 上加 class。 |
<col> |
定義欄位屬性。 | colgroup 的子元素。 |
實戰應用程式碼:WCAG 合規數據表格
<table>
<caption>2025 第一季各部門財務報表</caption>
<colgroup>
<col span="1" style="background-color: #f9f9f9; font-weight: bold;">
<col span="2">
</colgroup>
<thead>
<tr>
<th scope="col">部門</th>
<th scope="col">營收 (Revenue)</th>
<th scope="col">淨利 (Profit)</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">研發部</th>
<td>$50,000</td>
<td>$12,000</td>
</tr>
<tr>
<th scope="row">行銷部</th>
<td>$80,000</td>
<td>$30,000</td>
</tr>
</tbody>
<tfoot>
<tr>
<th scope="row">總計</th>
<td colspan="2" style="text-align: center;">$172,000</td>
</tr>
</tfoot>
</table>
8. 表單與互動元素 (Forms & Interactive)
HTML5 大幅擴充了表單功能,引入了原生驗證(Native Validation)與多種專用輸入控制項,減少了對 JavaScript 的依賴。
8.1 表單容器與結構
<form>
屬性:
- action:提交 URL。
- method:GET(查詢)、POST(傳輸數據)、DIALOG(關閉模態對話框)。
- enctype:上傳檔案時必須設為 multipart/form-data。
- novalidate:停用瀏覽器原生驗證提示(通常用於改用 JS 自定義驗證 UI)。
<fieldset> & <legend>
用途:將相關的表單控制項分組(例如:「運送地址」與「帳單地址」)。
<legend>:分組的標題。這是 fieldset 的第一個子元素,螢幕閱讀器會在讀取組內每個輸入框時重述此標題,提供上下文。
<label>
絕對必要:每個輸入框都必須有一個關聯的 label。
關聯方式:
- 顯式關聯:<label for="email">Email</label> <input id="email">。
- 隱式關聯:<label>Email <input></label>。增加點擊熱區,提升 UX。
8.2 輸入控制項 (Input Controls)
<input>:HTML 的瑞士刀
屬性 type 決定了其行為與外觀。除了傳統的 text, password, radio, checkbox 外,HTML5 新增:
- 資料類型:email (格式驗證), url, tel (觸發數字鍵盤), number (上下微調鈕)。
- 日期時間:date, time, datetime-local, month, week。提供原生日期選擇器。
- 功能型:color (檢色器), range (滑桿), search (搜尋樣式), file, hidden。
關鍵屬性:
- required:必填。
- pattern:使用 Regex 進行驗證。
- inputmode:提示行動裝置顯示何種虛擬鍵盤(例如 numeric, decimal, email),這與 type 不同,僅影響鍵盤而不影響驗證。
- autocomplete:對瀏覽器自動填充至關重要(如 username, current-password, one-time-code)。
<datalist> vs <select>
- <select>:強迫使用者從清單中「選擇」一個,不能自訂。
- <datalist>:配合 <input list="..."> 使用,提供「建議清單」與自動完成功能,但使用者仍可「輸入」清單以外的自訂值。這在「搜尋」或「標籤輸入」場景非常有用。
其他控制項
- <textarea>:多行文字。注意內容是在標籤之間,而非 value 屬性。
- <output>:語意化容器,用於顯示計算結果(如購物車總價)。
- <progress>:顯示任務進度(如下載 50%)。
- <meter>:顯示已知範圍內的測量值(如磁碟空間、溫度)。注意區分進度與測量值。
實戰應用程式碼:現代化表單
<form action="/api/profile" method="post">
<fieldset>
<legend>使用者偏好設定</legend>
<div class="form-group">
<label for="username">使用者名稱</label>
<input type="text" id="username" name="username"
autocomplete="username" required minlength="3">
</div>
<div class="form-group">
<label for="browser">慣用瀏覽器</label>
<input list="browsers-list" id="browser" name="browser" placeholder="請選擇或輸入">
<datalist id="browsers-list">
<option value="Chrome">
<option value="Firefox">
<option value="Safari">
<option value="Edge">
</datalist>
</div>
<div class="form-group">
<label for="satisfaction">滿意度 (0-10)</label>
<input type="range" id="satisfaction" name="score"
min="0" max="10" step="1"
oninput="result.value=this.value">
<output name="result" for="satisfaction">5</output>
</div>
</fieldset>
<div class="form-group">
<label for="avatar">大頭貼</label>
<input type="file" id="avatar" name="avatar" accept="image/png, image/jpeg">
</div>
<button type="submit">儲存資料</button>
</form>
9. 網頁元件與原生互動 (Web Components & Interactive)
這些元素提供了原生瀏覽器實作的 UI 模式,以往這些功能需要依賴大量的 JavaScript 函式庫。
9.1 原生互動元件
<details> & <summary>
功能:原生的「手風琴(Accordion)」或「揭示(Disclosure)」元件。
行為:<details> 內的內容預設隱藏,點擊 <summary> 後展開。
SEO:搜尋引擎可以索引隱藏在內的內容(這點優於 JS 隱藏)。
事件:觸發 toggle 事件。
<dialog>
功能:原生的模態視窗(Modal)或對話框。
API:
- .show():顯示為非模態(仍可與背景互動)。
- .showModal():顯示為模態(Modal),背景會加入 ::backdrop 遮罩,且自動將焦點限制在對話框內(Focus Trap),並支援按 Esc 關閉。這是可訪問性的一大福音。
9.2 Web Components 技術 (Shadow DOM)
<template>
功能:存放 HTML 片段的容器。
特性:內容是「惰性(Inert)」的——圖片不會下載、腳本不會執行,直到使用 JavaScript 將其複製(Clone)並加入 DOM 中。是 Web Components 實例化的藍圖。
<slot>
功能:Shadow DOM 中的佔位符。
用途:允許使用者將自定義標記注入到 Web Component 的特定位置(Composition),實現內容投射(Content Projection)。
實戰應用程式碼:原生模態對話框
<button id="openSettings">開啟設定</button>
<dialog id="settingsDialog">
<form method="dialog">
<header>
<h2>系統設定</h2>
</header>
<p>請確認是否更改偏好設定?</p>
<footer>
<button value="cancel">取消</button>
<button value="confirm" autofocus>確認</button>
</footer>
</form>
</dialog>
<script>
const dialog = document.getElementById('settingsDialog');
const btn = document.getElementById('openSettings');
// 使用 showModal 開啟模態模式(含遮罩與焦點管理)
btn.addEventListener('click', () => dialog.showModal());
// 監聽關閉事件取得回傳值
dialog.addEventListener('close', () => {
console.log(`使用者選擇了:${dialog.returnValue}`);
});
</script>
10. 全域屬性 (Global Attributes)
這些屬性可以應用於任何 HTML 元素,為標籤賦予額外的行為或語意。
| 屬性 | 功能描述 | 2025 專家建議與新特性 |
|---|---|---|
id |
唯一識別符。 | 頁面內必須唯一。用於 CSS ID 選擇器、JS 鉤子與 ARIA 關聯(如 aria-labelledby)。 |
class |
類別識別符。 | 用於 CSS 樣式分組。 |
data-* |
自定義數據屬性。 | 儲存頁面私有數據(如 data-user-id="123"),可透過 JS dataset API 存取。 |
hidden |
隱藏元素。 | 等同 display: none。新值 until-found:允許瀏覽器的「頁面搜尋」功能搜尋到此隱藏內容,並在找到時自動展開該元素(如展開手風琴)。 |
inert |
惰性狀態。 | 強大新屬性。使元素及其所有子元素失去互動能力(無法點擊、無法聚焦),並從 Accessibility Tree 中移除。常用於在模態視窗開啟時,將背後的背景內容設為 inert。 |
contenteditable |
可編輯內容。 | 將元素變為富文本編輯器區域。 |
tabindex |
聚焦控制。 | 0(加入自然 Tab 順序)、-1(可透過 JS .focus() 聚焦但不在 Tab 順序中)。警告:避免使用正整數(如 tabindex="1"),這會破壞使用者的預期導航流。 |
title |
工具提示。 | 反模式:觸控裝置無法顯示,鍵盤使用者無法存取。請勿依賴此屬性傳遞重要資訊。 |
translate |
翻譯提示。 | yes / no。告訴 Google Translate 不要翻譯此元素(例如品牌名稱、程式碼片段)。 |
dir |
文字方向。 | ltr / rtl / auto。對於多語言網站至關重要。 |
spellcheck |
拼字檢查。 | true / false。控制輸入框是否顯示紅線波浪。 |
11. 過時與廢棄元素 (Obsolete & Deprecated)
現代開發者必須識別並避免使用這些標籤。它們大多已被 CSS 或更語意化的標籤取代。
純表現層(請改用 CSS):
<center>, <font>, <big>, <strike>, <tt>, <basefont>, <bgcolor> 屬性。
過時佈局(請改用 Grid/Flexbox):
<frame>, <frameset>, <noframes>。
不良行為:
<marquee>(跑馬燈), <blink>(閃爍)。
已被取代:
- <acronym> 改用 <abbr>。
- <applet> 改用 <object> 或 <embed>。
- <dir> 改用 <ul>。
12. 結論與未來展望
HTML5 已不僅僅是標記語言,它是構建現代 Web 體驗的語意平台。從 div 湯(Div Soup)轉向語意化分區,從 JS 驗證轉向原生表單約束,這些轉變不僅提升了程式碼的可維護性,更是實現「Web for All」(可訪問性)與「Machine Readable」(SEO)的基石。
2026 年開發者的四大黃金法則:
- 語意優先 (Semantics First):永遠選擇最具描述性的標籤。一個 <button> 永遠優於帶有 onclick 的 <div>。
- 擁抱原生可訪問性:正確使用地標元素(Landmarks)與原生控制項,可自動解決 80% 的可訪問性問題。
- 效能內建於標記:熟練使用 loading="lazy", fetchpriority, content-visibility,在 HTML 層級即調度渲染路徑。
- 組件化思維:掌握 <template> 與 <slot>,這是通往 Web Components 與框架無關(Framework-Agnostic)未來的鑰匙。
這份百科全書不僅是語法的速查表,更是現代前端工程標準的縮影。隨著 Web 標準的持續演進,持續關注如 <model>(3D 模型)或 <fencedframe>(隱私沙箱)等實驗性元素,將是保持技術競爭力的關鍵。
