Meter 计量条
Meter 表示已知范围内的数量,或一个比例值。
用法
import { Meter, Label } from '@lenso/ui';此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";
import { Meter } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";const styles = stylex.create({ meter: { width: 256 } });
export function Basic() { return ( <Meter aria-label="Storage" xstyle={styles.meter} value={60}> <Meter.Label>Storage</Meter.Label> <Meter.Output /> <Meter.Track> <Meter.Fill /> </Meter.Track> </Meter> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
组件结构
import { Meter, Label } from '@lenso/ui';
export default () => ( <Meter value={60}> <Label>Storage</Label> <Meter.Output /> <Meter.Track> <Meter.Fill /> </Meter.Track> </Meter>);示例
尺寸
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (Apache-2.0).import { Meter } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";const styles = stylex.create({ column: { display: "flex", width: 256, flexDirection: "column", gap: 24 },});export function Sizes() { return ( <div {...stylex.props(styles.column)}> <Meter color="success" size="sm" value={40}> <Meter.Label>Small</Meter.Label> <Meter.Output /> <Meter.Track> <Meter.Fill /> </Meter.Track> </Meter> <Meter color="accent" size="md" value={60}> <Meter.Label>Medium</Meter.Label> <Meter.Output /> <Meter.Track> <Meter.Fill /> </Meter.Track> </Meter> <Meter color="warning" size="lg" value={80}> <Meter.Label>Large</Meter.Label> <Meter.Output /> <Meter.Track> <Meter.Fill /> </Meter.Track> </Meter> </div> );}export default Sizes;Local adaptation source above. Derived from HeroUI v3.2.6 source.
颜色
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (Apache-2.0).import { Meter } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";const styles = stylex.create({ column: { display: "flex", width: 256, flexDirection: "column", gap: 24 },});export function Colors() { return ( <div {...stylex.props(styles.column)}> {(["default", "accent", "success", "warning", "danger"] as const).map((color) => ( <Meter key={color} color={color} value={50}> <Meter.Label> {color[0]?.toUpperCase()} {color.slice(1)} </Meter.Label> <Meter.Output /> <Meter.Track> <Meter.Fill /> </Meter.Track> </Meter> ))} </div> );}export default Colors;Local adaptation source above. Derived from HeroUI v3.2.6 source.
无可见标签
无需可见标签时,使用 aria-label 提供无障碍标签。
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (Apache-2.0).import { Meter } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";const styles = stylex.create({ meter: { width: 256 } });export function WithoutLabel() { return ( <Meter aria-label="Storage usage" xstyle={styles.meter} value={45}> <Meter.Track> <Meter.Fill /> </Meter.Track> </Meter> );}export default WithoutLabel;Local adaptation source above. Derived from HeroUI v3.2.6 source.
自定义取值范围与格式
使用 minValue、maxValue 与 formatOptions 自定义取值范围与显示格式。
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (Apache-2.0); native Base UI range and formatting.import { Meter } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";const styles = stylex.create({ meter: { width: 256 } });export function CustomValue() { return ( <Meter xstyle={styles.meter} format={{ currency: "USD", style: "currency" }} max={1000} min={0} value={750} > <Meter.Label>Revenue</Meter.Label> <Meter.Output /> <Meter.Track> <Meter.Fill /> </Meter.Track> </Meter> );}export default CustomValue;Local adaptation source above. Derived from HeroUI v3.2.6 source.
自定义样式
Tailwind CSS
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (Apache-2.0).import { Meter } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";const styles = stylex.create({ meter: { width: 256 }, label: { fontWeight: 500, color: "var(--foreground)" }, output: { color: "var(--muted)", fontVariantNumeric: "tabular-nums" }, track: { borderRadius: 9999, backgroundColor: "var(--default)" }, fill: { borderRadius: 9999, backgroundColor: "var(--warning)" },});export function CustomStyles() { return ( <Meter aria-label="Storage used" xstyle={styles.meter} value={68}> <Meter.Label xstyle={styles.label}>Storage used</Meter.Label> <Meter.Output xstyle={styles.output} /> <Meter.Track xstyle={styles.track}> <Meter.Fill xstyle={styles.fill} /> </Meter.Track> </Meter> );}export default CustomStyles;Local adaptation source above. Derived from HeroUI v3.2.6 source.
全局 CSS
若要自定义组件类,可使用 @layer components 指令。了解更多。
@layer components { .meter { @apply w-full gap-2; }
.meter__track { @apply h-3 rounded-full; }
.meter__fill { @apply rounded-full; }}样式参考
HeroUI 遵循 BEM 方法论,确保组件变体与状态可复用且易于自定义。
CSS 类
Meter 使用以下 CSS 类(查看源码样式):
基础与元素类 [!toc]
.meter— 基础容器(grid 布局).meter__output— 数值文本展示.meter__track— 轨道背景.meter__fill— 轨道已填充部分
尺寸类 [!toc]
.meter--sm— 小尺寸变体(更细的轨道).meter--md— 中等尺寸变体(默认).meter--lg— 大尺寸变体(更粗的轨道)
颜色类 [!toc]
.meter--default— 默认颜色变体.meter--accent— 强调色变体.meter--success— 成功色变体.meter--warning— 警告色变体.meter--danger— 危险色变体
API 参考
Meter
继承自 React Aria Meter。
| Prop | 类型 | 默认值 | 描述 |
|---|---|---|---|
value | number | 0 | 当前值 |
minValue | number | 0 | 最小值 |
maxValue | number | 100 | 最大值 |
size | "sm" | "md" | "lg" | "md" | Meter 轨道尺寸 |
color | "default" | "accent" | "success" | "warning" | "danger" | "accent" | 填充条颜色 |
formatOptions | Intl.NumberFormatOptions | {style: 'percent'} | 数值展示的格式化选项 |
valueLabel | ReactNode | - | 自定义数值标签内容 |
children | ReactNode | (values: MeterRenderProps) => ReactNode | - | 内容或渲染 prop |
MeterRenderProps
使用渲染 prop 模式时,会提供以下值:
| Prop | 类型 | 描述 |
|---|---|---|
percentage | number | Meter 百分比(0–100) |
valueText | string | 格式化后的数值文本 |