一个 React 按钮,采用 Liquid Glass 风格,支持五种尺寸、图标插槽与链接渲染。
Button 渲染带 Liquid Glass 表面的原生按钮,支持可选的前后图标与五种尺寸。它用于触发操作;需要导航时,可将其渲染为链接。
下面的计数器直接渲染真实 Button。点击按钮会更新 React 状态,重置按钮在计数为零时自动禁用。
Clicked 0 times
支持 xs / sm / md / lg / xl,默认 md。文字和图标会随尺寸缩放,不需要给图标单独传 size。
前置图标位于文字左侧,后置图标位于文字右侧。两个图标使用相同的普通容器。纯图标按钮需要提供 aria-label;没有文字时不会渲染空的 label 插槽,图标会保持居中。
禁用状态使用原生 disabled,键盘与指针交互都会停止。focusableWhenDisabled 会让按钮在禁用时仍保留在 Tab 顺序中,组件通过 aria-disabled 表达禁用状态并阻止激活,适合需要提示原因的禁用操作。
className 调整外层点击区域,内部的 base 布局会自动填满可用宽度:
需要导航而不是触发操作时,可以传入 nativeButton={false} 并渲染链接,而不是原生 <button>:
form 可以把按钮关联到文档中其他位置的表单。当多个按钮提交同一个表单时,name 与 value 用来区分用户选择了哪个操作。
No action submitted yet.
Button 默认渲染原生 <button>,因此焦点、Enter 与 Space 激活以及禁用行为都由平台提供。label 或 children 提供可访问名称。纯图标按钮必须使用 aria-label 或 aria-labelledby;图标插槽是装饰性的,对辅助技术隐藏。
使用 nativeButton={false} 渲染链接或其他元素时,请保持可见标签有意义,并选择与操作语义匹配的元素。focusableWhenDisabled 会让禁用的操作保留在 Tab 顺序中,通过 aria-disabled 暴露状态,同时阻止激活。
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
label | ReactNode | — | 按钮文字;label 为真值时优先于 children。 |
children | ReactNode | — | label 为假值或未提供时使用的可见内容。 |
leadingIcon | ReactNode | — | 标签前的装饰性图标。 |
trailingIcon | ReactNode | — | 标签后的装饰性图标。 |
size | "xs" | "sm" | "md" | "lg" | "xl" | "md" | 控制高度、内边距、文字与图标尺寸。 |
disabled | boolean | false | 禁用按钮。 |
focusableWhenDisabled | boolean | false | 禁用时仍保留在 Tab 顺序中,并通过 aria-disabled 表达状态。 |
nativeButton | boolean | true | 是否渲染原生 <button>;渲染链接或其他元素时设为 false。 |
type | "button" | "submit" | "reset" | "button" | 原生按钮类型。需要在表单中提交时设为 "submit"。 |
form | string | — | 拥有该按钮的表单 ID。 |
name | string | — | 随表单提交的字段名。 |
value | string | — | 随表单提交的值。 |
onClick | MouseEventHandler<HTMLElement> | — | 按钮被按下时调用。 |
render | ReactElement | ((props, state) => ReactElement) | — | 替换渲染的元素。 |
ref | Ref<HTMLElement> | — | 转发到渲染元素的 ref。 |
className | string | — | Tailwind 类名,合并到外层 root。 |
style | CSSProperties | — | 内联样式,合并到与 className 相同的元素。 |
ui | { root?: ClassValue; base?: ClassValue; glass?: ClassValue; overlay?: ClassValue; label?: ClassValue; leadingIcon?: ClassValue; trailingIcon?: ClassValue } | — | 按 data-slot 组织的内部槽位类名。 |
| 属性 | 说明 |
|---|---|
data-disabled | 按钮禁用时存在。 |
data-slot | 标记内部部件(root、base、glass、overlay、leading-icon、label、trailing-icon),用于样式选择。纯图标按钮不会渲染 label。 |
组件使用共享玻璃材质。可以在父级调整 --ui-glass-* token,用 className 控制布局,并通过 ui 按 data-slot 调整内部槽位。组件级数值位于 src/theme/button.ts。Token 分层与预设见主题指南。