<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 )" ] "; }