- CSS
CSS list-styleの使い方|リストの点を消す・マーカーの色を変える
list-style は、箇条書き(ul・ol)の先頭に付く点や番号=マーカーの「種類・位置・画像」をまとめて指定するプロパティです。点を消すなら list-style: none;、色を変えるなら li::marker { color: 色; } と書きます。
この記事では、list-style-type の値を実際の表示結果つきの一覧にし、「点を消したのに左の余白が残る」「点がはみ出す」「flex にしたら点が消えた」といった症状を、数値を測りながら直していきます。マーカーの色・サイズ・文字を変える3つの方法(::marker、::before、@counter-style)の比較と、::marker で使えるプロパティの表も載せました。出力はすべて Chromium 141(Playwright 経由)で確かめたもので、Firefox と Safari では動かしていません。
list-styleの早見表
| やりたいこと | 書き方(コピペ用) |
|---|---|
| 点を消す | ul { list-style: none; } |
| 点も左の余白も消す | ul { list-style: none; padding: 0; margin: 0; } |
| 点を四角にする | ul { list-style-type: square; } |
| 番号をローマ数字にする | ol { list-style-type: upper-roman; } |
| 好きな文字を点にする | ul { list-style-type: "→ "; } |
| 点を文章の内側に入れる | ul { list-style-position: inside; } |
| 点を画像にする | ul { list-style-image: url("check.svg"); } |
| 種類と位置をまとめて書く | ul { list-style: square inside; } |
| 点の色だけ変える | li::marker { color: tomato; } |
| 点の大きさだけ変える | li::marker { font-size: 1.4em; } |
| 点を好きな図形にする | list-style: none + li::before で描く |
| 丸数字①②③にする | @counter-style で定義して list-style: 名前; |
| 番号を途中から始める | <ol start="11"> |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「CSS list-styleの使い方|リストの点を消す・マーカーの色を変える」
list-styleの基本:3つのプロパティと初期値
list-style は、次の3つをまとめて書ける一括指定(ショートハンド)です。
| プロパティ | 役割 | 初期値 | 主な値 |
|---|---|---|---|
list-style-type |
マーカーの種類 | disc |
disc、decimal、none、文字列など |
list-style-position |
マーカーの位置 | outside |
outside、inside |
list-style-image |
マーカーに使う画像 | none |
url(...)、グラデーション、none |
ブラウザが最初から当てているスタイルも確認しておきます。Chromium 141 で測った値です。
| 要素 | list-style-type | padding-left | 上下の margin | li の display |
|---|---|---|---|---|
ul |
disc | 40px | 16px | list-item |
ul の中の ul(2階層目) |
circle | 40px | 0px | list-item |
3階層目の ul |
square | 40px | 0px | list-item |
ol |
decimal | 40px | 16px | list-item |
ここで大事なのは2点です。マーカーは li の display: list-item によって出ていること、そして左の空きは ul・ol の padding-left: 40px(マーカーを置くための場所)であることです。後半の「症状別の直し方」は、ほぼこの2点で説明できます。
list-style は継承されるプロパティなので、ul・ol に書けば中の li に伝わります。li に直接書いても構いません。
list-style-typeの値と表示結果の一覧
<ol> に4つの項目を入れ、各値を指定したときに Chromium 141 がマーカーとして出した文字列です(アクセシビリティツリーの ListMarker から取得)。
記号のマーカー(ul 向け)
| 値 | 1〜4番目の表示 | 説明 |
|---|---|---|
disc |
• • • • | 黒丸。ul の初期値 |
circle |
◦ ◦ ◦ ◦ | 白丸 |
square |
■ ■ ■ ■ | 四角 |
disclosure-closed |
▸ ▸ ▸ ▸ | 閉じた三角。開閉部品の目印向け |
disclosure-open |
▾ ▾ ▾ ▾ | 開いた三角 |
none |
(マーカーなし) | 点も番号も出さない |
"→ "(文字列) |
→ → → → | 引用符で囲んだ文字がそのまま出る |
"✓"(文字列) |
✓ ✓ ✓ ✓ | 空白を入れないと文章とくっつく |
番号のマーカー(ol 向け)
| 値 | 1〜4番目の表示 | 説明 |
|---|---|---|
decimal |
1. 2. 3. 4. | 数字。ol の初期値 |
decimal-leading-zero |
01. 02. 03. 04. | 先頭に0を付ける |
lower-roman |
i. ii. iii. iv. | ローマ数字(小文字) |
upper-roman |
I. II. III. IV. | ローマ数字(大文字) |
lower-alpha/lower-latin |
a. b. c. d. | アルファベット(小文字) |
upper-alpha |
A. B. C. D. | アルファベット(大文字) |
lower-greek |
α. β. γ. δ. | ギリシャ文字 |
日本語・漢字のマーカー
| 値 | 1〜4番目の表示 | 説明 |
|---|---|---|
hiragana |
あ、い、う、え、 | ひらがな(五十音順) |
katakana |
ア、イ、ウ、エ、 | カタカナ(五十音順) |
hiragana-iroha |
い、ろ、は、に、 | いろは順 |
katakana-iroha |
イ、ロ、ハ、ニ、 | いろは順(カタカナ) |
cjk-decimal |
一、二、三、四、 | 漢数字 |
cjk-ideographic |
一、二、三、四、 | 漢数字 |
japanese-informal |
一、二、三、四、 | 漢数字(十・百などを使う表記) |
japanese-formal |
壱、弐、参、四、 | 大字(改まった書類向けの漢数字) |
cjk-heavenly-stem |
甲、乙、丙、丁、 | 十干 |
cjk-earthly-branch |
子、丑、寅、卯、 | 十二支 |
数字やアルファベットは「.」、日本語系は「、」が後ろに付きます。この区切り文字を変えたい場合は、後述の @counter-style を使います。
ul に decimal を指定して番号を出すことも、ol に disc を指定して点にすることもできます。ただし、順番に意味があるなら ol、ないなら ul という HTML の使い分けは、見た目とは別に守っておくと、読み上げソフトなどにも正しく伝わります。
複数の記号を交互に出す symbols() について
list-style-type: symbols(cyclic "◆" "◇") という書き方も仕様にありますが、Chromium 141 では CSS.supports が false を返し、指定は反映されませんでした(初期値の表示のまま)。同じことは @counter-style で書けるので、そちらを使うのが確実です。
一括指定 list-style の書き順
list-style に書く3つの値は、どの順番で書いても構いません。省略した値は初期値に戻ります。 一般には「type → position → image」の順で書かれることが多く、その順にそろえると読みやすくなります。
Chromium 141 で一括指定を解釈させた結果です。
| 書いた値 | type | position | image |
|---|---|---|---|
list-style: none |
none | outside | none |
list-style: square |
square | outside | none |
list-style: inside |
disc | inside | none |
list-style: square inside |
square | inside | none |
list-style: inside square |
square | inside | none |
list-style: url(a.png) square inside |
square | inside | url("a.png") |
list-style: none inside |
none | inside | none |
list-style: none url(a.png) |
none | outside | url("a.png") |
list-style: "- " inside |
"- " | inside | none |
list-style: square circle |
(無効) | (無効) | (無効) |
読み取れるルールは次のとおりです。
- 順番は自由です。
square insideとinside squareは同じ結果になりました。 - 書かなかった値は初期値に戻ります。
list-style: insideだけを書くと type は disc に戻るので、別の場所でlist-style-type: squareを指定していても上書きされます。一括指定は個別指定より後に書かない、という順序に気を付けてください。 noneは type と image の両方に当てはまる値です。list-style: noneは「種類なし・画像なし」になり、none url(a.png)と書くと none は type 側に割り当てられます。- 同じ種類の値を2つ書くと無効です(
square circle)。
画像と種類を両方書いておくと、画像が読み込めなかったときに種類のほうで表示されるため(仕様上の動作で、今回は未実行)、list-style: square url("check.svg"); のように代わりの種類を添えておくと安心です。
list-style-positionで点の位置を決める
outside(初期値)はマーカーが li の箱の外側、inside は箱の内側(文章の先頭)に置かれます。 違いは、文章が2行以上に折り返したときにはっきり出ます。
幅 120px の ul に長い文章を入れ、各行の文字の左端を測りました。
| 値 | 1行目の左端 | 2行目の左端 | 3行目の左端 | 見え方 |
|---|---|---|---|---|
outside |
40px | 40px | 40px | 行頭がそろい、点だけが左に出る |
inside |
62px | 40px | 40px | 1行目だけ点の分(22px)字下げされ、2行目以降は点の下に回り込む |
/* 行頭をそろえたい(一般的な箇条書き) */
ul.default { list-style-position: outside; }
/* li に背景色や枠線を付けて、点もその中に収めたい */
ul.boxed { list-style-position: inside; }
ul.boxed li { background: #f4f6f8; padding: 8px 12px; }
| 場面 | 向いている値 |
|---|---|
| 折り返しのある文章を読みやすく並べたい | outside |
| li に背景・枠線を付け、点も中に入れたい | inside |
| ul の左の余白を 0 にしたいが点は残したい | inside(または padding-left を点の幅ぶん残す) |
list-style-imageで点を画像にする
ul.check {
list-style-image: url("check.svg");
}
/* グラデーションも画像として指定できる */
ul.grad {
list-style-image: linear-gradient(tomato, orange);
}
list-style: url(a.png) square inside を指定すると、計算後の list-style-image が url("a.png") になることを確かめました。画像ファイルを用意しての見た目の確認と、グラデーション指定の表示確認は未実行です。
list-style-image には画像の大きさや位置を調整するプロパティがありません。 画像そのものの大きさで表示されるため、次のように使い分けます。
| やりたいこと | 向いている方法 |
|---|---|
| ちょうどよい大きさの画像をそのまま出す | list-style-image |
| 大きさ・上下位置を細かく合わせたい | li::before に background で置く(後述) |
| 絵文字や記号で足りる | list-style-type: "✓ " や ::marker { content: ... } |
症状別の直し方
まず、次のHTMLで各パターンの数値を測りました。保存してブラウザで開くと同じ一覧が出ます。
<!doctype html>
<html lang="ja">
<meta charset="utf-8">
<title>リストの余白と点を調べる</title>
<style>
body { margin: 0; }
.a { }
.b { list-style: none; }
.c { list-style: none; padding: 0; margin: 0; }
.d { padding: 0; }
.e { padding: 0; list-style-position: inside; }
.f li { display: flex; }
.g { display: flex; gap: 2em; }
</style>
<ul class="a"><li>項目</li></ul>
<ul class="b"><li>項目</li></ul>
<ul class="c"><li>項目</li></ul>
<ul class="d"><li>項目</li></ul>
<ul class="e"><li>項目</li></ul>
<ul class="f"><li>項目</li></ul>
<ul class="g"><li>項目</li></ul>
<pre id="out"></pre>
<script>
const rows = [...document.querySelectorAll("ul")].map((ul) => {
const li = ul.querySelector("li");
const range = document.createRange();
range.selectNodeContents(li.firstChild); // 文字そのものの位置
const s = getComputedStyle(ul);
return "." + ul.className
+ " type=" + s.listStyleType
+ " padding-left=" + s.paddingLeft
+ " margin-top=" + s.marginTop
+ " liのdisplay=" + getComputedStyle(li).display
+ " 文字の左端=" + Math.round(range.getBoundingClientRect().left) + "px";
});
document.getElementById("out").textContent = rows.join("\n");
</script>
</html>
Chromium 141 での表示です。
.a type=disc padding-left=40px margin-top=16px liのdisplay=list-item 文字の左端=40px
.b type=none padding-left=40px margin-top=16px liのdisplay=list-item 文字の左端=40px
.c type=none padding-left=0px margin-top=0px liのdisplay=list-item 文字の左端=0px
.d type=disc padding-left=0px margin-top=16px liのdisplay=list-item 文字の左端=0px
.e type=disc padding-left=0px margin-top=16px liのdisplay=list-item 文字の左端=22px
.f type=disc padding-left=40px margin-top=16px liのdisplay=flex 文字の左端=40px
.g type=disc padding-left=40px margin-top=16px liのdisplay=list-item 文字の左端=40px
この結果をもとに、症状ごとに見ていきます。
点を消したのに左の余白が残る
list-style: none はマーカーを消すだけで、ul の padding-left: 40px は残ります。 上の .b の行で、type が none になっても padding-left は 40px、文字の左端も 40px のままです。
直す前:
ul { list-style: none; }
直した後:
ul {
list-style: none;
padding: 0; /* 左の 40px を消す */
margin: 0; /* 上下の 16px も消す(必要な場合) */
}
.c の行のとおり、padding-left が 0px、margin-top が 0px、文字の左端が 0px になりました。上下の余白は残したい場合は margin: 0 を外します。書字方向に左右されない書き方にするなら padding-inline-start: 0; でも同じ場所を指定できます(padding-inline-start: 1.2em で文字の左端が 19px になることを確認)。
点がはみ出す・点が見えなくなる
点を残したまま padding: 0 にすると、マーカーが ul の箱の外(左側)に出ます。 .d の行では、type は disc のまま文字の左端が 0px になっています。マーカーは文字の左に置かれるので、画面の左端より外や、隣の要素の上に重なって見えます。親に overflow: hidden があると、はみ出した部分は切り取られて見えなくなります。
スクリーンショットでも確かめました。ul の左端を 50px の位置に置いたとき、padding: 0 では点が 34px の位置(箱の外)に描かれ、ul に overflow: hidden を足すと箱の外の描画は 0 ピクセルになりました。list-style-position: inside と padding-left: 1.5em では、点は箱の中に収まっています。
リセット用の CSS で全要素の padding を 0 にしている場合に、よく起きる症状です。直し方は3つあります。
| 直し方 | コード | 結果(測定値) |
|---|---|---|
| 点の場所を padding で確保する | ul { padding-left: 1.5em; } |
文字の左端 24px。点はその左に収まる |
| 点を内側に入れる | ul { padding: 0; list-style-position: inside; } |
文字の左端 22px(.e の行) |
| 初期値に戻す | ul { padding-left: 40px; } |
文字の左端 40px |
折り返しのある文章なら1つ目、li に背景を付けるなら2つ目が向いています。
flexにすると点が消える
li に display: flex を指定すると、li が list-item でなくなるためマーカーが出なくなります。 .f の行で li の display が flex になっています。Chromium 141 では、このときマーカーが1つも出力されませんでした。display: grid、display: block、display: inline-block でも同じ結果です。
| 指定 | li の display | マーカー |
|---|---|---|
li { display: flex; } |
flex | 出ない |
li { display: grid; } |
grid | 出ない |
li { display: block; } |
block | 出ない |
li { display: inline-block; } |
inline-block | 出ない |
ul { display: flex; } |
list-item | 出る |
| li の中の div を flex にする | list-item | 出る |
一方、ul 側を flex にしても li は list-item のままなので、点は残ります(.g の行)。横並びのメニューで点が残って困る場合は、list-style: none を足します。
li の中身を横並びにしつつ点も残したい場合は、li の中に1つ箱を入れて、その箱を flex にします。
直す前:
<ul>
<li style="display: flex; gap: 8px;"><span>品名</span><span>3個</span></li>
</ul>
直した後:
<style>
.row { display: flex; gap: 8px; }
</style>
<ul>
<li><div class="row"><span>品名</span><span>3個</span></div></li>
</ul>
なお、display: list-item flex という2語の書き方は、Chromium 141 では CSS.supports が false でした。現時点では上の「中に箱を入れる」方法が確実です。
逆に、li 以外の要素に display: list-item を指定するとマーカーが付きます。 <div> に指定して点が出ることを確認しました。
入れ子にしたら点の種類が変わった
前述の初期値の表のとおり、ブラウザは階層ごとに disc → circle → square と種類を変えます。全階層で同じにしたい場合は、子孫セレクタでまとめて指定します。
ul, ul ul, ul ul ul { list-style-type: disc; }
点を消したリストの読み上げ
Chromium 141 では、list-style: none を指定した ul も、アクセシビリティツリー上は list と listitem のままでした。ブラウザと読み上げソフトの組み合わせによっては、点を消したリストがリストとして案内されない場合があると一般に知られています(今回は未実行)。ナビゲーションなどでリストであることを確実に伝えたいときは、<ul role="list"> と明示する方法があります。
マーカーの色・サイズ・文字を変える3つの方法
色やサイズだけなら ::marker、形や位置まで作り込むなら ::before、番号の書式そのものを作るなら @counter-style が向いています。
| 比べる点 | ::marker | ::before | @counter-style |
|---|---|---|---|
| 色を変える | できる | できる | 色は ::marker と併用 |
| サイズを変える | できる(font-size) | できる | ::marker と併用 |
| 文字・記号を変える | できる(content) | できる(content) | できる(symbols) |
| 図形を描く(背景・枠線・角丸) | できない | できる | できない |
| 位置を細かく調整する | できない | できる(position など) | できない |
| 番号を自動で振る | そのまま使える | counter() を自分で書く | そのまま使える |
| list-style: none | 不要 | 必要 | 不要 |
| コード量 | 少ない | 多い | 中くらい |
方法1:::marker で色とサイズを変える
::marker は、li のマーカー部分だけを選ぶ疑似要素です。 いちばん短く書けます。
/* 点の色だけ変える */
li::marker {
color: tomato;
}
/* 番号を太く・大きく・色付きにする */
ol li::marker {
color: #1a73e8;
font-weight: 700;
font-size: 1.2em;
}
/* マーカーの文字を差し替える */
ul.arrow li::marker {
content: "▶ ";
color: tomato;
}
li::marker { color: tomato; } を指定したとき、li 本文の色は rgb(0, 0, 0) のままで、マーカーだけが変わりました。反対に、li に color を指定するとマーカーも同じ色になります(li に color: tomato → マーカーの計算後の色も rgb(255, 99, 71))。「文章は黒、点だけ色付き」にしたいときは ::marker を使います。content: "▶ " の差し替えも、マーカーが「▶ 」になることを確かめました。
方法2:::before で自由な形を作る
マーカーを消して、li の疑似要素で描き直す方法です。 背景色・角丸・大きさ・位置を自由に決められます。
ul.dot {
list-style: none;
padding: 0;
}
ul.dot li {
position: relative;
padding-left: 1.4em; /* 点を置く場所 */
}
ul.dot li::before {
content: "";
position: absolute;
left: 0.3em;
top: 0.55em; /* 1行目の中央あたり */
width: 0.5em;
height: 0.5em;
border-radius: 50%;
background: tomato;
}
このコードで、本来のマーカーは出力されず、::before の背景色が rgb(255, 99, 71) になることを確認しました。番号を自分で振る場合は、CSS カウンターを使います。
ol.circle {
list-style: none;
padding: 0;
counter-reset: num; /* カウンターを 0 に戻す */
}
ol.circle li {
counter-increment: num; /* li ごとに 1 足す */
position: relative;
padding-left: 2.2em;
margin-bottom: 0.5em;
}
ol.circle li::before {
content: counter(num);
position: absolute;
left: 0;
top: 0.1em;
width: 1.6em;
height: 1.6em;
border-radius: 50%;
background: #1a73e8;
color: #fff;
font-size: 0.85em;
text-align: center;
line-height: 1.6em;
}
丸で囲んだ番号の例(ol.circle)は書き方の紹介で、表示確認は未実行です。
方法3:@counter-style で書式を定義する
@counter-style は、list-style-type に指定できる「番号・記号の書式」を自分で作る仕組みです。 MDN では、2023年9月から主要ブラウザで広く使える機能(Baseline Widely available)と案内されています。
/* 丸数字 ①②③④⑤ */
@counter-style maru {
system: fixed;
symbols: "①" "②" "③" "④" "⑤";
suffix: " ";
}
/* すべてチェックマーク */
@counter-style check {
system: cyclic;
symbols: "✔";
suffix: " ";
}
/* (1) (2) (3) の形 */
@counter-style kakko {
system: extends decimal;
prefix: "(";
suffix: ") ";
}
ol.maru { list-style: maru; }
ul.check { list-style: check; }
ol.kakko { list-style: kakko; }
/* 色は ::marker と組み合わせる */
ul.check li::marker { color: green; }
Chromium 141 でのマーカーの出力です。
| 指定 | 1〜4番目の表示 |
|---|---|
list-style: maru |
① ② ③ ④ |
list-style: check |
✔ ✔ ✔ ✔ |
list-style: kakko |
(1) (2) (3) (4) |
check と ::marker { color: green; } を組み合わせると、マーカーの計算後の色が rgb(0, 128, 0) になりました。
system: fixed は、用意した記号を使い切ると既定の書式に切り替わります。 上の maru は記号が5つなので、7項目のリストでは「① ② ③ ④ ⑤ 6 7」と表示されました。項目数が増える可能性があるなら、記号を多めに用意しておきます。
| system の値 | 動き | 向いている用途 |
|---|---|---|
cyclic |
記号を順番に繰り返す | 全部同じ記号、2種類を交互に |
fixed |
記号を1回ずつ使い、尽きたら既定の書式へ | 丸数字など数に限りがある記号 |
numeric |
記号を「桁」として使う | 独自の数字 |
alphabetic |
a, b, …, z, aa, ab のように進む | 独自のアルファベット |
symbolic |
1周ごとに記号を重ねる | 注釈記号 |
additive |
重みを足し合わせる | ローマ数字のような書式 |
extends 名前 |
既存の書式を元に一部だけ変える | 区切り文字だけ変えたい |
表のうち numeric・alphabetic・symbolic・additive は MDN の説明に基づくもので、今回の実行対象は cyclic・fixed・extends の3つです。
::markerで使えるプロパティの制限
::marker に指定できるプロパティは限られています。 背景や余白を書いても反映されないのは、不具合ではなく仕様です。MDN の ::marker のページに載っている「使えるプロパティ」は次のとおりです。
| 分類 | プロパティ |
|---|---|
| フォント関連 | font-size、font-weight、font-family などすべての font 系 |
| 色 | color |
| 内容 | content |
| カウンター | counter-increment、counter-reset、counter-set |
| 文字の向き・空白 | direction、unicode-bidi、white-space、text-combine-upright |
| 引用符 | quotes |
| 動き | animation 系・transition 系のすべて |
Chromium 141 で、::marker に各プロパティを指定して計算後の値が変わるかを調べた結果です。
| プロパティ | 指定した値 | 結果 |
|---|---|---|
color |
red | 反映された |
font-size |
24px | 反映された |
font-weight |
700 | 反映された |
font-family |
monospace | 反映された |
content |
"★ " | 反映された |
background-color |
yellow | 反映されない |
margin-right |
20px | 反映されない |
padding-left |
20px | 反映されない |
width |
50px | 反映されない |
display |
none | 反映されない |
border(上の太さ) |
3px | 反映されない |
opacity |
0.5 | 反映されない |
transform |
rotate(10deg) | 反映されない |
position |
absolute | 反映されない |
vertical-align |
top | 反映されない |
text-decoration-line |
underline | 反映されない |
MDN では ::marker 全体が「Baseline ではない(一部の主要ブラウザで動作しない部分がある)」と案内されています。色とフォントという基本の用途から使い、背景・余白・位置の調整が必要になったら ::before に切り替える、という判断が分かりやすいです。
点と文字の間隔を調整したいとき
::marker に margin や padding は効かないため、間隔は次の方法で調整します。
| 方法 | コード | 備考 |
|---|---|---|
| li 側に余白を足す | li { padding-left: 0.5em; } |
outside のとき、点と文字の間が広がる |
| マーカーの文字列に空白を含める | li::marker { content: "▶ "; } |
空白の数で調整 |
| @counter-style の suffix を使う | suffix: " "; |
番号の後ろの文字を自由に決められる |
| ::before で作る | padding-left と left で調整 |
最も細かく合わせられる |
この表の4つは書き方の紹介で、間隔の測定は未実行です。
番号付きリスト(ol)で役立つ属性
番号の始まりや向きは、CSS ではなく HTML の属性で指定します。
<ol start="11">
<li>11番から始まる</li>
<li>12番</li>
</ol>
<ol reversed>
<li>3</li>
<li>2</li>
<li>1</li>
</ol>
<ol>
<li>1番</li>
<li value="5">ここだけ5番にする</li>
<li>続きは6番</li>
</ol>
Chromium 141 でのマーカーの出力は、順に「11. 12.」「3. 2. 1.」「1. 5. 6.」でした。
| 属性 | 付ける要素 | 働き |
|---|---|---|
start="11" |
ol | 最初の番号を指定する |
reversed |
ol | 大きい番号から小さい番号へ振る |
value="5" |
li | その項目の番号を指定し、以降は続きから振る |
コピペ用:よく使うリストのスタイル
/* 1. リセット:点も余白もなくす(メニューなど) */
.list-reset {
list-style: none;
margin: 0;
padding: 0;
}
/* 2. 横並びメニュー */
.list-inline {
list-style: none;
margin: 0;
padding: 0;
display: flex;
gap: 1.5em;
}
/* 3. 点の色だけ変える */
.list-color li::marker {
color: tomato;
}
/* 4. チェックマークのリスト */
.list-check {
list-style-type: "✓ ";
padding-left: 1.5em;
}
.list-check li::marker {
color: green;
font-weight: 700;
}
/* 5. 余白を詰めつつ点を残す */
.list-compact {
margin: 0;
padding-left: 1.5em;
}
.list-reset(none+padding 0+margin 0)、.list-compact(padding-left: 1.5em で文字の左端 24px)、文字列マーカー "✓" と ::marker の色指定は、それぞれ前述の測定で動作を確かめた書き方です。5つを1つのページにまとめた表示確認は未実行です。
よくある質問
Q. list-style: none と list-style-type: none はどちらを使えばよいですか?
A. 点を消す目的ならどちらでも同じ見た目になります。list-style: none は種類と画像の両方をなしにし、位置は初期値に戻します。list-style-type: none は種類だけを変えます。画像のマーカーを別の場所で指定している場合は、一括指定の list-style: none のほうが確実に消せます。
Q. ::marker に background や margin を書いても効かないのはなぜですか?
A. ::marker で使えるプロパティが、色・フォント・content などに限られているためです。Chromium 141 でも background-color、margin、padding、width は反映されませんでした。背景付きの丸や位置の調整が必要なときは、list-style: none にして li::before で作ります。
Q. li を flex にしても点を残す方法はありますか?
A. li の中に div などを1つ入れ、その要素を flex にします。li 自体が display: list-item のままなら点は残ります。display: list-item flex という書き方は Chromium 141 では有効な値として扱われませんでした。
Q. 点と文章の行頭をそろえるにはどうすればよいですか?
A. list-style-position: outside(初期値)のままにし、ul の padding-left で点の場所を確保します。inside にすると2行目以降が点の下に回り込みます。::before で点を作る場合は、li に padding-left を付けて点を position: absolute で置くと行頭がそろいます。
まとめ
- list-style は type・position・image の一括指定。順番は自由で、書かなかった値は初期値に戻る
- 点を消すだけなら
list-style: none、余白も消すならpadding: 0; margin: 0を足す(左の空きは ul の padding-left: 40px) - 点を残して padding を 0 にすると点がはみ出す。
padding-left: 1.5emかlist-style-position: insideで収める - li を flex・grid・block にすると点は出なくなる。 ul 側を flex にするか、li の中に箱を入れて flex にする
- 色とサイズは
li::marker、形や位置はli::before、番号の書式は@counter-styleと使い分ける - ::marker で使えるのは color・font 系・content など。背景・余白・幅は反映されない
- 番号の開始や逆順は ol の
start・reversed、li のvalueで指定する
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「CSS list-styleの使い方|リストの点を消す・マーカーの色を変える」
株式会社RJCでは、CSSのリスト装飾やマーカーの扱い方を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。