フラットデザイン ボタン群

様式名: フラットデザイン / ボタン・コントロール

ボタンコントロールフラット原色アフォーダンス
⧉ 別タブで開く

「壊れた例」を押すと、この様式が成立しなくなる条件を実物で見られます。

特徴 — なぜ効くか

  • 影・グラデ・テクスチャを排し、単色の面で形を表す。押せることは色・大きさ・ラベルで示す
  • 階層は色の強さで作る。塗り>淡い面>文字だけ、の順に優先度が下がる
  • 2013年の iOS7/Windows Metro 以降の標準。今やほぼ全サイトの基礎言語で、『トレンド』ではなく『標準に吸収された』
  • 純粋な無影フラットは今は少数派。軽い影やグラデを足す『フラット2.0』が主流
  • 最大の弱点はアフォーダンスの喪失。影を消しすぎると、何が押せるボタンで何が装飾か分からなくなる

実装メモ — 踏んだ罠

  • box-shadow を使わず、階層は色のコントラストとサイズで作る。主ボタンは彩度の高い塗り、副ボタンは淡い面+濃い文字
  • 押せる要素には hover の色変化を必ず付ける。影が無いぶん、状態変化のフィードバックが唯一の『触れる合図』になる
  • 【WCAG 2.5.8】タップ領域は最低 24×24px、推奨 44×44px。フラットは装飾を削る過程でボタンを小さくしがちなので、min-height:44px を明示しておく
  • アイコンボタンは必ず文字ラベルを併記する。アイコン単体は、晴眼者には意味が伝わらず、読み上げには accessible name が別途要る(二重に不利)
  • 【自分で実測した数値】主ボタン 白文字 on #2563eb は 5.17:1、副ボタン 青文字 #1d4ed8 on 淡青面 #eef2ff は 5.99:1、危険 白文字 on #dc2626 は 4.83:1。フラットは色が主役なので、色の面と文字のコントラストは必ず測る
  • 『フラット2.0』にしたいなら、box-shadow を 0 2px 4px rgba(0,0,0,.06) 程度だけ足す。これだけでクリッカビリティが大きく戻る

使いどころ / 使ってはいけない場面

壊れる条件

コントラスト実測

対象文字色背景実効背景判定
主ボタン(白文字 on 塗り青)#ffffff#2563eb#2563eb5.17:1AA 合格
副ボタン(青文字 on 淡青面)#1d4ed8#eef2ff#eef2ff5.99:1AA 合格
危険ボタン(白文字 on 赤)#ffffff#dc2626#dc26264.83:1AA 合格(余裕なし)
本文(白カード)#1f2937#ffffff#ffffff14.68:1AA 合格
サブテキスト(白)#6b7280#ffffff#ffffff4.83:1AA 合格(余裕なし)

アクセシビリティ

スマホへの落とし方

ブラウザ対応

関連するパーツ

コードを見る
<!doctype html>
<html lang="ja"><head><meta charset="utf-8"><title>フラットデザイン ボタン群 デモ</title><style>
*{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#f7f8fa;
  --ink:#1f2937;      /* 本文。白カードで 14.68:1 */
  --sub:#6b7280;      /* サブ。白で 4.83:1 */
  --primary:#2563eb;  /* 白文字で 5.17:1 */
  --primary-ink:#1d4ed8;
  --soft:#eef2ff;     /* secondary の面。青文字 #1d4ed8 で 5.99:1 */
  --danger:#dc2626;   /* 白文字で 4.83:1 */
}
body{background:var(--bg);color:var(--ink);min-height:340px;padding:30px 28px;
  font-family:system-ui,-apple-system,"Hiragino Kaku Gothic ProN","Yu Gothic",sans-serif}
h3{font-size:16px;font-weight:700;margin-bottom:3px}
.lead{font-size:12px;color:var(--sub);line-height:1.7;margin-bottom:20px}

.card{background:#fff;border-radius:12px;padding:20px 22px;max-width:34em}
.card h4{font-size:13px;font-weight:700;margin-bottom:2px}
.card p{font-size:12px;color:var(--sub);line-height:1.7;margin-bottom:16px}

.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
/* 影は使わない。押せることは「色の面・十分な大きさ・明快なラベル」で示す。
   フラットの成立条件=影で立体を作らず、色とサイズで階層を作る */
.btn{border:0;font:inherit;font-size:13px;font-weight:600;cursor:pointer;
  border-radius:8px;padding:11px 18px;min-height:44px;      /* タップ領域 44px(WCAG 2.5.8)*/
  display:inline-flex;align-items:center;gap:7px;transition:background .12s}
.btn .ic{width:16px;height:16px;flex:none}
/* 主:塗り。最も強い色の面が「一番押してほしいボタン」を示す */
.btn.primary{background:var(--primary);color:#fff}
.btn.primary:hover{background:var(--primary-ink)}
/* 副:淡い面+濃い文字。主より弱い色面で階層を1段下げる */
.btn.secondary{background:var(--soft);color:var(--primary-ink)}
.btn.secondary:hover{background:#e0e7ff}
/* 危険:赤。色そのものが警告のラベルになる */
.btn.danger{background:var(--danger);color:#fff}
.btn.danger:hover{background:#b91c1c}
.btn:focus-visible{outline:3px solid var(--ink);outline-offset:2px}
/* アイコンだけにしない。アイコン+文字ラベルを併記する */
</style></head><body>
<h3>フラットなボタン群</h3>
<p class="lead">影を使わず、色の面・大きさ・ラベルだけで「押せること」と「優先順位」を示す。</p>

<div class="card">
  <h4>この内容を公開しますか?</h4>
  <p>公開すると、リンクを知っている人が閲覧できるようになります。あとから非公開に戻せます。</p>
  <div class="row">
    <button class="btn primary" type="button">
      <svg class="ic" viewBox="0 0 16 16" aria-hidden="true"><path fill="currentColor" d="M6.5 11.5 3 8l1-1 2.5 2.5L12 4l1 1z"/></svg>
      公開する
    </button>
    <button class="btn secondary" type="button">下書き保存</button>
    <button class="btn danger" type="button">削除</button>
  </div>
</div>
</body></html>
出典・参考: 自作の再現実装。成立条件と『フラット2.0が主流』は https://mailchimp.com/resources/what-is-flat-design/ および https://designmodo.com/flat-design-2-examples/ 、アフォーダンス喪失の論点は https://www.w3.org/WAI/GL/task-forces/coga/wiki/Flat_Design (W3C COGA、いずれも2026-07-21閲覧)。タップ領域 24/44px は WCAG 2.5.8。コントラスト値は当方で実測。