<ol>のようなカウンター(連番)付きの要素をCSSプロパティだけで作ります。
<ol>要素を使うと連番付きのリストを作れますが、<ol>要素を使わないで同様の結果を得ます。
| CSSプロパティ | 設定内容 |
|---|---|
counter-increment | カウンター変数の定義。増分の指定。 |
counter-reset | カウンターを初期化する。初期値の指定。 |
counter-increment
.sampleクラスを持つ<div>要素を準備します。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
counter-incrementプロパティでカウンターcntを定義します。 この時点では実行結果に変化はありません。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt; }
::before疑似要素を使って、文字列の前にカウンターcntの値を表示させます。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt; } .children::before { content: counter( cnt ); }
カウンターを[]で囲むように変更します。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt; } .children::before { content: "[ "counter( cnt )" ] "; }
[]で囲む増分の変更
デフォルトの増分は+1ですが、2つ目の設定値を指定することで、増分を変化させることができます。 +2と-2の例を示します。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt 2; } .children::before { content: "[ "counter( cnt )" ] "; }
+2<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt -2; } .children::before { content: "[ "counter( cnt )" ] "; }
-2複数のカウンター
複数のカウンター(以下の例ではcnt1とcnt2)を設置することができます。 cnt1の増分は+2、cnt2は-2とします。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt1 2 cnt2 -2; } .children::before { content: "[ "counter( cnt1 )" ][ "counter( cnt2 )" ] "; }
counter-reset
counter-incrementを設定してあります。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt; } .children::before { content: "[ "counter( cnt )" ] "; }
3番目の「🍋」でカウンターを初期化する方法を解説します。HTMLコードを編集して「🍋」の要素に.resetクラスを追加します。※ 実行結果に変化はありません。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children reset">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt; } .children::before { content: "[ "counter( cnt )" ] "; }
resetクラスを追加.resetクラスに対して、counter-resetプロパティをcntに設定します。 「🍋」でカウンターが初期化されて1に戻っています。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children reset">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt; } .children::before { content: "[ "counter( cnt )" ] "; } .reset { counter-reset: cnt; /* リセット */ }
resetクラスを追加デフォルト値
初期化するデフォルト値は0ですが、2つ目の設定値として初期化する値を指定できます。
10と20に初期化する例を示します。それぞれ11と21から始まります。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children reset">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt; } .children::before { content: "[ "counter( cnt )" ] "; } .reset { counter-reset: cnt 10; /* 11から */ }
10に初期化<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children reset">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt; } .children::before { content: "[ "counter( cnt )" ] "; } .reset { counter-reset: cnt 20; /* 21から */ }
20に初期化開始番号を指定する
常に30に初期化したい場合など、:first-child疑似要素を使って指定します。※ 31から始まります。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children reset">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt; } .children::before { content: "[ "counter( cnt )" ] "; } .children:first-child { /* 疑似要素 */ counter-reset: cnt 30; }
30に初期化なお、下のように(:first-child疑似要素ではなく).childrenクラスの中にcounter-resetを設定すると、常に初期化されてカウントアップしないので注意してください。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children reset">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.children { counter-increment: cnt; counter-reset: cnt 30; /* 常に初期化される */ } .children::before { content: "[ "counter( cnt )" ] "; }
30に初期化また、うまくカウントアップされない場合、親要素(この例では.parentクラス)でcounter-resetを設定すると上手く行くことがあります。
<div class="parent"> <div class="children">🍉</div> <div class="children">🍎</div> <div class="children reset">🍋</div> <div class="children">🍈</div> <div class="children">🍇</div> </div>
.children { border: 1px solid #ccc; /* 境界線 */ display: inline-block; /* インライン・ブロック要素 */ margin: 3px; /* 外側の余白 */ padding: 7px; /* 内側の余白 */ }
.parent { /* 親要素 */ counter-reset: cnt 30; } .children { counter-increment: cnt; } .children::before { content: "[ "counter( cnt )" ] "; }