ステータスバッジ(Status Badge)— 業務配色パターン

表示・インジケーター 初級

このコンポーネントについて

ステータスバッジは、案件・タスク・申請などの現在の状態をひと目で伝える小さなラベルUIです。業務システムでは「進行中・完了・エラー・警告・保留」といった定番ステータスに決まった色を割り当てることで、一覧画面でも詳細画面でも状態を瞬時に判別できるようになります。

このページでは業務でよく使う5ステータスの配色を、塗りつぶし・ソフト(薄背景)・アウトラインの3タイプで体系化しました。色の定義はCSSカスタムプロパティに集約してあるため、自社のブランドカラーへの差し替えは変数10個の書き換えだけで完了します。

  • 定番5ステータスの配色マッピング — 進行中=青・完了=緑・エラー=赤・警告=黄・保留=グレーの業務定番セット
  • 3タイプの見た目バリエーション — 塗りつぶし・ソフト(薄背景+濃文字)・アウトラインを同じ5ステータスで提供
  • CSS変数で色を一元管理 — ステータスごとに濃・淡2変数の計10変数。差し替えは変数の書き換えだけ
  • ドット付きバリエーション — 色だけに意味を依存させないための先頭ドット付きバッジ
  • ステータス切替デモdata-status 属性の書き換えだけで3タイプすべての配色が切り替わることを実演

実装のポイント・注意点

配色は data-status 属性セレクタで中間変数(--_main / --_soft)にマッピングし、塗りつぶし・ソフト・アウトラインの3タイプはすべてこの2変数から導出しています。ステータスを追加したいときは、.sb-wrap に変数を2個足し、属性セレクタのマッピングを1行追加するだけで済みます。型ごとに個別の色を定義しないことが「色を変えるならここだけ」を成立させるポイントです。

色だけに意味を持たせるとステータスの判別が難しいユーザーもいるため、テキストラベルは必ず表示し、区別をさらに強めたい場面向けにドット付きバリエーションを用意しています。data-status の値は data-table 系事例(「未着手」等の日本語)と異なり、CSS変数名と対応させやすい英語スラッグ(progress / done / error / warning / hold)を採用しています。

HTML・CSS・バニラJavaScriptのみで実装しており、フレームワーク不要でコピペすぐに動きます。

デモ

Pattern 1 — 塗りつぶし

進行中 完了 エラー 警告 保留

Pattern 2 — ソフト(薄背景+濃文字)

進行中 完了 エラー 警告 保留

ドット付き(色だけに意味を依存させたくない場合)

進行中 完了 エラー 警告 保留

Pattern 3 — アウトライン

進行中 完了 エラー 警告 保留

Pattern 4 — ステータス切替

進行中 進行中 進行中

サンプルソース

3つのファイルを同じフォルダに保存し、index.html をブラウザで開くとすぐに動作確認できます。
ファイル名:index.html / style.css / script.js — 保存時の文字コードは UTF-8 を指定してください(Shift-JISだと日本語が文字化けします)。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>ステータスバッジ サンプル</title>
  <link rel="stylesheet" href="./style.css">
</head>
<body>

<!-- ========================================
  ステータスバッジ — 塗りつぶし
  濃色背景+白文字。強調度がもっとも高い
======================================== -->
<div class="sb-wrap">
  <span class="sb-badge" data-status="progress">進行中</span>
  <span class="sb-badge" data-status="done">完了</span>
  <span class="sb-badge" data-status="error">エラー</span>
  <span class="sb-badge" data-status="warning">警告</span>
  <span class="sb-badge" data-status="hold">保留</span>
</div>

<!-- ========================================
  ステータスバッジ — ソフト(薄背景+濃文字)
  一覧画面向け。ドット付きは色だけに意味を依存させないための対策
======================================== -->
<div class="sb-wrap">
  <span class="sb-badge sb-soft" data-status="progress">進行中</span>
  <span class="sb-badge sb-soft" data-status="done">完了</span>
  <span class="sb-badge sb-soft" data-status="error">エラー</span>
  <span class="sb-badge sb-soft" data-status="warning">警告</span>
  <span class="sb-badge sb-soft" data-status="hold">保留</span>
</div>
<div class="sb-wrap">
  <span class="sb-badge sb-soft sb-dot" data-status="progress">進行中</span>
  <span class="sb-badge sb-soft sb-dot" data-status="done">完了</span>
  <span class="sb-badge sb-soft sb-dot" data-status="error">エラー</span>
  <span class="sb-badge sb-soft sb-dot" data-status="warning">警告</span>
  <span class="sb-badge sb-soft sb-dot" data-status="hold">保留</span>
</div>

<!-- ========================================
  ステータスバッジ — アウトライン
  白背景+濃色の枠線。背景色のある画面向け
