精通 HTML 清單:超越 `<ul>` 與 `<ol>` 的基礎知識

大多數開發者將 HTML 清單視為二選一的問題:你要項目符號 (<ul>) 還是數字 (<ol>)?雖然這對於基礎內容來說已經足夠,但它忽略了 W3C 規範所提供的豐富語義景觀。選擇正確的清單元素不僅僅是為了視覺呈現;它更是為了無障礙性、SEO 以及為瀏覽器提供關於您數據的正確上下文。

要真正精通 HTML 清單,您必須超越入門教學,並理解五種不同的內容集合分組方式:控制清單 (Control lists)、有序清單 (Ordered lists)、描述清單 (Description lists)、選單 (Menus) 以及無序清單 (Unordered lists)。

選擇正確的清單

選擇合適的元素取決於數據的性質以及預期的用戶互動。以下是一個快速的決策框架:

  1. 用戶輸入/數據收集: 使用 <select> + <option><input> + <datalist>
  2. 順序具有意義: 如果改變順序會改變清單的意義,請使用有序清單 (<ol>)。
  3. 鍵值對 (Key-Value Pairs): 對於術語及其相關的描述或元數據,請使用描述清單 (<dl>)。
  4. UI 操作控制: 對於一系列互動式命令或工具列,請使用選單 (<menu>)。
  5. 一般集合: 對於其他所有內容,請使用無序清單 (<ul>)。

控制清單:管理用戶輸入

控制清單經常被忽視,因為它們與表單而非內容相關聯。然而,它們對於結構化的用戶互動至關重要。

使用 <select><option> 的固定選擇

當用戶必須從預定義的一組選項中進行選擇時,<select> 元素是標準做法。對於更複雜的清單,您可以使用 <optgroup> 來對選項進行分類,使長清單更易於管理。

進階開發者還可以利用 size 屬性來同時顯示多個選項,或者插入 <hr> 以進行視覺分隔——這些都是原生 HTML 功能,可以減少對自定義 CSS 的依賴。

使用 <datalist> 的建議選擇

與限制用戶只能選擇特定選項的 <select> 不同,<datalist> 在提供建議的同時,仍允許自由文本輸入。它透過 list 屬性與 <input> 進行關聯。

一個關鍵的注意事項是 value 屬性的使用。在 datalist 中,value 是實際插入輸入框中的內容,而內部文本則作為標籤。如果兩者不同,用戶可能會在從選擇標籤到看到文本框中的代碼時,經歷一種突兀的轉換。

有趣的是,<datalist> 並不限於文本。它可以與 type="week"type="range" 配對,以創建帶標籤的停靠點或建議的日期範圍,從而提供更具引導性的用戶體驗。

有序清單 (<ol>):當順序很重要時

有序清單的定義不在於它是否顯示數字,而是在於項目的順序是否具有意義。演算法、食譜和字母順序清單都是典型的例子;如果在食譜中將第二步與第一步互換,結果就會改變。

進階 <ol> 屬性

  • reversed:此屬性可以在不改變項目實際順序的情況下,翻轉編號順序(遞減)。這對於「從多到少」的排名非常理想。
  • start:這允許您在被其他內容(如標題)分隔的多個清單之間建立連續性,確保整個文檔的編號保持一致。

描述清單 (<dl>):被遺忘的工具

以前被稱為「定義清單」,<dl> 元素已演變成任何鍵值對的通用工具。

超越定義

雖然最初是為了字典而設計,但描述清單非常適合:

  • 元數據 (Metadata): 用戶配置文件(例如:姓名:Frank,工作:作家)在語義上屬於描述清單。
  • JSON 偵錯: 因為 JSON 本質上是鍵與值的集合,將 JSON 對象渲染成 <dl> 是在開發過程中視覺化數據結構的一種非常有效的方法。

在 HTML5 中,規範現在允許在 <dl> 內部使用 <div> 包裹器,這使得使用 Flexbox 或 Grid 進行樣式設計變得更加容易,且不會破壞語義。

使用 <menu> 的應用選單

<menu> 元素是專門為互動式命令清單而設計的。雖然它看起來像 <ul>,但其語義目的是定義一個工具列。

<nav> vs. <menu>

人們常會混淆這兩者,但它們扮演不同的角色:

  • <nav> 是一個 分段 (sectioning) 元素。它定義了頁面中用於導航的區域,可以包含標題、段落和清單。
  • <menu> 是一個 清單 (list) 元素。它專門包含代表用戶可以採取的行動的 <li> 元素。

至關重要的是,一個 <menu> 可以放在 <nav> 內部,但一個 <nav> 不能放在 <menu> 內部。

無序清單 (<ul>):語義上的萬用口袋

無序清單是 HTML 的「垃圾桶」。當項目之間有關聯,但其特定順序不帶有內在意義時使用它——例如樂團成員名單或頁腳中的鏈接集合。

實際考量與注意事項

雖然 HTML 規範提供了這些強大的工具,但現實世界的實施往往面臨瀏覽器不一致性。社群回饋強調了幾點注意事項:

  • Mobile Safari 相容性: 一些用戶報告 <datalist><optgroup> 上的 disabled 屬性在 Mobile Safari 上運作不一致,這可能需要為高流量的移動端網站提供備選方案。
  • Styling 靈活性: 為了避免選單和導航欄中的預設「清單項目 (list-item)」外觀,建議在 CSS 中針對 nav limenu li 全域重置 list-style-typetext-indentmargin

通過超越基礎的 <ul><ol>,開發者可以創建不僅在視覺上吸引人,而且在結構上穩固且對所有用戶都具具備無障礙性的網頁。

Sources