ニューモーフィズム・コントロール群(ボタン/トグル)

様式名: ニューモーフィズム / ボタン・コントロール

ボタントグル凹凸影2枚アクセシビリティ
⧉ 別タブで開く

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

特徴 — なぜ効くか

  • 背景と要素を同じ色にしたまま、影の向きだけで凹凸を作る。装飾色も画像も使わずに質感が出る
  • 明暗2枚の影が必須。1枚だけにすると普通のドロップシャドウに戻り、この様式は成立しない
  • 凸と凹の差は影の向きの反転だけ。つまり状態の違いを表す手がかりが極端に少ない
  • 最大の弱点は境界のコントラスト。地と影の差が構造的に小さく、輪郭が「見えている」というより「見えていると錯覚している」状態に近い
  • 2019〜2020年にブーム化し、2021年にはアクセシビリティ批判で急速に下火。今はトグルやバッジなど部分的な装飾として生き残っている

実装メモ — 踏んだ罠

  • box-shadow を2枚書く。光源を左上と決めたら、明るい影を左上(負のオフセット)、暗い影を右下(正のオフセット)に固定する。ページ内で光源の向きを変えない
  • ぼかし量はオフセット距離の約2倍が目安。暗い影は地より約15%暗い色、明るい影は白
  • 凹(押し込み)は同じ影に inset を付けて向きを反転するだけ。オフセットは凸よりやや小さくすると自然
  • ダークモードでは影の色を計算し直す。ライトモードの値を流用すると、暗い影が地に沈んで凹凸が消える
  • 【自分で実測した数値】この様式の定番配色(地 #e0e5ec / 暗い影 #bec3c9 / 明るい影 #fff)で境界のコントラストを測ると、暗い影が 1.40:1、明るい影が 1.27:1。WCAG 1.4.11 が非文字要素に求める 3:1 に遠く届かない。外部記事が挙げる『約1.4:1』という値を、自分の実装で再現して確認した
  • 【自分で実測した数値】定番の薄いグレー文字 #a3b1c6 は地の上で 1.72:1。文字としては全く読めない。このデモでは文字だけ #2f3b4a(8.99:1)/ #4a5568(5.94:1)に置き換えて AA を通している。文字は様式を壊さずに濃くできる
  • フォーカスリングは影では絶対に伝わらない。outline を1本足して様式の外側で担保するしかない

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

壊れる条件

コントラスト実測

対象文字色背景実効背景判定
暗い影 vs 地(境界:非文字は3:1が基準)#bec3c9#e0e5ec#e0e5ec1.40:1不合格
明るい影 vs 地(境界:非文字は3:1が基準)#ffffff#e0e5ec#e0e5ec1.27:1不合格
見出し・カード内の強調#2f3b4a#e0e5ec#e0e5ec8.99:1AA 合格
本文・ラベル#4a5568#e0e5ec#e0e5ec5.94:1AA 合格
この様式の定番文字色をそのまま使った場合#a3b1c6#e0e5ec#e0e5ec1.72:1不合格
壊れた例:3:1 を満たすまで濃くした影#7a8490#e0e5ec#e0e5ec3.00:1AA 合格(ただし様式は崩れる)
フォーカスリング(様式の外側で担保)#2f3b4a#e0e5ec#e0e5ec8.99:1AA 合格

アクセシビリティ

スマホへの落とし方

ブラウザ対応

関連するパーツ

コードを見る
<!doctype html>
<html lang="ja"><head><meta charset="utf-8"><title>ニューモーフィズム・コントロール群 デモ</title><style>
*{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#e0e5ec;
  /* 影は必ず2枚。暗い方は地より約15%暗く、明るい方は白。
     1枚だけにすると普通のドロップシャドウに戻り、この様式は成立しない */
  --sh-dark:#bec3c9;
  --sh-light:#ffffff;
  /* 文字だけは AA を通す。定番の #a3b1c6 は地の上で 1.72:1 しかなく読めない(実測) */
  --fg:#2f3b4a;
  --fg-soft:#4a5568;
}
body{background:var(--bg);color:var(--fg);min-height:340px;padding:26px 28px;
  font-family:system-ui,"Hiragino Kaku Gothic ProN","Yu Gothic",sans-serif}
h3{font-size:15px;letter-spacing:.02em;margin-bottom:4px}
/* 和文の行長は em で取る。ch は半角基準なので想定の半分で折り返す */
.lead{font-size:12px;color:var(--fg-soft);line-height:1.8;max-width:30em;margin-bottom:20px}

.row{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-bottom:16px}

/* 凸:光源は左上。明るい影を左上、暗い影を右下に置く */
.btn{
  border:0;font:inherit;font-size:13px;font-weight:600;color:var(--fg);
  background:var(--bg);border-radius:14px;padding:13px 22px;cursor:pointer;
  box-shadow:6px 6px 12px var(--sh-dark), -6px -6px 12px var(--sh-light);
}
/* 凹:影の向きを反転させて内側に入れる。凸との違いはこれだけ */
.btn.pressed,.btn:active{
  box-shadow:inset 5px 5px 10px var(--sh-dark), inset -5px -5px 10px var(--sh-light);
  color:var(--fg-soft);
}
/* この様式は境界が 1.40:1 しかなく、フォーカスが影では絶対に伝わらない。
   輪郭を1本足して補う。様式の外側で担保するしかない部分 */
.btn:focus-visible{outline:3px solid #2f3b4a;outline-offset:3px}

.sw{display:inline-flex;align-items:center;gap:10px;font-size:12px;color:var(--fg-soft)}
.track{width:58px;height:30px;border-radius:999px;background:var(--bg);position:relative;
  box-shadow:inset 4px 4px 8px var(--sh-dark), inset -4px -4px 8px var(--sh-light)}
.knob{position:absolute;top:4px;left:4px;width:22px;height:22px;border-radius:50%;
  background:var(--bg);box-shadow:3px 3px 6px var(--sh-dark), -3px -3px 6px var(--sh-light)}
.track.on .knob{left:auto;right:4px;background:#5a7fb8}

.card{background:var(--bg);border-radius:18px;padding:16px 18px;margin-top:4px;
  box-shadow:8px 8px 16px var(--sh-dark), -8px -8px 16px var(--sh-light);max-width:31em}
.card p{font-size:12px;line-height:1.85;color:var(--fg-soft)}
.card b{color:var(--fg)}
</style></head><body>
<h3>押せそうに見えるか</h3>
<p class="lead">背景と同じ色のまま、影の向きだけで凹凸を作る。装飾色をほとんど使わずに質感が出る反面、境界のコントラストが構造的に足りない。</p>

<div class="row">
  <button class="btn" type="button">保存する</button>
  <button class="btn pressed" type="button">選択中</button>
  <span class="sw"><span class="track on"><span class="knob"></span></span>自動保存 ON</span>
  <span class="sw"><span class="track"><span class="knob"></span></span>通知 OFF</span>
</div>

<div class="card">
  <p>凸と凹の違いは<b>影の向きの反転だけ</b>。地とのコントラストは <b>1.40:1</b>(実測)で、WCAG 1.4.11 が求める 3:1 に届かない。ボタンの輪郭が「見えている」のではなく、<b>見えていると錯覚している</b>状態に近い。</p>
</div>
</body></html>
出典・参考: 自作の再現実装。配色と実装規則は https://www.superdesign.dev/styles/neumorphism (2026-07-21閲覧)記載のものを使用し、コントラスト値は当方で実測して確認した。様式の隆盛と衰退は https://webflow.com/blog/neumorphism および https://uxplanet.org/the-rise-and-fall-of-neumorphism-613795fc6f8d (いずれも2026-07-21閲覧)。WCAG 1.4.11 は https://www.w3.org/WAI/WCAG21/Understanding/non-text-contrast.html (一次情報)