CSSカウンターで自動ナンバリング


CSSカウンターとは

文書内の位置に基づいてコンテンツの表示方法を調整することができます。
例えば、ウェブページ内の見出し番号を自動的に振るのに使ったりします。カウンターは本質的に、 CSS が管理する変数であり、 CSS の規則によって増加し、何回使用されたかを追跡するものです。
出典 : https://developer.mozilla.org/ja/docs/Web/Guide/CSS/Counters

ランキングや目次などで「ナンバリングしたい」って時に、CSSカウンターを使うとよい感じにできます
※以下、pugとstylusで書いています

ul
  - for(var x = 0; x < 5; x++)
    li sample
li
  list-style: none
  counter-increment: num
  &:before
    content: counter(num) "."

counter-increment : 要素の連番(カウンタ)の値を進める。値にカウンタ名を定義することでページ内にその要素が現れるたびに、定義したカウンタの値が進められます。
プロパティを適用する要素に:beforeや:after擬似要素をつけ、contentプロパティでカウンタ名を指定することで、要素の直前または直後にカウンタの値を挿入することができます。

数字形式の表示方法の変更

content: counter(num, 表示形式)
decimal 数字(初期値)
lower-roman ローマ数字(小文字)(例:ⅰ、ⅱ、ⅲ)
upper-roman ローマ数字(大文字)(例:Ⅰ、Ⅱ、Ⅲ)
lower-alpha アルファベット(小文字)(例:a、b、c)
cjk-ideographic 漢数字(例:一、二、三)
hiragana ひらがな(例:あ、い、う)
katakana カタカナ(例:ア、イ、ウ)
hiragana-iroha いろは順(例:い、ろ、は)
katakana-iroha イロハ順(例:イ、ロ、ハ)

※cjk-ideographicから下はIE非対応

カウンターの前後に文字列を挿入する

content: "第" counter(num) "章 "

counters() 関数

counters() 関数を使って入れ子になったカウンターの階層間に文字列を挿入することができます。
その際、子要素にcounter-resetプロパティでカウンタの値をリセットするのがポイント。

ul.parent
  - for(var x = 0; x < 3; x++)
    li sample
      ul.children
        - for(var y = 0; y < 2; y++)
          li test
li
  list-style: none
  counter-increment: num
.parent
  li
    &:before
      content: counter(num) "."  
.children
  counter-reset: num
  li
    &:before
      content: "第" counters(num, "-") "章 "

(編集途中で下書き保存したまま放置していた記事をようやく書き上げましたw)