UIXHERO

Separator(セパレーター)

コンテンツ間の論理的・視覚的な区切りを表現するUIコンポーネント。水平線・余白・色の違いなど実装手段の選択基準と、装飾と意味論的区切りの使い分けを解説する。

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

コンテンツのグループ間に視覚的・意味論的な区切りを設けるコンポーネント。水平線(<hr>)・・背景色の違い・セクション見出しなど複数の手段があり、「どの手段を選ぶか」の判断基準が設計の核となる。

この記事を読むと、<hr> vs 余白による区切り・装飾用途と意味論的区切りの使い分け・role="separator"aria-orientation・セパレーターの乱用を避ける判断基準が自分でできるようになります。


1. UI例(Preview / Live)

このセパレーターは、 GUNJO の Separator 実装です。水平・垂直・ラベル付きの区切りと、「引きすぎない」使い分けを確認できます(右上 Code で編集可)。

実装で見る(GunjoUI)

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

2. 定義(Definition)

コンテンツの論理的なグループ間に視覚的な区切りを設けるUIコンポーネント。実装手段は <hr>(水平線)・余白・色の違い・セクション見出しなど複数あり、目的と文脈によって最適な手段が変わる。

余白との違い:余白だけでも十分なグループの分離ができる場合、Separatorは不要。Separatorは「余白だけでは伝わらない」または「意味論的な区切り(<hr>)が必要な場合」にのみ使う。

セクション見出しとの違い:セクション見出し(<h2><h3>)は内容の階層を示す。Separatorは見出しのないグループ間の視覚的区切り。見出しがあれば Separator は基本的に不要。


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

3.1 When to use

  • 設定画面・フォームで論理的に異なるグループを区切る(プロフィール設定 / セキュリティ設定)
  • ドロップダウン・コンテキストメニューで機能グループを分ける
  • 認証フォームで「メールログイン」と「ソーシャルログイン」を区切るラベル付きセパレーター
  • ナビゲーションバー・フッターでインライン要素を区切る垂直セパレーター

3.2 When NOT to use

  • リストのすべての項目間 → 余白または hover背景色で十分
  • 見出し(<h2><h3>)が既にある場合 → 見出しが区切りの役割を果たす
  • カードや背景色の違いで既にグループが分かれている場合 → 視覚的区切りは既に存在する

