許多類型的內容最適合以 HTML 清單表示。如果是食譜步驟或文章註腳等有序清單內容,標記通常也會包含資訊。CSS 提供多種方式來控制清單中的計數器。
列出樣式
預先定義的清單樣式類型相當廣泛,支援數字、字母、羅馬數字和許多國際計數系統。
除了瀏覽器支援的樣式外,W3C 也發布了現成計數器樣式,支援 45 種書寫系統的 181 種額外樣式。
如果這些選項不符合需求,您也可以定義自訂 @counter-style
。您可以指定自訂符號、前置字串和後置字串等。
根據預設,項目標記為 outside
清單,位於清單前方,並靠右對齊。您也可以使用 list-style-position: inside
將項目標記放在清單內。
計數器
清單樣式可控管清單項目標記的顯示方式,計數器則可控管要顯示的值。如果是 <li>
清單項目元素,瀏覽器會建立名為 list-item
的計數器,每遇到一個清單項目,計數器就會遞增 1。
CSS 計數器會持續計算已設定相應 counter-increment
值的元素算繪次數。
如要建立新的計數器,請使用 counter-reset
,並提供計數器名稱和 (選擇性) 初始值。您通常會在包含所有待計數元素的父項元素上設定這項屬性。
然後在要計數的每個元素上新增 counter-increment
屬性。
最後,使用 counter()
函式顯示計數器值。
在這個範例中,我們希望將註腳的執行計數顯示為每個註腳的連結文字。由於我們希望整個文件只有一個計數器,因此我們在主體上設定 counter-reset: note
,並在每個註腳連結上遞增。
你也可以使用多個計數器計算不同項目。在附註範例中,如果想顯示附註所在章節和段落的索引,該怎麼做?
您可以使用 counter-reset
在主體上建立區段計數,然後在每個 <h2>
元素上遞增。我們希望每個區段的段落計數都能重設,因此會在 <h2>
元素上使用 counter-reset
,並在 <p>
元素上遞增。
最後,我們會在 content
屬性中合併計數器值。
a:after {
content: "(S" counter(section) "P" counter(paragraph) "N" counter(note) ")";
font-size: small;
vertical-align: super;
}
巢狀計數器
在清單中巢狀插入清單會有什麼影響?系統會為每個 <ul>
或 <ol>
元素初始化 list-item
計數器,而使用 counter()
只會傳回最內層的計數。如要顯示每個巢狀計數器的計數,請使用 counters()
函式,該函式會採用計數器名稱和分隔符號。
li::marker {
content: counters(list-item, ".")
}
反向計數器
根據預設,計數器 (包括 <ol>
元素的隱含 list-item
計數器) 會從 0 開始,每個元素會遞增 1,也就是說第一個元素會計為 1。如果想倒數到 1 呢?
如要這麼做,請將 reversed
屬性新增至 <ol>
。如果您使用標準清單樣式,標記會正常運作。不過,如果您使用自訂計數器,則必須將 counter-increment
設為負值,並手動計算計數器的起始值。