UIXHERO

List(リスト)

複数の情報を縦に並べる最基本のUIパターン。Ordered / Unordered / Description の3種と、インタラクティブなAction list・Selection listの使い分けを押さえる。

2026年3月1日
更新: 2026年8月28日
18
by Dengen Yosho(DGYS)

複数の情報アイテムを縦に並べる最基本のパターン。単なる箇条書きから、クリッカブルなナビゲーションリスト・チェックボックス付き選択リスト・ドラッグ可能な並べ替えリストまで、バリエーションは幅広い。

この記事を読むと、Ordered/Unordered/Description listの使い分け・Action listとSelection listの区別・リストとTableの使い分け・アクセシブルなリストのマークアップが自分でできるようになります。


1. UI例(Preview / Live)

このリストは、 GUNJO の List / ListItem 実装(variant unordered/ordered、marker dot/check/circle/number、divided など)です。用途別に切り替えて確認できます(右上 Code で編集可)。

実装で見る(GunjoUI)

この部品を、デザインシステム GUNJO の実装で確かめられます。

2. 定義(Definition)

複数の情報アイテムを縦方向に並べるUIパターン。HTML の <ul><ol><dl> が基盤。単純な表示用リストから、クリックで操作するAction list・チェックボックスで複数選択するSelection listまで、目的に応じてバリアントが分かれる。

Tableとの違い:Tableは複数の属性を列で比較する表形式。Listは単一属性のアイテムを縦に並べるだけ。2列以上の比較が必要ならTable、1列ならList。

Cardとの違い:Cardは各アイテムが独立したコンテナ(画像・説明・アクションを含む)。Listのアイテムは行として連続している。


3. 使い分け(When to use / When NOT to use)

3.1 When to use

  • 同種のアイテムを縦に並べて見せる場合(タスク一覧・メッセージ一覧・設定項目など)
  • 順序に意味がある手順を示す場合(Ordered list)
  • 1列のデータを一覧表示する場合

3.2 When NOT to use

  • 複数の属性を並べて比較したい場合 → Table を使う
  • アイテムが豊富なコンテンツ(画像・説明文・アクション)を持つ場合 → Card を使う
  • 選択肢が3〜5個で排他選択 → Radio Button を使う

3.3 代替UI(Alternatives)

  • 複数列での比較 → Table
  • リッチなコンテンツ表示 → Card
  • タブで切り替えるカテゴリ分け → Tabs

4. 設計判断の核(Decision Principles)

リストの種類は「アイテムに順序があるか」「クリックして何かするか」「複数選択するか」の3問で決まる。

