ステータスバッジ

成功・進行中・警告・エラー・情報を色とドットで表す5種のステータスバッジ一覧。進行中とエラーはドットが脈動し、稼働中や要対応であることを直感的に伝えます。

#css#badge#status

ライブデモ

コード

HTML
<!-- ステータスバッジ: 状態を色+ドットで表現する一覧。進行中/エラーは脈動で"稼働中/要対応"を伝える -->
<section class="card" aria-label="タスクステータスの一覧">
  <h2 class="card__title">タスクステータス</h2>
  <ul class="status-list">
    <li class="status-badge status-badge--success">
      <span class="status-badge__dot" aria-hidden="true"></span>
      <span class="status-badge__label">成功</span>
    </li>
    <li class="status-badge status-badge--progress">
      <span class="status-badge__dot" aria-hidden="true"></span>
      <span class="status-badge__label">進行中</span>
    </li>
    <li class="status-badge status-badge--warning">
      <span class="status-badge__dot" aria-hidden="true"></span>
      <span class="status-badge__label">警告</span>
    </li>
    <li class="status-badge status-badge--error">
      <span class="status-badge__dot" aria-hidden="true"></span>
      <span class="status-badge__label">エラー</span>
    </li>
    <li class="status-badge status-badge--info">
      <span class="status-badge__dot" aria-hidden="true"></span>
      <span class="status-badge__label">情報</span>
    </li>
  </ul>
</section>
CSS
* { box-sizing: border-box; }
body {
  margin: 0;
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: 24px;
  font-family: "Segoe UI", system-ui, sans-serif;
  background: radial-gradient(circle at 28% 14%, #f8fafc 0%, #eef1f8 55%, #e3e9f5 100%);
}

.card {
  width: min(360px, 92vw);
  background: #ffffff;
  border-radius: 20px;
  padding: 30px 28px 32px;
  box-shadow: 0 24px 48px -22px rgba(30, 41, 59, .28), 0 2px 8px rgba(30, 41, 59, .06);
  border: 1px solid rgba(148, 163, 184, .16);
}

.card__title {
  margin: 0 0 20px;
  font-size: 14.5px;
  font-weight: 700;
  color: #1e293b;
  letter-spacing: .02em;
}

.status-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 11px;
}

.status-badge {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  width: fit-content;
  padding: 7px 15px 7px 11px;
  border-radius: 999px;
  font-size: 13.5px;
  font-weight: 600;
  letter-spacing: .01em;
}

.status-badge__dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex: none;
}