======================================== -->
<div class="sb-wrap">
  <span class="sb-badge sb-outline" data-status="progress">進行中</span>
  <span class="sb-badge sb-outline" data-status="done">完了</span>
  <span class="sb-badge sb-outline" data-status="error">エラー</span>
  <span class="sb-badge sb-outline" data-status="warning">警告</span>
  <span class="sb-badge sb-outline" data-status="hold">保留</span>
</div>

<!-- ========================================
  ステータス切替デモ
  data-status の書き換えだけで3タイプの配色が変わる
======================================== -->
<div class="sb-switch" role="group" aria-label="ステータス切替">
  <button type="button" class="sb-switch-btn is-active" data-status="progress">進行中</button>
  <button type="button" class="sb-switch-btn" data-status="done">完了</button>
  <button type="button" class="sb-switch-btn" data-status="error">エラー</button>
  <button type="button" class="sb-switch-btn" data-status="warning">警告</button>
  <button type="button" class="sb-switch-btn" data-status="hold">保留</button>
</div>
<div class="sb-wrap">
  <span class="sb-badge js-sb-target" data-status="progress">進行中</span>
  <span class="sb-badge sb-soft js-sb-target" data-status="progress">進行中</span>
  <span class="sb-badge sb-outline js-sb-target" data-status="progress">進行中</span>
</div>

<script src="./script.js"></script>
</body>
</html>
/* ステータスバッジ パターン集 — style.css
   色を変えたいときは .sb-wrap の --status-* 変数を書き換えるだけでOK */

*, *::before, *::after { box-sizing: border-box; }

body {
  font-family: sans-serif;
  padding: 24px;
  max-width: 640px;
  margin: 0 auto;
  background: #fff;
  color: #1A2332;
}

/* バッジの並びコンテナ。ステータスごとに濃・淡2変数(計10変数)を定義する */
.sb-wrap {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin-bottom: 12px;
  --status-progress: #1E40AF;      --status-progress-soft: #DBEAFE;
  --status-done:     #065F46;      --status-done-soft:     #D1FAE5;
  --status-error:    #991B1B;      --status-error-soft:    #FEE2E2;
  --status-warning:  #92400E;      --status-warning-soft:  #FEF3C7;
  --status-hold:     #6B7280;      --status-hold-soft:     #F3F4F6;
}

/* ステータスごとに中間変数(--_main / --_soft)へマッピングする。
   分岐はここに集約し、型別スタイル(.sb-soft 等)には書かない */
.sb-badge[data-status="progress"] { --_main: var(--status-progress); --_soft: var(--status-progress-soft); }
.sb-badge[data-status="done"]     { --_main: var(--status-done);     --_soft: var(--status-done-soft); }
.sb-badge[data-status="error"]    { --_main: var(--status-error);    --_soft: var(--status-error-soft); }
.sb-badge[data-status="warning"]  { --_main: var(--status-warning);  --_soft: var(--status-warning-soft); }
.sb-badge[data-status="hold"]     { --_main: var(--status-hold);     --_soft: var(--status-hold-soft); }

/* 共通形状+塗りつぶし(既定) */
.sb-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 3px 12px;
  border-radius: 9999px;
  font-size: 12px;
  font-weight: 600;
  border: 1.5px solid transparent;
  background: var(--_main);
  color: #fff;
}

/* ソフト(薄背景+濃文字) */
.sb-badge.sb-soft {
  background: var(--_soft);
  color: var(--_main);
}

/* アウトライン(白背景+濃色の枠線) */
.sb-badge.sb-outline {
  background: #fff;
  color: var(--_main);
  border-color: var(--_main);
}

/* 色だけに意味を依存させないためのドット(文字色と同じ色で描画) */
.sb-badge.sb-dot::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: currentColor;
}

/* ステータス切替セグメントボタン */
.sb-switch {
  display: inline-flex;
  border: 1.5px solid #D0D7E0;
  border-radius: 8px;
  overflow: hidden;
  margin-bottom: 12px;
}
.sb-switch-btn {
  padding: 8px 16px;
  font-size: 13px;
  background: #fff;
  color: #5A6A7A;
  border: none;
  cursor: pointer;
  font-family: inherit;
}
.sb-switch-btn + .sb-switch-btn {
  border-left: 1.5px solid #D0D7E0;
}
.sb-switch-btn.is-active {
  background: #2B7FE8;
  color: #fff;
}

/* スマホ対応 */
@media (max-width: 480px) {
  body { padding: 16px; }
}
// ステータス定義(idがdata-status値・labelが表示文字列)
var STATUSES = [
  { id: 'progress', label: '進行中' },
  { id: 'done',     label: '完了' },
  { id: 'error',    label: 'エラー' },
  { id: 'warning',  label: '警告' },
  { id: 'hold',     label: '保留' }
];

var switchBtns    = document.querySelectorAll('.sb-switch-btn');
var targetBadges  = document.querySelectorAll('.js-sb-target');