3.3 代替UI(Alternatives)

  • 強い区切りが必要 → セクション見出し(<h2>
  • グループを独立させる → カード(Card)コンポーネントで囲む
  • インライン区切り → ·(中点)やパイプ文字 |(ただし意味論はない)

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

Separatorは「グループの境界」を示すもの——項目間の全てに線を引くと、ノイズになり区切りの意味が薄れる。

判断の優先順位:① 本当に線が必要か(余白で代替できないか)→ ② 装飾か意味論か → ③ 水平か垂直か → ④ ラベルが必要か

  • 「線を引く前に余白を試す」:カードや背景色の差・十分な余白があれば、<hr> は不要。Separatorが増えるほど画面のノイズが増える
  • 装飾用は aria-hidden="true":見た目だけの線は aria-hidden="true" を付けてスクリーンリーダーにスキップさせる。意味のある区切りは <hr> または role="separator" を使う
  • 垂直セパレーターは常に装飾用:ナビゲーションリンク間の縦線(|)はほぼ常に装飾。aria-hidden="true" にする
  • 乱用禁止:同一画面内でSeparatorが3本以上続くなら、情報設計(グループ化・カード化)を先に見直す

5. 状態設計(States)

5.1 必須状態(Required)

  • Default:静的な表示のみ。状態変化はない

5.2 条件付き状態(Conditional)

  • ラベル付き:「または」などのテキストを中央に配置したセパレーター
  • 垂直aria-orientation="vertical" を設定
状態必須何を伝えるか
Default(水平)グループ間の区切り
ラベル付き「または」などの選択肢分岐を示す
垂直インライン要素間の区切り(装飾)

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

Separatorのバリアントは「向き」と「ラベルの有無」で決まる。

バリアント目的注意
水平(Horizontal)セクション・グループ間の区切り使いすぎない
垂直(Vertical)インライン要素間の区切り常に装飾、aria-hidden 必須
ラベル付き(Label)「または」などの分岐を示すラベルはシンプルに
装飾なし(余白のみ)視覚ノイズを減らした区切り最も推奨されるアプローチ

禁止パターン:リストのすべての項目の間にSeparatorを入れる → リスト項目の区切りはhover背景・余白で表現し、Separatorは使わない。


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

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

  • 全項目間に線:10項目のリストで9本の <hr> が並び、コンテンツより線の方が目立つ
  • 見出し直後のSeparator<h2> の直下に <hr> を入れて二重に区切りを表現する(見出しが既に区切り役)
  • 垂直Separatorに意味を持たせる| 区切りのナビゲーションリンクで aria-hidden を付けず、スクリーンリーダーが「縦棒」と読み上げる

7.1 Bad(典型3つ)

  • 設定フォームの5つの項目間に全て <hr> を挿入し、線が項目より目立つ
  • ドロップダウンメニューで1項目ごとに <hr> を入れ、グループの境界が分からない
  • <span>|</span> の垂直区切りに aria-hidden がなく、スクリーンリーダーが「縦棒」と読み上げる

7.2 Good(対になる3つ)

  • 設定フォームを「プロフィール・セキュリティ・通知」の3グループに分け、グループ間の2箇所だけに <hr> を使う
  • ドロップダウンのグループ境界にだけ <hr role="separator"> を使い、関連する項目は余白でまとめる
  • <span aria-hidden="true">|</span> で垂直区切りをスクリーンリーダーからスキップさせる

7.3 How to fix(手順)

  1. 現在のSeparatorの数を数え、「グループの境界にあるか」を確認する
  2. 境界でないSeparatorを削除し、代わりに余白(gapmy-*)を使う
  3. 垂直Separatorに aria-hidden="true" を付与する
  4. 意味のある水平Separatorは <hr> または role="separator" を使う

8. ルール(Must / Better)

Must(守らないと壊れる)

Better(品質が跳ねる)


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

Keyboard

  • Separatorは非インタラクティブなため、Tabフォーカスは不要

Focus

  • フォーカスを当てない

Screen Reader

  • 意味のある区切り<hr> を使う(スクリーンリーダーが「区切り線」と読み上げる)
  • 装飾用途のみ<hr aria-hidden="true"> または <div aria-hidden="true"> にする
  • 垂直Separator:常に aria-hidden="true" にする
<!-- 意味のある水平区切り -->
<hr />

<!-- 装飾のみの水平区切り -->
<hr aria-hidden="true" />

<!-- 垂直Separator(装飾) -->
<span class="separator-vertical" aria-hidden="true"></span>

<!-- ラベル付きセパレーター -->
<div role="separator" aria-label="または">
  <span aria-hidden="true">または</span>
</div>

Touch / Pointer

  • 非インタラクティブなための考慮不要

Contrast / Readability

  • Separatorの色は背景とのが低すぎず・高すぎない適度な区切り感にする(border-gray-200 / dark:border-slate-700 が基準)

10. 実装メモ(Implementation Notes)

  • shadcn/ui の Separator コンポーネントは orientation"horizontal" / "vertical")を持ち、role="separator"aria-orientation を自動付与する
  • ラベル付きSeparatorはshadcn/uiには含まれないため、flex items-center gap-3 で左右の線とテキストを並べて実装する
  • TailwindCSSのみの場合、水平は <div class="h-px bg-gray-200 dark:bg-slate-700" aria-hidden="true" />、垂直は <div class="w-px h-4 bg-gray-300 dark:bg-slate-600" aria-hidden="true" /> で実装できる

11. 関連リンク


12. まとめ

Separatorの設計は「本当に線が必要か」を問うことから始まります。迷ったら 4. 設計判断の核 に戻り、余白・カード・背景色の差で代替できないかを先に確認してください。「グループの境界にだけ使う」「垂直Separatorは常に aria-hidden」の2ルールを守るだけで、大半のSeparator問題は解消します。

更新のお知らせ

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

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

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

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

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

リクエストを送る