Yes →No →
順序に意味がある?<ol> Ordered list<ul> Unordered list
クリックして操作する?Action list(<button>表示のみ(<li>
複数選択する?Selection list(<checkbox>Action list または 表示のみ
  • Action listとナビゲーションリストを区別する:クリックでページ遷移するなら <a>、ページ内アクション(削除・編集)なら <button> を使う
  • セパレータでグループを区切る:7項目以上になるときはセパレータやグループ見出しで意味のまとまりを作る
  • 空状態を設計する:リストが空になる状態(検索結果0件・タスク完了後)のEmpty Stateを必ず設計する

5. 状態設計(States)

5.1 必須状態(Required)

  • Default:アイテムが並んだ通常状態
  • Hover(Action list):ホバーで色変化。クリッカブルを示す
  • Focus:フォーカスリングを表示
  • Empty:アイテムが0件の状態。空状態メッセージ or Empty Stateコンポーネントを表示

5.2 条件付き状態(Conditional)

  • Selected(Selection list):チェックボックスがONの行を強調(背景色変化など)
  • Loading:データ取得中のスケルトンUIを表示
  • Disabled item:選択・操作できないアイテムをグレーアウト表示
状態必須何を伝えるか
Defaultアイテムの一覧
Hoverこのアイテムを操作できることを示す(Action list)
Focusキーボードフォーカスの現在地
Emptyアイテムがないことと次のアクション
Selected選択済みアイテムの数と内容(Selection list)
Loadingデータ取得中であることを示す

6. バリエーション設計(Variants)

リストのバリアントは「表示のみか操作するか」「順序の有無」で4つに分かれる。

バリアント用途主要要素
Unordered list順序不問のアイテム表示<ul> + <li>
Ordered list手順・ランキングなど順序に意味がある場合<ol> + <li>
Action listクリックで操作するリスト(設定・タスク一覧)<button> or <a>
Selection listチェックボックスで複数選択するリスト<input type="checkbox"> + <label>

禁止パターン:Action listに <div> のみ使い <button><a> を使わない → キーボード操作不可・スクリーンリーダー非対応になる。


7. パターン集(Good / Bad / How to fix)

7.0 よく崩れる設計パターン(3つ)

  • div リスト<div> を縦に並べてリストを擬似的に作り、スクリーンリーダーに構造が伝わらない
  • 空状態の未設計:リストが0件になった時に何も表示されず、ユーザーがバグと誤認する
  • インタラクティブ要素の欠落:Action listのアイテムに <button> を使わず、キーボードで操作できない

7.1 Bad(典型3つ)

  • <div onClick> でリストを実装し、キーボード操作もスクリーンリーダー対応もない
  • 検索結果0件の時に空白のままで、ユーザーが何も見つからなかったことを理解できない
  • Selection listでチェックボックスと行全体のクリック領域が一致せず、ラベルをクリックしてもチェックが切り替わらない

7.2 Good(対になる3つ)

  • <ul> + <li> + <button> の適切なHTML要素を使い、キーボード操作とスクリーンリーダー対応を確保する
  • 0件時に「該当する結果がありません」+アクション(検索条件をリセット / 新規追加)を表示する
  • <input type="checkbox" id="item-1"> + <label for="item-1"> で行全体をクリック領域にする

7.3 How to fix(手順)

  1. <div> で作ったリストを <ul> + <li> に変換する
  2. クリッカブルなアイテムに <button> または <a> を使う
  3. Selectionリストは <label> でチェックボックスと行全体をラップする
  4. 0件状態のEmpty StateコンポーネントをAPIレスポンス後に条件分岐で表示する

8. ルール(Must / Better)

Must(守らないと壊れる)

Better(品質が跳ねる)


9. アクセシビリティ要件(必須)

Keyboard

  • Action listの各アイテムは Tab でフォーカスでき、Enter/Space で実行できること
  • Selection listは Tab でチェックボックスにフォーカスでき、Space で切り替えられること

Focus

  • フォーカスリングは背景色と4.5:1以上のを持つこと

Screen Reader

  • <ul> / <ol> を使うと「リスト・N項目」と読み上げられる
  • CSSで list-style: none にすると一部ブラウザがリスト認識を失うため role="list" を明示する
  • <dl> はキーと値のペアを持つDescription listに使う(定義・スペック表など)
<!-- Action list -->
<ul role="list">
  <li>
    <button type="button">タスクA <span>2026-03-01</span></button>
  </li>
</ul>

<!-- Selection list -->
<ul role="list">
  <li>
    <label>
      <input type="checkbox" name="task" value="1" />
      タスクA
    </label>
  </li>
</ul>

Touch / Pointer

  • 各アイテムの高さを44px以上確保する
  • チェックボックスのは行全体に広げる(<label> でラップ)

Contrast / Readability

  • テキストは背景色と4.5:1以上のコントラスト比を確保する
  • Disabled項目は3:1以上のコントラストを維持する

10. 実装メモ(Implementation Notes)

  • shadcn/ui では <ul> / <li> をベースにしたシンプルなリストと、コマンドメニュー向けの Command コンポーネントが提供されている
  • 大量データ(1000件以上)の場合は仮想スクロール(react-virtualized / @tanstack/virtual)を導入してDOMノード数を削減する
  • Selection listで「全選択 / 全解除」を実装する場合、indeterminate状態(一部選択中)を inputRef.current.indeterminate = true で設定する

11. 関連リンク


12. まとめ

Listの設計は「適切なHTML要素を使う」と「空状態を設計する」の2点が最低ラインです。迷ったら 4. 設計判断の核 の3問に戻り、Ordered/Unordered/Action/Selectionのどれかを選んでください。<div> でリストを作る誘惑に負けないこと——<ul> + <li> + <button> の組み合わせだけで、アクセシブルで操作しやすいリストが実現できます。

更新のお知らせ

サイトに載せていない実例や、新しい記事のお知らせはこちらで出しています。

読んだ内容を、自分の画面に当てるとき

UIXHEROは、記事を書くほかに、画面の検品・判定、デザインシステムの構築、実装と改善の伴走を受けています。何を頼めばいいか決まっていない段階の相談も、同じ窓口で受けます。

UIXHEROに頼めることを見る

※ 記事の内容についての質問や、書いてほしいテーマの要望も同じ窓口で受けています

記事をシェア

メールでお知らせを受け取る

最終更新: 2026年8月28日

この記事を書いた人

Dengen Yosho(DGYS)

Dengen Yosho(DGYS)

UI/UXデザイナー兼デザインエンジニア デザイン歴25年以上 情報設計〜UIデザイン〜React/TypeScriptによる実装までを一気通貫で担当 大手企業のDXプロジェクトや決済アプリ領域で、デザインリードとして改善と構築を経験 現在はフリーランスとして、プロダクトのUI/UX改善とデザインシステム構築を支援 長年の実務の中で感じてきたのは、 「良いUI」はセンスではなく、再現可能な判断の積み重ねであるということ UIXHEROは、 心理学や行動科学の知見を、現場で使える設計言語に翻訳するための場所 関心領域は「ユーザーの行動が変わるUI」 人の認知・注意・意思決定の構造を理解し、 “なぜそのUIが機能するのか”を言語化することを目指している

あわせて読みたい

この記事に関連する記事をご紹介します

Bar Chart(棒グラフ)

カテゴリごとの量を棒の長さで比べるチャート。ゼロ基線の扱い、並び順、縦横の選び方、しきい値の見せ方という設計判断と、色だけに頼らないアクセシビリティ要件を解説する。

2026年8月27日
18

Donut Chart(ドーナツチャート)

中央をくり抜いた円で構成比を示すチャート。中央に置く値の選び方、円グラフとの使い分け、リングの太さ、凡例の作りという設計判断と、色だけに頼らないアクセシビリティ要件を解説する。

2026年8月27日
17

Gauge Chart(ゲージチャート)

1つの値を範囲の中に置いて示す半円のチャート。範囲の両端に意味があるかという条件、しきい値の帯の設計、色だけで良否を伝えない書き方という設計判断とアクセシビリティ要件を解説する。

2026年8月27日
16

もっと深く知りたいですか?

ここに掲載されていないトピックについても、リクエストがあれば解説記事を追加します。 わかりにくい点や、具体的な事例について知りたいことがあれば教えてください。

リクエストを送る