CSSで2階層にカウンター設置
概要:箇条書き等の2階層リスト表(Pタグ)に各階層の行頭に自動的に連番を設定するCSSカウンタの事例です。
事例紹介
第1階層 1行目
第2階層 1行目
第2階層 2行目
第1階層 2行目
第2階層 1行目
第2階層 2行目
第2階層 3行目
第1階層 3行目
第2階層 1行目
第2階層 2行目
第2階層 3行目
第2階層 4行目
<div class="kn_two_layers"> <p>第1階層 1行目</p> <div> <p>第2階層 1行目</p> <p>第2階層 2行目</p> </div> <p>第1階層 2行目</p> <div> <p>第2階層 1行目</p> <p>第2階層 2行目</p> <p>第2階層 3行目</p> </div> <p>第1階層 3行目</p> <div> <p>第2階層 1行目</p> <p>第2階層 2行目</p> <p>第2階層 3行目</p> <p>第2階層 4行目</p> </div> </div>
事例のCSS
/* 2階層表示 */ .kn_two_layers div{margin-left:30px;} .kn_two_layers p{padding-left:2em; text-indent:-2em;} /* ===== Pタグ カウンタ 第一階層 ===== */ .kn_two_layers{ /* カウンタ設置 */ counter-reset:ctr 0; /* 名前付、初期値 */ } .kn_two_layers p:nth-of-type(n+1){ /* pの最初から最後迄 */ counter-increment:ctr; /* カウンタに+1 */ } .kn_two_layers p:nth-of-type(n+1)::before{ /* カウンタ値の表示 */ content:counter(ctr)" ."; } /* ===== Pタグ カウンタ 第二階層 ===== */ .kn_two_layers > div{ counter-reset:ctr_2 0; } .kn_two_layers > div > p:nth-of-type(n+1){ counter-increment:ctr_2; } .kn_two_layers > div > p:nth-of-type(n+1)::before{ content:counter(ctr_2)" )"; }
CSS説明・第2階層カウンタの設置。
2階層目の表示位置の設定
.kn_two_layers > div{margin-left:30px;}
第二階層の表示位置を第一階層より、右に30px空けて表示。
.kn_two_layers p{padding-left:2em; text-indent:-2em;}
テキストの折り返し(自動改行)の行頭を2emづらし見やすく。
カウンタ:設置・加算・表示
.kn_two_layers > div{counter-reset:ctr_2 0;}
ボックス直下の「div」にカウンタ設置とその名前付け「ctr_2」(任意)と初期値設定。初期値はデフォルト「0」で、この場合は記述しなくても可。「div」の前の「 >」は重要。
kn_two_layers > div > p:nth-of-type(n+1){counter-increment:ctr_2;}
ボックス直下の「div」の直下の「p」に最初から最後まで+1。加算値はデフォルト「1」で、変えたい場合はカウンタ名の後に半角スペースを入れて数値を記述。
.kn_two_layers > div > p:nth-of-type(n+1)::before{content:counter(ctr_2)" )";}
ボックス直下の「div」の直下の「p」の「先頭」に最初から最後までカウンタ値表示。
補助説明
疑似クラス「p:」は、リンクの「a:」やマウスホバー「a:hover」と同類で「p:」で連続する「p」にCSSを適用出来て、以下の様な使い方があります。
・「fist-child」、nth-child(2)、nth-child(n+1)1,last-child など
・「fist-of-type、nth-of-type(2)、nth-of-type(n+1)、last-of-type
pセレクタの他によく使う「div」・「ul」&「li」・「ol」&「li」、「dl」&「dt」&「dd」など。
疑似要素「::before」は、他に「::after」、「::first-letter」、「first-line」等があります。
「::before」は、指定されたセレクタ内容の前にcss要素を適用します。
セレクタの直下「>」とは、この事例のHTMLで見ると「pセレクタ」は第一階層と第二階層にもあります。直下の「>」がないと、全ての「p」に適用されてしまいます。