// 選択されたステータスに切り替える。
// 色の決定はCSS側の data-status セレクタが行うため、ここでは属性とテキストの書き換えのみ行う
function switchStatus(statusId) {
  var status = STATUSES.filter(function (s) { return s.id === statusId; })[0];
  if (!status) return;

  switchBtns.forEach(function (btn) {
    btn.classList.toggle('is-active', btn.dataset.status === statusId);
  });

  targetBadges.forEach(function (badge) {
    badge.dataset.status = status.id;
    badge.textContent = status.label;
  });
}

switchBtns.forEach(function (btn) {
  btn.addEventListener('click', function () {
    switchStatus(btn.dataset.status);
  });
});

AI用プロンプト

各パターンのプロンプトをコピーしてAIに渡すと、同様のコンポーネントを生成できます。

ChatGPTやClaudeにこのプロンプトを渡すと、同様のコンポーネントをゼロから生成・カスタマイズできます。色変更やライブラリ指定など、要件を追記して使うのがおすすめです。

※ このプロンプトを使ってもデモとまったく同じ動作にならない場合があります。AIの解釈や生成タイミングによって差が出ることをご了承ください。

💡 jQuery・Vue・React など特定のライブラリで実装したい場合は、プロンプトの末尾に「〇〇を使って実装してください」と追記してください。

Pattern 1〜3 — 業務ステータスバッジ配色パターン集

# ステータスバッジ(業務配色パターン集)作成依頼

## 概要
業務システムでよく使うステータスバッジの配色パターン集を実装してください。
5種のステータスに定番の色を割り当て、3タイプの見た目バリエーションを作成します。

## 要件
- ステータスは5種:進行中(青)・完了(緑)・エラー(赤)・警告(黄)・保留(グレー)
- 見た目は3タイプ:塗りつぶし(濃色背景+白文字)・ソフト(薄背景+濃文字)・アウトライン(白背景+濃色の枠線と文字)
- 色の定義はCSSカスタムプロパティに集約する(ステータスごとに濃・淡の2変数、計10変数)
- バッジの色は data-status 属性の値だけで決まるようにする(クラスの付け替えで色を変えない)
- 色だけに意味を依存させないよう、テキストラベルを必ず表示し、先頭にドットを付けたバリエーションも1種類作成する

## 技術仕様
- HTML / CSS / バニラJavaScript で実装
- 外部ライブラリ:なし
- レスポンシブ対応:必要(狭い幅ではバッジが折り返す)

## 動作詳細
バッジは inline-flex の丸ピル形状(border-radius: 9999px、padding: 3px 12px、font-size: 12px)。
CSSは data-status 属性セレクタで濃・淡2つの中間変数(--_main / --_soft)にマッピングし、
塗りつぶし=濃背景+白文字、ソフト=淡背景+濃文字、アウトライン=白背景+濃枠線を
すべてこの2変数から導出する。型別のスタイルにステータス分岐を書かないこと。
配色例:進行中 #1E40AF / #DBEAFE、完了 #065F46 / #D1FAE5、エラー #991B1B / #FEE2E2、
警告 #92400E / #FEF3C7、保留 #6B7280 / #F3F4F6。

## 出力形式
HTML・CSS・JavaScriptを分けて出力してください。
各ファイルは単独でコピー&ペーストして使えるよう記述してください。

Pattern 4 — ステータス切替デモ

# ステータスバッジ(ステータス切替デモ)作成依頼

## 概要
ボタン操作でバッジのステータスを切り替えるデモを実装してください。
data-status 属性の書き換えだけでバッジの配色が変わる設計を実演するものです。

## 要件
- 「進行中・完了・エラー・警告・保留」の5つのセグメントボタンを表示する
- ボタンの下に、塗りつぶし・ソフト・アウトラインの3タイプのバッジを並べて表示する
- ボタンをクリックすると、3つのバッジの data-status 属性とラベル文字列が一斉に切り替わる
- 選択中のボタンは背景色付きの選択状態にする
- 色の決定はすべてCSS側で行い、JavaScriptは属性とテキストの書き換えのみを行う

## 技術仕様
- HTML / CSS / バニラJavaScript で実装
- 外部ライブラリ:なし
- レスポンシブ対応:必要

## 動作詳細
ステータス定義は { id, label } の配列でJavaScript側に1箇所だけ持つ。
ボタンクリック時に対象バッジ全要素へ el.dataset.status = id と el.textContent = label を実行する。
バッジのテキスト更新は textContent を使う(innerHTML 禁止)。
CSSは data-status 属性セレクタで配色を導出する(ステータスごとに濃・淡2変数)。

## 出力形式
HTML・CSS・JavaScriptを分けて出力してください。
各ファイルは単独でコピー&ペーストして使えるよう記述してください。