/* 成功: 落ち着いたグリーン */
.status-badge--success { background: #ecfdf3; color: #15803d; }
.status-badge--success .status-badge__dot { background: #22c55e; }

/* 進行中: ブルー。稼働中であることをドットの脈動で伝える */
.status-badge--progress { background: #eff6ff; color: #1d4ed8; }
.status-badge--progress .status-badge__dot {
  background: #3b82f6;
  --pulse-color: rgba(59, 130, 246, .55);
  animation: pulse-ring 1.8s ease-out infinite;
}

/* 警告: アンバー */
.status-badge--warning { background: #fffbeb; color: #b45309; }
.status-badge--warning .status-badge__dot { background: #f59e0b; }

/* エラー: レッド。要対応であることをドットの脈動で伝える */
.status-badge--error { background: #fef2f2; color: #b91c1c; }
.status-badge--error .status-badge__dot {
  background: #ef4444;
  --pulse-color: rgba(239, 68, 68, .55);
  animation: pulse-ring 1.35s ease-out infinite;
}

/* 情報: ニュートラルなスレート */
.status-badge--info { background: #f1f5f9; color: #475569; }
.status-badge--info .status-badge__dot { background: #64748b; }

@keyframes pulse-ring {
  0%   { box-shadow: 0 0 0 0 var(--pulse-color, transparent); }
  70%  { box-shadow: 0 0 0 7px rgba(0, 0, 0, 0); }
  100% { box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); }
}

@media (prefers-reduced-motion: reduce) {
  .status-badge__dot { animation: none !important; }
}
JavaScript
// ステータスバッジ: 静的な色分け表示のみで完結するため、JSでの操作は不要。

🤖 AIエージェント用プロンプト

このままコピーしてAIに貼り付け「追加する場所」だけ書き換えればOK
あなたは熟練のフロントエンドエンジニアです。私のWebサイトに「ステータスバッジ」の効果を追加してください。

# 追加してほしい効果
ステータスバッジ(バッジ & アバター)
成功・進行中・警告・エラー・情報を色とドットで表す5種のステータスバッジ一覧。進行中とエラーはドットが脈動し、稼働中や要対応であることを直感的に伝えます。

# 追加する場所
👉【ここに対象箇所を記入:例「トップのヒーローセクション」「お問い合わせボタン」「記事カードの一覧」など】

# 参考実装(この見た目・挙動を再現してください)
【HTML】
<!-- ステータスバッジ: 状態を色+ドットで表現する一覧。進行中/エラーは脈動で"稼働中/要対応"を伝える -->
<section class="card" aria-label="タスクステータスの一覧">
  <h2 class="card__title">タスクステータス</h2>
  <ul class="status-list">
    <li class="status-badge status-badge--success">
      <span class="status-badge__dot" aria-hidden="true"></span>
      <span class="status-badge__label">成功</span>
    </li>
    <li class="status-badge status-badge--progress">
      <span class="status-badge__dot" aria-hidden="true"></span>
      <span class="status-badge__label">進行中</span>
    </li>
    <li class="status-badge status-badge--warning">
      <span class="status-badge__dot" aria-hidden="true"></span>
      <span class="status-badge__label">警告</span>
    </li>
    <li class="status-badge status-badge--error">
      <span class="status-badge__dot" aria-hidden="true"></span>
      <span class="status-badge__label">エラー</span>
    </li>
    <li class="status-badge status-badge--info">
      <span class="status-badge__dot" aria-hidden="true"></span>
      <span class="status-badge__label">情報</span>
    </li>
  </ul>
</section>

【CSS】
* { box-sizing: border-box; }
body {
  margin: 0;
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: 24px;
  font-family: "Segoe UI", system-ui, sans-serif;
  background: radial-gradient(circle at 28% 14%, #f8fafc 0%, #eef1f8 55%, #e3e9f5 100%);
}

.card {
  width: min(360px, 92vw);
  background: #ffffff;
  border-radius: 20px;
  padding: 30px 28px 32px;
  box-shadow: 0 24px 48px -22px rgba(30, 41, 59, .28), 0 2px 8px rgba(30, 41, 59, .06);
  border: 1px solid rgba(148, 163, 184, .16);
}

.card__title {
  margin: 0 0 20px;
  font-size: 14.5px;
  font-weight: 700;
  color: #1e293b;
  letter-spacing: .02em;
}

.status-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 11px;
}

.status-badge {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  width: fit-content;
  padding: 7px 15px 7px 11px;
  border-radius: 999px;
  font-size: 13.5px;
  font-weight: 600;
  letter-spacing: .01em;
}

.status-badge__dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex: none;
}

/* 成功: 落ち着いたグリーン */
.status-badge--success { background: #ecfdf3; color: #15803d; }
.status-badge--success .status-badge__dot { background: #22c55e; }

/* 進行中: ブルー。稼働中であることをドットの脈動で伝える */
.status-badge--progress { background: #eff6ff; color: #1d4ed8; }
.status-badge--progress .status-badge__dot {
  background: #3b82f6;
  --pulse-color: rgba(59, 130, 246, .55);
  animation: pulse-ring 1.8s ease-out infinite;
}

/* 警告: アンバー */
.status-badge--warning { background: #fffbeb; color: #b45309; }
.status-badge--warning .status-badge__dot { background: #f59e0b; }

/* エラー: レッド。要対応であることをドットの脈動で伝える */
.status-badge--error { background: #fef2f2; color: #b91c1c; }
.status-badge--error .status-badge__dot {
  background: #ef4444;
  --pulse-color: rgba(239, 68, 68, .55);
  animation: pulse-ring 1.35s ease-out infinite;
}

/* 情報: ニュートラルなスレート */
.status-badge--info { background: #f1f5f9; color: #475569; }
.status-badge--info .status-badge__dot { background: #64748b; }

@keyframes pulse-ring {
  0%   { box-shadow: 0 0 0 0 var(--pulse-color, transparent); }
  70%  { box-shadow: 0 0 0 7px rgba(0, 0, 0, 0); }
  100% { box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); }
}

@media (prefers-reduced-motion: reduce) {
  .status-badge__dot { animation: none !important; }
}

【JavaScript】
// ステータスバッジ: 静的な色分け表示のみで完結するため、JSでの操作は不要。

# 外部ライブラリ
なし(追加ライブラリ不要)

# 守ってほしいこと
- 既存のHTML構造・レイアウト・デザインを壊さないこと。必要に応じてクラス名・色・サイズを私のサイトに合わせて調整してよい。
- クラス名やidが既存と衝突しないよう、必要なら接頭辞で名前空間を分けること。
- レスポンシブ対応と prefers-reduced-motion への配慮を入れること。
- 私のサイトのフレームワーク(React / Vue / 素のHTML など)に合わせて実装すること。不明な場合は素のHTML/CSS/JSで提示し、組み込み手順も説明すること。
- 変更後の確認手順も簡潔に教えてください。