バッジ・タグ(Badge / Tag)

通知数・ステータス・ラベルを視覚的に表現するUIの実装を4つのアプローチで比較。 カウントバッジ・ステータスドット・Ribbon・閉じるタグ・選択可能タグなど、実践的なパターンをインタラクティブに確認できます。

Mantine Badge / Indicator / Pill

Mantine の Badge は filled・outline・light・dot・gradient の5バリアントと xs〜xl の5サイズを持つ汎用ラベル。 Indicator はアバターやアイコンへの通知バッジ重ねがけ用コンポーネントで、 processing prop でパルスアニメーションも追加できる。 Pill は表示専用タグコンポーネントで、withRemoveButton で削除ボタンを追加できる。

5バリアント5サイズIndicatorprocessing アニメーションleftSection / rightSectionPill(表示用タグ)withRemoveButtonPill.Group
読み込み中...
タグ入力との棲み分け:Pill はタグの「表示」用コンポーネントです。タグの「入力・追加」が必要な場合は タグ入力(TagsInput / PillsInput) を参照してください。
tsx
'use client';
import { MantineProvider, Badge, Indicator, Avatar, Group } from '@mantine/core';
import '@mantine/core/styles.css';

export function MantineBadgeTagDemo() {
  return (
    <MantineProvider>
      <Group gap="md">
        <Badge variant="filled" color="blue">filled</Badge>
        <Badge variant="outline" color="green">outline</Badge>
        <Badge variant="light" color="red">light</Badge>
        <Badge variant="dot" color="violet">dot</Badge>
      </Group>
      <Group gap="md" mt="md">
        <Indicator label="3" size={16}>
          <Avatar radius="xl" />
        </Indicator>
        <Indicator processing color="green">
          <Avatar radius="xl" />
        </Indicator>
      </Group>
    </MantineProvider>
  );
}

🤖 AIプロンプトテンプレート

React + Tailwind CSSで、Mantineを使ったバッジ・タグを実装してください。
- 使用ライブラリ: @mantine/core の Badge・Indicator・Pill
- filled・outline・light・dot・gradient の5バリアントを持つ Badge を実装すること
- Indicator コンポーネントでカウントバッジをアバターやボタンに重ねて表示できること
- Indicator の processing prop でパルスアニメーションを実装すること
- Badge の leftSection / rightSection を使って閉じるボタン付きタグを実装し、クリックで削除できること
- xs〜xl の5サイズ切り替えを実装すること
- @mantine/core の Pill コンポーネントで表示専用タグを実装すること
- withRemoveButton prop で削除ボタン付きPillを実装し、クリックで該当タグを削除できること
- Pill.Group で複数のPillをまとめて表示すること
- Pillの子要素にアイコンspanを含めてアイコン付きPillを実装すること

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。

ライブラリ比較

項目MantineAnt Designshadcn/uiCSS カスタム
ラベル系バッジ✅ Badge(5バリアント)✅ Tag(closable・preset color)✅ Badge(4バリアント)⚠️ light スタイルを自作
カウントバッジ✅ Indicator(要素に重ねる)✅ Badge(count / dot)❌ 標準では非対応⚠️ absolute配置で自作
ステータスドット⚠️ dot variant で代替✅ Badge status prop❌ 標準では非対応⚠️ CSS animation で自作
Ribbon型バッジ❌ 標準では非対応✅ Badge.Ribbon❌ 標準では非対応⚠️ absolute + 自作
閉じるタグ⚠️ rightSection に × ボタン✅ Tag closable prop⚠️ className で自作⚠️ 手動で × ボタン追加
選択可能タグ⚠️ Pill + state で実装可✅ Tag.CheckableTag⚠️ state で実装可⚠️ state で自作
表示用Pill✅ Pill(withRemoveButton)⚠️ Tag で代替⚠️ Badge で代替⚠️ 自作
パルスアニメーション✅ Indicator processing⚠️ status=processing❌ 標準では非対応⚠️ CSS animation で自作
カラープリセット✅ Mantine カラーシステム✅ 11色プリセット✅ Tailwind クラスで自由指定✅ 任意のCSSカラー
バンドルサイズ⚠️ 中(全体で大)⚠️ 中(全体で大)✅ 軽量(コンポーネント単位)✅ ゼロ追加

選択のポイント

  • Mantine — Badge の5バリアント(filled / outline / light / dot / gradient)が揃っており、 Indicator で通知ドットをアバターやアイコンに手軽に重ねられる。 processing アニメーション付きの Indicator はオンライン状態やリアルタイム更新の表示に最適。 Pill コンポーネントは表示専用のタグ表現に特化しており、withRemoveButton で削除ボタンを追加できる。タグの入力・追加が必要な場合は TagsInputPillsInput を使用する。
  • Ant Design — Badge.Ribbon はカード角へのリボン貼り付けを一発で実現でき、セール・NEWラベルに便利。 Tag.CheckableTag はフィルタ系UIに直感的に使えて、closable タグも onClose だけで実装できる。 Tag のプリセットカラー11色も豊富。
  • shadcn/ui — シンプルな Badge コンポーネントひとつで4バリアントに対応。className で Tailwind クラスを追加するだけで カラーや角丸を自由に調整でき、既存のデザインシステムに自然に馴染む。 カウントバッジやステータスドットは標準非対応のため、それらが必要な場合は他の選択肢を検討する。
  • CSS カスタム — デザインシステムの色に完全準拠させたい場合に最適。 light スタイルのタグ(背景色 + ボーダー)はシンプルな実装でありながら視認性が高く、 選択可能タグも state だけで簡単に実装できる。依存ゼロで軽量。