好きなリストマーカーを自由に設定できるように
::before擬似要素を使ってリストマーカー用のクラスを作ってみた。
css/list.css
もちろんテキストが複数行になってもインデントが揃っている。
サンプルページ:CSS list-marker sample page
.marker { display: block; padding-left: 1em; } .marker::before { content: ""; display: block; float: left; margin-left: -1em; width: 1em; text-align: center; }::before擬似要素でブロック要素を生成して float: left; で要素の左に並べる。
要素を padding-left: 1em; で左に間を空けて margin-left: -1em; で左に戻す。
width: 1em; で text-align: center; を指定しておけば半角文字のマーカーが真ん中に来て良い感じになる。
::before という書き方は擬似クラスと擬似要素が多くなった CSS3 からの書き方なので
IE8 では対応してないので :before と書く必要がある。ちなみに IE6/7はサポートすらされていない。
上のクラスを指定しただけではリストマーカーは表示されないので以下のように指定する。
content には画像や属性値を指定することもできる。
.marker.type_disc::before { content: "・"; } .marker.type_filled_circle::before { content: "●"; } .marker.type_outline_circle::before { content: "○"; } .marker.type_filled_square::before { content: "■"; } .marker.type_outline_square::before { content: "□"; } .marker.type_filled_diamond::before { content: "◆"; } .marker.type_outline_diamond::before { content: "◇"; } .marker.type_filled_star::before { content: "★"; } .marker.type_outline_star::before { content: "☆"; } .marker.type_filled_triangle::before { content: "▲"; } .marker.type_outline_triangle::before { content: "△"; } .marker.type_filled_inverted_triangle::before { content: "▼"; } .marker.type_outline_inverted_triangle::before { content: "▽"; }