range

Baseline 2023
新推出

自 2023 年 9 月起,此功能可在最新的裝置和瀏覽器版本上使用。此功能可能無法在較舊的裝置或瀏覽器上使用。

range 描述符允許作者在定義自定義計數器樣式時使用 @counter-style 規則指定一個或多個計數器值範圍,以應用特定樣式。當包含 range 描述符時,定義的計數器將只用於指定範圍內的值。如果計數器值超出指定範圍,將使用備用樣式來構建該標記的表示。

語法

css
/* Keyword value */
range: auto;

/* Range values */
range: 2 5;
range: infinite 10;
range: 6 infinite;
range: infinite infinite;

/* Multiple range values */
range:
  2 5,
  8 10;
range:
  infinite 6,
  10 infinite;

其值是一個逗號分隔的範圍列表,每個範圍都包含一個下限和上限,或者關鍵字 auto

auto

計數器 system 可表示的整個數字集合。這些範圍值取決於計數器系統。

  • 對於 cyclicnumericfixed 系統,範圍是從負 infinity 到正 infinity
  • 對於 alphabeticsymbolic 系統,範圍是從 1 到正 infinity
  • 對於 additive 系統,範圍是從 0 到正 infinity
  • 當使用 extend 擴充套件一個系統時,範圍是 auto 會為被擴充套件的系統生成的值,包括複雜預定義樣式(例如一些日文、韓文、中文和衣索比亞計數器樣式)的擴充套件。
[ [ <integer> | infinite ]{2} ]#

逗號分隔的範圍列表中的每個範圍都包含兩個值,每個值要麼是 <integer>,要麼是關鍵字 infinite。如果 infinite 用作範圍中的第一個值,則表示負無窮大;如果用作第二個值,則表示正無窮大。每個範圍的第一個值是該範圍的下限,第二個值是上限(包含)。如果列表中任何範圍的下限高於上限,則整個 range 描述符無效並將被忽略。

描述

range 描述符的值可以是 auto,也可以是使用負整數或正整數,或者關鍵字 infinite 指定的逗號分隔的下限和上限範圍列表。

理解 auto

當值設定為 auto 時,範圍是計數器系統的預設範圍。如果 systemcyclicnumericfixed,範圍將從負無窮大到正無窮大。如果 systemalphabeticsymbolic,範圍將從 1 到正 infinity。對於 system: additiveauto 會導致範圍為 0 到正 infinity

當擴充套件計數器時,如果 range 設定為 auto,則範圍值將是被擴充套件的計數器系統的 system 的範圍,而不是該計數器(如果存在)的 range 值。例如,如果計數器“B”設定了 system: extends A,而計數器“A”是一個 alphabetic 計數器,則在“B”上設定 range: auto 會將“B”的範圍設定為從 1infinity。這是 alphabetic 系統的範圍,不一定是“A”計數器樣式定義中設定的範圍。當“B”上設定 range: auto 時,range 被設定為 alphabetic 系統的預設範圍,而不是計數器 A 的描述符列表中設定的 range 值。

infinite 解釋

當範圍被指定為整數(而不是 auto)時,可以使用 infinite 值來表示無窮大。如果 infinite 被指定為範圍中的第一個值,則它被解釋為負無窮大。如果用作上限,即範圍對中的第二個值,則它被視為正無窮大。

範圍列表

range 的值要麼是上面討論的 auto,要麼是一個或多個範圍的逗號分隔列表。計數器樣式的範圍是列表中定義的所有範圍的並集。

範圍列表中的每個範圍都取兩個值。這些值要麼是 <integer>,要麼是關鍵字 infinite。第一個值是 下限(包含)。第二個值是 上限(包含)。對於兩個整數值,較小的值必須在前。如果列表中任何範圍的下限高於上限,則整個 range 描述符無效並將被忽略。infinite 關鍵字不會使範圍無效,因為 infinite 的位置決定了它的值;根據它是下限還是上限,分別表示負無窮大或正無窮大。

正式定義

相關的 at-rule@counter-style
初始值auto
計算值同指定值

正式語法

range = 
[ [ <integer> | infinite ]{2} ]# |
auto

示例

在給定範圍內設定計數器樣式

HTML

html
<ul class="list">
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
  <li>Four</li>
  <li>Five</li>
  <li>Six</li>
  <li>Seven</li>
  <li>Eight</li>
  <li>Nine</li>
  <li>Ten</li>
</ul>

CSS

css
@counter-style range-multi-example {
  system: cyclic;
  symbols: "\25A0" "\25A1";
  range:
    2 4,
    7 9;
}

.list {
  list-style: range-multi-example;
}

結果

範圍列表中的第一個範圍包括 2、3 和 4。第二個範圍包括 7、8 和 9。最終範圍是這兩個範圍的並集,即 2、3、4、7、8 和 9。

規範

規範
CSS Counter Styles Level 3
# counter-style-range

瀏覽器相容性

另見