Badge 徽章
相对其他元素定位的小型指示器,常用于通知数量、状态点与标签
用法
import { Badge } from '@lenso/ui';此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// oxlint-disable jsx-a11y/prefer-tag-over-role -- The CSS-painted status dot has no image resource for an HTML img.// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Avatar, Badge } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";import { s } from "../card/display.stylex";
export function BadgeBasic() { return ( <div {...stylex.props(s.row6)}> <Badge.Anchor> <Avatar> <Avatar.Image alt="John Doe" src="https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/green.jpg" /> <Avatar.Fallback>JD</Avatar.Fallback> </Avatar> <Badge color="danger" size="sm"> 5 </Badge> </Badge.Anchor> <Badge.Anchor> <Avatar> <Avatar.Image alt="Alex Brown" src="https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/orange.jpg" /> <Avatar.Fallback>AB</Avatar.Fallback> </Avatar> <Badge color="accent" size="sm"> New </Badge> </Badge.Anchor> <Badge.Anchor> <Avatar> <Avatar.Image alt="Chris Davis" src="https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/blue.jpg" /> <Avatar.Fallback>CD</Avatar.Fallback> </Avatar> <Badge role="img" aria-label="Online" color="success" placement="bottom-right" size="sm" /> </Badge.Anchor> </div> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
组件结构
Badge 通过 Badge.Anchor 相对其他元素定位。纯文本子节点会自动包裹在 <Badge.Label> 中。
独立标签用法请使用 Chip 组件。
<Badge.Anchor> <Avatar /> <Badge color="danger">5</Badge></Badge.Anchor>示例
变体
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Avatar, Badge, Separator } from "@lenso/ui";import { Fragment } from "react";import * as stylex from "@stylexjs/stylex";import { s } from "../card/display.stylex";
const AVATAR_URL = "https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/green.jpg";export function BadgeVariants() { const variants = ["primary", "secondary", "soft"] as const; const colors = ["accent", "default", "success", "warning", "danger"] as const; return ( <div {...stylex.props(s.column8)}> {variants.map((variant, index) => ( <Fragment key={variant}> <div {...stylex.props(s.column4)}> <h3 {...stylex.props(s.textSm, s.semibold, s.muted, s.capitalize)}>{variant}</h3> <div {...stylex.props(s.row6)}> {colors.map((color) => ( <Badge.Anchor key={color}> <Avatar> <Avatar.Image alt="John Doe" src={AVATAR_URL} /> <Avatar.Fallback>JD</Avatar.Fallback> </Avatar> <Badge color={color} size="sm" variant={variant}> 5 </Badge> </Badge.Anchor> ))} </div> </div> {index < variants.length - 1 && <Separator />} </Fragment> ))} </div> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
尺寸
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Avatar, Badge } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";import { s } from "../card/display.stylex";
const AVATAR_URL = "https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/green.jpg";export function BadgeSizes() { const sizes = ["sm", "md", "lg"] as const; return ( <div {...stylex.props(s.row6)}> {sizes.map((size) => ( <Badge.Anchor key={size}> <Avatar size={size}> <Avatar.Image alt="John Doe" src={AVATAR_URL} /> <Avatar.Fallback>JD</Avatar.Fallback> </Avatar> <Badge color="danger" size={size}> 5 </Badge> </Badge.Anchor> ))} </div> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
颜色
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Avatar, Badge } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";import { s } from "../card/display.stylex";
const AVATAR_URL = "https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/green.jpg";export function BadgeColors() { const colors = ["default", "accent", "success", "warning", "danger"] as const; return ( <div {...stylex.props(s.row6)}> {colors.map((color) => ( <Badge.Anchor key={color}> <Avatar> <Avatar.Image alt="John Doe" src={AVATAR_URL} /> <Avatar.Fallback>JD</Avatar.Fallback> </Avatar> <Badge color={color} size="sm" /> </Badge.Anchor> ))} </div> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
徽章位置
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Avatar, Badge } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";import { s } from "../card/display.stylex";
const AVATAR_URL = "https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/green.jpg";export function BadgePlacements() { const placements = ["top-right", "top-left", "bottom-right", "bottom-left"] as const; return ( <div {...stylex.props(s.row8)}> {placements.map((placement) => ( <div key={placement} {...stylex.props(s.centeredColumn2)}> <Badge.Anchor> <Avatar> <Avatar.Image alt="John Doe" src={AVATAR_URL} /> <Avatar.Fallback>JD</Avatar.Fallback> </Avatar> <Badge color="accent" placement={placement} size="sm" /> </Badge.Anchor> <span {...stylex.props(s.textXs, s.muted)}>{placement}</span> </div> ))} </div> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
点状徽标
空徽章作为状态指示器,适用于在线/离线或活动信号。
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Avatar, Badge } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";import { s } from "../card/display.stylex";
const AVATAR_URL = "https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/green.jpg";export function BadgeDot() { const colors = ["accent", "success", "warning", "danger"] as const; return ( <div {...stylex.props(s.row6)}> {colors.map((color) => ( <Badge.Anchor key={color}> <Avatar> <Avatar.Image alt="John Doe" src={AVATAR_URL} /> <Avatar.Fallback>JD</Avatar.Fallback> </Avatar> <Badge color={color} placement="bottom-right" size="sm" /> </Badge.Anchor> ))} </div> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
带内容
Badge 支持文本、数字与图标。无子节点时渲染为点状指示器。
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Bell } from "@gravity-ui/icons";import { Avatar, Badge } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";import { s } from "../card/display.stylex";
const AVATAR_URL = "https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/green.jpg";export function BadgeWithContent() { return ( <div {...stylex.props(s.row6)}> {["5", "New", "99+"].map((content) => ( <Badge.Anchor key={content}> <Avatar> <Avatar.Image alt="John Doe" src={AVATAR_URL} /> <Avatar.Fallback>JD</Avatar.Fallback> </Avatar> <Badge color="danger" size="sm"> {content} </Badge> </Badge.Anchor> ))} <Badge.Anchor> <Avatar> <Avatar.Image alt="John Doe" src={AVATAR_URL} /> <Avatar.Fallback>JD</Avatar.Fallback> </Avatar> <Badge color="accent" size="sm"> <Bell {...stylex.props(s.iconDot)} /> </Badge> </Badge.Anchor> </div> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
自定义样式
Tailwind CSS
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Avatar, Badge } from "@lenso/ui";import { s } from "../card/display.stylex";
export function CustomStyles() { return ( <Badge.Anchor> <Avatar> <Avatar.Image alt="Kate Wilson" src="https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/blue.jpg" /> <Avatar.Fallback>KW</Avatar.Fallback> </Avatar> <Badge xstyle={s.badgeNumber} color="accent" size="sm" variant="soft"> 5 </Badge> </Badge.Anchor> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
全局 CSS
可使用 @layer components 指令自定义 Badge 组件类。
了解更多。
@layer components { .badge { @apply rounded-full text-xs; }
.badge__label { @apply font-semibold; }
.badge--accent { @apply shadow-sm; }}样式参考
HeroUI 遵循 BEM 方法论,确保组件变体与状态可复用且易于自定义。
CSS 类
Badge 组件使用以下 CSS 类(查看源码样式):
基础类 [!toc]
.badge- 基础徽章容器样式.badge__label- 标签文本 slot 样式.badge-anchor- 锚定元素的定位包装器
颜色类 [!toc]
.badge--accent- 强调色变体.badge--danger- 危险色变体.badge--default- 默认色变体.badge--success- 成功色变体.badge--warning- 警告色变体
变体类 [!toc]
.badge--primary- 填充背景的主变体.badge--secondary- 默认背景的次变体.badge--soft- 浅色背景的 soft 变体
尺寸类 [!toc]
.badge--sm- 小尺寸.badge--md- 中尺寸(默认).badge--lg- 大尺寸
位置类 [!toc]
.badge--top-right- 右上角(默认).badge--top-left- 左上角.badge--bottom-right- 右下角.badge--bottom-left- 左下角
复合变体类 [!toc]
Badge 支持组合变体与颜色类(如 .badge--primary.badge--accent)。以下组合有默认样式:
Primary Variants:
.badge--primary.badge--accent- 填充背景的 primary accent.badge--primary.badge--default- 填充背景的 primary default.badge--primary.badge--success- 填充背景的 primary success.badge--primary.badge--warning- 填充背景的 primary warning.badge--primary.badge--danger- 填充背景的 primary danger
Soft Variants:
.badge--soft.badge--accent- 浅色背景的 soft accent.badge--soft.badge--default- 浅色背景的 soft default.badge--soft.badge--success- 浅色背景的 soft success.badge--soft.badge--warning- 浅色背景的 soft warning.badge--soft.badge--danger- 浅色背景的 soft danger
API 参考
Badge
| Prop | 类型 | 默认值 | 描述 |
|---|---|---|---|
children | React.ReactNode | - | 徽章内容(文本、数字或图标)。省略时渲染为点 |
className | string | - | 根元素附加 CSS 类 |
color | "default" | "accent" | "success" | "warning" | "danger" | "default" | 徽章颜色变体 |
variant | "primary" | "secondary" | "soft" | "primary" | 视觉样式变体 |
size | "sm" | "md" | "lg" | "md" | 徽章尺寸 |
placement | "top-right" | "top-left" | "bottom-right" | "bottom-left" | "top-right" | 相对锚点的位置 |
Badge.Anchor
| Prop | 类型 | 默认值 | 描述 |
|---|---|---|---|
children | React.ReactNode | - | 锚定元素及 Badge 本身 |
className | string | - | 锚点包装器附加 CSS 类 |
Badge.Label
| Prop | 类型 | 默认值 | 描述 |
|---|---|---|---|
children | React.ReactNode | - | 标签文本内容 |
className | string | - | 标签 slot 附加 CSS 类 |