zz design system
mono & squared
组件 / 基础控件

按钮

按钮是唯一负责交互反馈的基础控件。它用 1px 描边而非阴影表达层级,用 scale(0.96)表达按下,从不位移。所有变体共用同一套尺寸阶梯:32 / 36 / 40 / 44px。

变体

一屏之内最多出现一个 default(品牌填充)按钮,它标记当前视图的主操作。

尺寸

尺寸同时改变高度、内距与字号,图标尺寸自动跟随。

状态

悬停只改背景与描边;焦点环是全局 2px 品牌色外描边,偏移 2px;禁用态把不透明度压到 50% 并移除指针事件。

用法

---
import Button from '@/components/ui/Button.astro'
---

<Button>主操作</Button>
<Button variant="outline" size="sm">次要</Button>
<Button variant="destructive" disabled>删除</Button>

类名与 token

类名作用
.zz-btn基础结构:内联弹性、等宽字体、1px 透明边框占位、150ms 过渡
.zz-btn--default品牌色填充,文字用 --zz-brand-ink
.zz-btn--outline1px --zz-border-strong 描边 + --zz-surface 底
.zz-btn--secondary--zz-surface-2 底,用于次级操作
.zz-btn--ghost无底,仅悬停出 --zz-surface-2,图标按钮默认
.zz-btn--destructive12% 危险色底 + 危险色文字
.zz-btn--link无内距,品牌色文字,悬停下划线
.zz-btn--xs | sm | md | lg高度 2 / 2.25 / 2.5 / 2.75rem,内距 10 / 12 / 16 / 20px
.zz-btn--icon | icon-xs | icon-sm | icon-lg正方形,内距归零
.zz-btn-group横向拼接,相邻按钮重叠 1px 边框

可访问性

  • 图标按钮必须带 aria-label(<slot> 里只有 svg 时)。
  • 焦点环由全局 :focus-visible 提供,不要用 outline: none 覆盖。
  • 渲染成 <a> 时用 aria-disabled 而不是 disabled,并保留可聚焦性。
  • 按下反馈是纯视觉变换,不改变布局,因此不会引起重排抖动。