🗂
動的に生成されるolの数が1つなら、CSSで番号を表示しないようにする
0.やりたいこと
-
動的に生成されるolが1つの時に
1.テスト
ではなくテスト
と表示したい。 -
リストの前の数字が
(1)テスト(2)テスト
となるように表示したい。 -
これら全てをCSSで実装したい。
1.olの数が1つの時に番号を表示しないようにする
これはCSSの擬似要素の:only-of-type
を使うことで実装できる。
:only-of-type
は同じ型の兄弟要素がない時にそのCSSが適用される。
html
<ol>
<li>test1</li>
</ol>
css
ol li:only-of-type {
list-style-type :none;
}
このように書くと、li
が1つしかないときにlist-style-type :none;
が適用されて、リストの番号を消すことが出来る。
result
test1
2.olのリストを修飾する
リストを修飾するにはcontent
とcounter
を使用する。
html
<ol>
<li>test1</li>
<li>test2</li>
</ol>
css
ol{
list-style-type: none;
counter-reset: cnt;
}
li::before {
counter-increment: cnt;
content: '('counter(cnt)')';
}
result
(1)test1
(2)test2
これでolの修飾は完成する。
しかし、content
を使った修飾を行う場合、list-style-type
が適用されないので、1の方法を変える必要がある。
この問題は擬似要素の:not()
を使うことで解決する。
html
<ol>
<li>test1</li>
</ol>
css
ol{
list-style-type: none;
counter-reset: cnt;
}
li::before:not(:only-of-type) {
counter-increment: cnt;
content: '('counter(cnt)')';
}
result
test1
擬似要素:not()
を使うことにより、要素が1つではない場合にCSSを適用するように設定することによって、今回の要件を満たすことが出来た。
まとめ
CSSの擬似要素を使うと、JSなどを使わずに色々な装飾を条件に分けて使いこなせるのですごい。
Discussion