ニューモーフィズム・プログレスバー/ステッパー

様式名: ニューモーフィズム / プログレスバー・ステッパー

プログレスバーステッパー進捗凹凸アクセシビリティ
⧉ 別タブで開く

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

特徴 — なぜ効くか

  • 凹んだ溝(inset)のトラックに、色を乗せた凸の塗りを重ねて『埋まっていく』様子を出す。凹凸だけで進捗を表す12のコントロール群とは違い、ここでは色そのものが主情報を運ぶ
  • ステッパーは完了/現在/未着手の3状態を、塗り・太字・番号の3手段で示す。12で明らかになった『凹凸だけでは状態が伝わらない』という弱点を、進捗系では色とテキストで補う必要がある
  • 地と同じ色のまま質感を出すのがこの様式の売りだが、進捗バーの『埋まった部分』は地と同化させると意味が消える。ここが12のボタン・トグルと最も違う制約
  • トラックの溝(inset影)は装飾で、実際に視認されるのは『地の色 vs 塗りの色』の差。溝の影の色ではなく地の色を基準にコントラストを測る必要がある

実装メモ — 踏んだ罠

  • トラックは box-shadow の2枚(暗い影を左上、明るい影を右下)を inset で入れて凹ませる。塗りはその上に重ねる別要素にし、影は塗りの下に隠れて見えなくなってよい
  • 【自分で実測した数値】この様式の定番配色(地 #e0e5ec)に、12と同じ淡い水色系の塗り(#5a7fb8)を乗せると 3.21:1 しかない。さらに実際にトラックが視認される場所(暗い影の縁 #bec3c9)を基準にすると 2.29:1 まで落ち、進捗の境目が地と溶けて見えなくなる
  • 【自分で実測した数値】塗りを濃い青 #3d6b99 に変更すると、地 #e0e5ec 上で 4.41:1、暗い影の縁 #bec3c9 上でも 3.15:1 を確保できる。同じ『青系の塗り』でも明度次第で非文字コントラスト(WCAG 1.4.11 の 3:1)の合否が変わる
  • ステッパーの『完了』はチェックマークの白文字(塗りの上)で 5.58:1(実測)。『現在』は凸のまま外枠にアクセントリングを足し、状態を凹凸以外の手段でも示す。『未着手』は地と同化する凹みのままでよい(=まだ何もない、を凹みで表現するのは成立する)
  • パーセンテージの数値ラベルは本文色 #4a5568(地上 5.94:1、実測)で常時表示する。塗りの伸縮だけに情報を持たせない
  • role="progressbar" と aria-valuenow / aria-valuemin / aria-valuemax を付け、値が変わるたびに更新する。凹凸の見た目だけではスクリーンリーダーに進捗が伝わらない

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

壊れる条件

コントラスト実測

対象文字色背景実効背景判定
塗り(定番の淡色)vs 地#5a7fb8#e0e5ec#e0e5ec3.21:1非文字3:1 合格(ギリギリ)
壊れた例:塗り(定番の淡色)vs トラックの縁(暗い影)#5a7fb8#bec3c9#bec3c92.29:1不合格
塗り(濃色に変更)vs 地#3d6b99#e0e5ec#e0e5ec4.41:1AA 合格
塗り(濃色に変更)vs トラックの縁(暗い影)#3d6b99#bec3c9#bec3c93.15:1非文字3:1 合格
完了チェックマーク(白)vs 塗り#ffffff#3d6b99#3d6b995.58:1AA 合格
パーセンテージ数値・本文#4a5568#e0e5ec#e0e5ec5.94: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;
  --sh-dark:#bec3c9;
  --sh-light:#ffffff;
  --fg:#2f3b4a;
  --fg-soft:#4a5568;
  /* 塗りは濃色。定番の淡色(#5a7fb8)だとトラックの縁で2.29:1しかなく境目が消える(実測) */
  --fill:#3d6b99;
}
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}
.lead{font-size:12px;color:var(--fg-soft);line-height:1.8;max-width:32em;margin-bottom:22px}

