Skip to content
Lenso UI

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类型默认值描述
childrenReact.ReactNode-徽章内容(文本、数字或图标)。省略时渲染为点
classNamestring-根元素附加 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类型默认值描述
childrenReact.ReactNode-锚定元素及 Badge 本身
classNamestring-锚点包装器附加 CSS 类

Badge.Label

Prop类型默认值描述
childrenReact.ReactNode-标签文本内容
classNamestring-标签 slot 附加 CSS 类

相关组件