HTML

In HTML, the <li> (list item) element is used as a child of <ul> (unordered list) or <ol> (ordered list) to represent individual items in bullet-point or numbered lists.

li 要素

<li>要素とは?

<li>要素は、HTMLで「リスト(一覧)」を表す際に使用する要素です。通常は以下のような要素の子要素として利用され、リストの各項目(リストアイテム)を定義します。

<ul>
順序のないリスト(箇条書き)
<ol>
順序のあるリスト(番号付きリスト)
<menu>
メニューリスト(HTML5で追加された要素ですが、ブラウザによっては互換性やスタイリングの違いがあるため注意)

例えば、箇条書きリスト(<ul>)で3つの項目を表示するときは、下記のように書きます。

HTML

<ul>
	<li>項目1</li>
	<li>項目2</li>
	<li>項目3</li>
</ul>

上記の例では、<ul>(unordered list)内に3つの<li>が存在しています。ブラウザはこれを「黒い丸印(●)」付きの箇条書きリストとして表示するのが一般的です。

基本的な使い方

順序のないリスト(<ul>

順序のないリスト(unordered list)は、項目の順番や並びに特段意味を持たせたくない場合に用いられます。たとえば箇条書きのように一覧を簡単に示す際に利用します。実装例は次のとおりです。

HTML

<ul>
	<li>リンゴ</li>
	<li>バナナ</li>
	<li>オレンジ</li>
</ul>

ブラウザのデフォルトでは、各<li>の先頭に**黒い丸印(ディスク)**が表示されます。CSSでマーカーの種類をカスタマイズできます。

順序のあるリスト(<ol>

順序のあるリスト(ordered list)は、番号付き(またはアルファベットやローマ数字など)で順序に意味を持たせたいときに使われます。実装例は次のとおりです。

HTML

<ol>
	<li>ステップ1</li>
	<li>ステップ2</li>
	<li>ステップ3</li>
</ol>
  1. ステップ1
  2. ステップ2
  3. ステップ3

標準では、1から始まる連番が各項目の前に表示されます。こちらもCSSによって番号のスタイルを変更できます。

ネスト(入れ子)されたリスト

<li>要素は、さらにその中に別のリストをネスト(入れ子)させることもできます。例えば以下の例では、<li>の中に別の<ul>を置くことで階層的なリストを表現しています。

HTML

<ul>
	<li>フルーツ
		<ul>
			<li>リンゴ</li>
			<li>バナナ</li>
			<li>オレンジ</li>
		</ul>
	</li>
	<li>野菜
		<ul>
			<li>トマト</li>
			<li>ニンジン</li>
		</ul>
	</li>
</ul>

このようにネストしたリストは階層構造をわかりやすく表示するときに便利です。デフォルトでも、入れ子になった階層ごとにマーカーが変わったり、インデントが付いたりしますが、CSSを用いてより見やすいデザインにカスタマイズすることもよくあります。

<li>要素のHTML仕様と注意点

親要素は原則としてリスト要素

<li>要素は基本的に**<ul>**, <ol>, または <menu> の子要素として利用されます。HTML5の文法上では、ほかの要素の中で使うことは推奨されていません。特に、見た目のレイアウトを調整したいからといって無理やり<li>を使うのは避けましょう。表現のために用いるのであれば、他のブロック要素(<div><section>など)を利用するのが適切です。

コンテンツモデル

リスト要素(<ul>, <ol>, <menu>)において、<li>は「フローコンテンツ」を含むことができます。つまり、<li>内にテキストだけではなく、段落(<p>)、画像(<img>)、リンク(<a>)など、フローコンテンツに該当する要素を含めることができます。ただし、仕様をよく理解して過度な入れ子構造を作らないように気をつけましょう。

<menu>要素での利用

<menu>要素はHTML5で定義され、メニューやコマンドのリストを表すために使われる要素ですが、実際のブラウザでのサポート状況や表示が定まっていない部分があります。<menu>の子要素として<li>が使われることもできますが、主に実務では<ul><ol>が中心的に使われる点に留意してください。

アクセシビリティ(A11y)とSEOの観点

アクセシビリティ

スクリーンリーダーを利用される方など、アクセシビリティが重要な場面では、リスト構造がきちんとマークアップされていることで「ここからリストが始まり、ここまで続く」という情報が正しく伝わります。逆に、見た目をリスト風にしていても実際には<li>を使っていない場合、スクリーンリーダーなどではリストと認識されない可能性があります。
正しいマークアップ
段落などを無理にリスト化しない。実際に箇条書きや順序が重要な内容に対してリストを用いる。
見た目だけでなく、意味づけも正確に
アクセシビリティの観点から、リストが本来の目的(情報の列挙)を果たしているかを常に意識する。

SEO(検索エンジン最適化)

検索エンジンもHTMLの構造を分析する際、リストを情報の階層や区分として認識する場合があります。特に箇条書きや番号付きリストとしての意味を持つ情報は、検索エンジンのクローラーが見出しやリストを文書構造として把握し、SERP(検索結果画面)でのリッチスニペット表示の候補になることがあります。

リスト化できる情報は、適切にリストを使う
箇条書きやステップ形式など、分かりやすい形でまとめることで、ユーザー体験だけでなく検索エンジンにも好影響を与える可能性がある。

CSSを活用したカスタマイズ

list-styleプロパティ

CSSでは、リストの表示形式を指定するためにlist-style関連のプロパティを使います。以下が主なプロパティの例です。

list-style-type
マーカーの種類を変更(例:disc, circle, square, decimal, upper-alpha, lower-romanなど)
list-style-position
マーカーの表示位置を変更(outsideinside
list-style-image
マーカーとして任意の画像を使用

例として、番号付きリストをローマ数字に変更したい場合は以下のように書きます。

HTML

<ol class="roman-list">
	<li>例1</li>
	<li>例2</li>
	<li>例3</li>
</ol>

CSS

.roman-list {
	list-style-type: lower-roman; /* i, ii, iii, ... という形で表示 */
}
  1. 例1
  2. 例2
  3. 例3

独自のマーカーを使う

画像をリストのマーカーとして使いたい場合は、list-style-imageプロパティを利用します。

例えばハートの画像をマーカーにする場合:

CSS

.custom-heart {
	list-style-image: url('heart.png');
}

HTML

<ul class="custom-heart">
	<li>アイテム1</li>
	<li>アイテム2</li>
</ul>

ただし、画像マーカーは位置が合わなかったり、レスポンシブでデザインが崩れたりする場合もあるため、テストを十分に行う必要があります。

::marker疑似要素

CSS3以降では、リストマーカーを対象とする::marker疑似要素が利用できます。ブラウザのサポート状況には注意が必要ですが、柔軟なスタイリングが可能になります。例えば、マーカーの色やフォントサイズなどを指定することができます。

CSS

ul.custom-marker::marker {
	color: red;
	font-size: 1.2em;
}

HTML

<ul class="custom-marker">
	<li>赤色マーカーの例</li>
	<li>大きめマーカーの例</li>
</ul>

応用的な使い方

カスタムカウンターを使った多段番号付け

CSSのカウンター機能を使うと、複雑な番号付け(例えば「第1章 第1節 第1項」のような多段階番号付け)を実装できます。以下は簡単な例です。

CSS

ol.custom-counter {
	counter-reset: section; /* カウンターの初期化 */
}
ol.custom-counter > li {
	counter-increment: section; /* 各liが増えるたびにカウンターをインクリメント */
	margin-bottom: 1em;
}
ol.custom-counter > li::before {
	content: "セクション" counter(section) ": ";
	font-weight: bold;
}

HTML

<ol class="custom-counter">
	<li>内容1</li>
	<li>内容2</li>
	<li>内容3</li>
</ol>
  1. 内容1
  2. 内容2
  3. 内容3

上記の例では、各リストアイテムの前に「セクション1:」「セクション2:」のように動的に番号が付与されます。さらにネストしたリストでも別のカウンターを設定し、階層構造を明示的に示すことが可能です。

インラインリストとしての利用(ナビゲーションなど)

<li>は通常ブロックレベルで表示されますが、CSSでdisplay: inlinedisplay: inline-blockなどを指定することで、水平に並べたメニューバーやナビゲーションを作成できます。

HTML

<ul class="nav">
	<li><a href="#">ホーム</a></li>
	<li><a href="#">商品一覧</a></li>
	<li><a href="#">お知らせ</a></li>
	<li><a href="#">お問い合わせ</a></li>
</ul>

CSS

.nav {
	list-style: none; /* デフォルトのマーカーを非表示にする */
	margin: 0;
	padding: 0;
}
.nav li {
	display: inline-block; /* 横並びに */
	margin-right: 1em;
}

こうした水平のリストは、ヘッダーなどに配置してグローバルナビゲーションを作る場合に非常に一般的なパターンです。

よくある注意点・トラブルシューティング

マーカーが表示されない
インデントが思ったようにいかない
ネストの深いリストが見づらい

まとめ

リストを活用すれば、単純な箇条書きから段階的な手順の説明、階層的な情報整理、さらにはナビゲーションメニューなど、多岐にわたる表現が可能です。<li>の正しい使い方とカスタマイズをしっかりと理解し、目的に応じた最適な表現を行えるようにしておきましょう。