.bar-row{margin-bottom:26px}
.bar-label{display:flex;justify-content:space-between;font-size:12px;color:var(--fg-soft);margin-bottom:8px}
.bar-label b{color:var(--fg)}
/* トラック:地と同色のまま inset の2枚影で溝を作る */
.track{height:20px;border-radius:999px;background:var(--bg);position:relative;overflow:hidden;
  box-shadow:inset 4px 4px 8px var(--sh-dark), inset -4px -4px 8px var(--sh-light)}
.fill{height:100%;width:68%;border-radius:999px;background:var(--fill);
  box-shadow:1px 1px 3px rgba(0,0,0,.15)}

.steps{display:flex;gap:0;margin-top:6px}
.step{flex:1;display:flex;flex-direction:column;align-items:center;position:relative;font-size:11px;color:var(--fg-soft)}
.step:not(:last-child)::after{content:"";position:absolute;top:15px;left:50%;width:100%;height:6px;
  background:var(--bg);border-radius:999px;
  box-shadow:inset 2px 2px 4px var(--sh-dark), inset -2px -2px 4px var(--sh-light);z-index:0}
.step.done:not(:last-child)::after{background:var(--fill);box-shadow:none}
.dot{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-weight:700;font-size:13px;position:relative;z-index:1;margin-bottom:6px;background:var(--bg)}
/* 未着手:地に沈む凹み */
.step .dot{box-shadow:inset 3px 3px 6px var(--sh-dark), inset -3px -3px 6px var(--sh-light);color:var(--fg-soft)}
/* 完了:塗り色で凸に。チェックは白で5.58:1(実測) */
.step.done .dot{background:var(--fill);color:#fff;
  box-shadow:2px 2px 5px var(--sh-dark), -2px -2px 5px var(--sh-light)}
/* 現在:凹凸の反転だけに頼らず、外側にアクセントリングを足して状態を二重に示す */
.step.current .dot{background:var(--bg);color:var(--fg);font-weight:800;
  box-shadow:2px 2px 5px var(--sh-dark), -2px -2px 5px var(--sh-light);
  outline:2px solid var(--fill);outline-offset:2px}
.step.current{font-weight:700;color:var(--fg)}

.card{background:var(--bg);border-radius:16px;padding:14px 16px;margin-top:22px;
  box-shadow:6px 6px 12px var(--sh-dark), -6px -6px 12px var(--sh-light);max-width:34em}
.card p{font-size:11px;line-height:1.8;color:var(--fg-soft)}
.card b{color:var(--fg)}
</style></head><body>
<h3>進捗の埋まり方が見えるか</h3>
<p class="lead">トラックは地と同色の凹み、塗りだけが色を持つ。淡すぎる塗りは地に溶けて境目が消えるため、この様式では珍しく彩度の残った濃い色を選ぶ。</p>

<div class="bar-row">
  <div class="bar-label"><span>ファイルをアップロード中</span><b>68%</b></div>
  <div class="track" role="progressbar" aria-valuenow="68" aria-valuemin="0" aria-valuemax="100" aria-label="アップロードの進捗">
    <div class="fill"></div>
  </div>
</div>

<div class="steps">
  <div class="step done"><div class="dot">✓</div>お届け先</div>
  <div class="step current"><div class="dot">2</div>お支払い</div>
  <div class="step"><div class="dot">3</div>確認</div>
</div>

<div class="card">
  <p>塗り <b>#3d6b99</b> は地の上で <b>4.41:1</b>、トラックの縁(暗い影 #bec3c9)の上でも <b>3.15:1</b>(実測)。定番の淡色 #5a7fb8 では縁の上が 2.29:1 まで落ちる。</p>
</div>
</body></html>
出典・参考: 自作の再現実装。配色規則は12_neumorphism_controlsの実測値を踏襲し、進捗バーの塗り色については当方で新たに実測。WCAG 1.4.11(非文字コントラスト)は https://www.w3.org/WAI/WCAG21/Understanding/non-text-contrast.html (一次情報)。role=progressbar の使用法は https://www.w3.org/WAI/ARIA/apg/patterns/meter/ (一次情報、2026-07-30閲覧)