【入門編】list-style-positionによるマーカーの配置制御 – HTML実践ガイド

こんにちは!フロントエンドの世界へようこそ。

HTMLでリスト(`

    `や`

      `)を書いているとき、「あれ?この黒い点(マーカー)のせいで、文字のインデントが思ったように決まらないな…」と、モヤモヤしたことはありませんか?

      実は、リストのマーカーというのはCSSの`list-style-position`というプロパティ一つで、その性格がガラリと変わるんです。今日は、このちょっと気難しい「マーカーくん」の扱い方を、身近な例えを交えて紐解いていきましょう。

      —

      マーカーの居場所は「外」か「内」か?

      `list-style-position`には、大きく分けて`outside`と`inside`という2つの設定があります。

      1. `outside`:お行儀よく「外」に座るマーカー

      デフォルト(初期設定)がこれです。マーカーは、リストの中身(テキスト)の左側、ボックスの外にちょこんと浮いています。

      • イメージ: 教室の出席簿のチェック欄。名前の左側にチェックボックスがあるような状態ですね。
      • 特徴: テキストが2行目以降に折り返されたとき、マーカーの下には文字が回り込みません。テキストは最初から「マーカーの幅分」だけ右にずれて表示されます。

      2. `inside`:中身と仲良く「内」に収まるマーカー

      こちらを指定すると、マーカーはリストのテキストの「一部」として扱われます。

      • イメージ: 本文の中に紛れ込んだアイコン。まるで文字の一部であるかのように、テキストと一緒に「ボックスの内側」に同居します。
      • 特徴: テキストが2行目以降に折り返されると、なんとマーカーの真下まで文字が入り込んできます。

      —

      実際にコードで違いを見てみよう

      百聞は一見に如かず。実際にCSSを書いて動きを確認してみましょう。

      / 外側に配置(デフォルト) /
      .list-outside {
      list-style-position: outside;
      background-color: #f0f8ff; / 領域を見やすくするために色をつけています /
      padding-left: 30px; / マーカーがはみ出さないように余白を確保 /
      }

      / 内側に配置 /
      .list-inside {
      list-style-position: inside;
      background-color: #fff0f5;
      }

      • outside: マーカーがボックスの外に出ます。2行目になっても左端は揃います。
      • inside: マーカーがボックスの中に潜り込みます。2行目になるとマーカーの下に文字が回り込みます。

      —

      なぜ「インデント調整」でつまづくのか?

      初学者の皆さんが一番悩むのは、「リストの左側の余白を消したいのに、マーカーが消えてしまったり、逆に余白が残ったりする!」というケースではないでしょうか。

      これは、「マーカーはボックスモデルのpaddingの内側には存在できない」というルールが原因です。

      • `outside`の場合:`padding-left`を削ると、マーカーは「ボックスの外」へ突き飛ばされ、画面外へ消えてしまうことがあります。
      • `inside`の場合:マーカーがボックスの一部なので、`padding`を削ると素直に左に寄りますが、テキストとマーカーが重なりやすくなります。

      解決のヒント:自分でマーカーを作っちゃう!

      現場のプロがよくやるのは、`list-style`をあえて`none`にして消し、`::before`疑似要素を使って自分でアイコンや装飾を配置する方法です。

      「えっ、わざわざそんな面倒なことを?」と思うかもしれませんが、これなら余白もデザインも1ピクセル単位でコントロールできるので、実は一番の近道だったりします。

      ul.custom-list {
      list-style: none; / 標準のマーカーを消す /
      padding-left: 0;
      }

      ul.custom-list li {
      padding-left: 20px;
      position: relative;
      }

      / 自分でマーカーを描く /
      ul.custom-list li::before {
      content: “★”;
      position: absolute;
      left: 0;
      color: #ff9900;
      }

      —

      最後に:つまずくのは「理解している証拠」です

      CSSのレイアウトは、最初は本当にパズルみたいで難しいですよね。「なぜそこに空間が空くの?」「なぜはみ出るの?」とイライラすることもあると思います。でも、それはあなたが「要素の境界線を意識できている」という、スペシャリストへの第一歩を踏み出している証拠です。

      まずは`outside`と`inside`を切り替えて、ブラウザの検証ツール(デベロッパーツール)で青やオレンジの領域(ボックスモデル)がどう動くか眺めてみてください。

      「あ、君はそこにいたのか!」とマーカーの正体が分かれば、もう怖いものはありませんよ。また何かあれば、いつでも聞きに来てくださいね。応援しています!

コメント

タイトルとURLをコピーしました