Badge 是带背景色的紧凑标签,通过组合 inline-flex、text-xs、rounded-full 等工具类实现;推荐在 theme.extend 中定义语义化颜色别名,并注意文字色适配、whitespace-nowrap、min-w-[1.5rem]、align-middle 及多语言宽度处理。

Badge 样式本质就是带背景色的紧凑标签
Tailwind 里没有叫 badge 的预设类,它靠组合基础工具类实现:小字号、圆角、内边距、背景色、文字色。最简可行样式是 inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium —— 这套组合覆盖了 90% 的 Badge 场景,比如状态标记、新功能提示、未读数。
常见 Badge 变体怎么写才不重复造轮子
不同语义需要不同颜色和尺寸,但没必要为每个都写新 class。推荐用 Tailwind 的 theme.extend 在 tailwind.config.js 里定义语义化别名:
module.exports = {
theme: {
extend: {
colors: {
'badge-success': '#10b981',
'badge-warning': '#f59e0b',
'badge-danger': '#ef4444',
}
}
}
}
然后直接用 bg-badge-success text-white 或 bg-badge-warning text-gray-900。注意:文字色要手动配,text-white 在深色背景上才够对比度,浅色背景(如 warning)得换 text-gray-900。
动态徽标(带数字)要注意宽度和截断
当 Badge 显示未读数(如 99+)时,内容长度不可控,容易撑开容器或换行。关键控制点有三个:
立即学习“前端免费学习笔记(深入)”;
- 用
whitespace-nowrap防止内部换行 - 加
min-w-[1.5rem]给最小宽度,避免单个数字太窄 - 数字超过两位时建议用
truncate或显示为99+,别硬塞1234
完整示例:inline-flex items-center px-2 py-0.5 rounded-full bg-blue-500 text-white text-xs font-medium whitespace-nowrap min-w-[1.5rem] justify-center。
和图标一起用时垂直对齐容易错位
把 svg 或 icon 塞进 Badge 里,常见问题是图标下沉或上下留白不均。根本原因是图标默认按基线(baseline)对齐,而文字是居中的。解法统一用 align-middle 或 self-center:
<span class="inline-flex items-center px-2 py-0.5 rounded-full bg-red-500 text-white text-xs"> <svg class="w-3 h-3 mr-1 align-middle" ...></svg> Pro </span>
如果图标本身有额外 padding 或 viewBox 不居中,优先调图标 SVG 的 viewBox,而不是靠外层 margin 补偿 —— 后者在响应式缩放时会失效。
真正麻烦的是多语言环境下的 Badge 宽度一致性:中文“已上线”和英文“Live”字宽差一倍,这时候不能只靠 min-w,得结合设计系统约定——要么固定宽度(w-16),要么允许弹性但限制最大字符数(文案侧控制)。



















