跳转到内容

设计规范 · macOS

本页只写 macOS 平台差异。共享规则见设计规范 · 共享核心;Windows 见 Windows 平台层。依据 Apple《Human Interface Guidelines》macOS 部分。

项规定
标题栏样式titleBarStyle: Overlay + hiddenTitle,内容延伸到标题栏(unified toolbar 观感)
红绿灯留位左侧固定留位(x: 10, y: 14),内容不得覆盖
标题栏高度工具栏行高 40px(紧凑统一工具栏),与其下内容用 hairline 分隔,不使用 CSS 阴影
拖拽区整条标题栏 / 工具栏 data-tauri-drag-region,按钮除外
窗口控件使用系统红绿灯(不自绘);禁止在工具栏右侧再放最小化 / 最大化 / 关闭
关键信息位置底部不放关键控件或重要信息(窗口底边常被移出屏幕)

NSVisualEffectView 语义材质与 Tauri windowEffects 的对应(tauri.conf.json > app.windows[].windowEffects):

区域Apple 语义材质Tauri effectsBlending回退
侧栏(导航列表)Sidebarsidebarbehind windowbg-sidebar 实色
工具栏 / 标题栏Header viewheaderViewbehind windowbg-background 实色
下拉 / 菜单Menumenu(或浮层内 CSS 毛玻璃)within windowbg-popover 实色
浮层 / PopoverPopoverpopoverwithin windowbg-popover 实色
对话框(sheet)Sheetsheetwithin windowbg-card 实色
  • state 建议 followsWindowActiveState:窗口失焦时材质自动变浅。
  • 依赖 Reduce Transparency:CSS 侧监听 prefers-reduced-transparency: reduce 时切换实色层。
  • 窗口背景契约:材质经 Rust apply_window_effects() 启用(macOS underWindowBackground); 启用后 set_window_background 自动跳过实色打底——防白闪改由内容层不透明底保证 (body 永远 bg-background 实色,仅 chrome 半透明)。材质启用失败时静默回退实色。
  • 布局前提:工具栏保持流程内,模糊由粘性页头承担(ToolShell 页头与设置页 tab 条都是 sticky top-0 + 材质)。不要改回「绝对定位工具栏 + main 顶部内边距」——会叠加出肉眼可见的空白带。
  • 工具栏上不要加自定义背景与着色;半透明层不放 accent 色;材质层主文本用 text-foreground。
语义本项目(三档字号)macOS 原生
常规控件高h-8(26/28/30px)Regular 22pt
紧凑控件高h-7(22.75/24.5/26.25px)Small 19pt / Mini 16pt
列表行高36(紧凑 32)表格行 24pt(列表行 32pt)
面板内边距16(紧凑 12)内容边距 20pt(紧凑 16pt)

选择规则:表单与工具页用常规档(h-8);工具栏、表格行内操作、密集设置用紧凑档(h-7);一屏内不混用三档。

  • 开关 vs 复选框:细粒度布尔设置用复选框(标题在右);「强调型」或整组开关用开关; 分组表单(SettingsSection)内的开关用 mini 尺寸(size="sm")。
  • 开关只出现在列表行中,行内容提供语境;禁止把 Label 与 Switch 用 justify-between 拉到两端。
  • 分段控件:2–7 个紧密相关、需常显选中态、且不属于窗口级视图切换的选项。
  • 下拉(pop-up button):≥6 项、或选项文字较长;当前值显示在控件内(左对齐 + 右侧 chevron)。
  • 搜索框:放大镜 + 左对齐、输入即搜、右侧清除按钮(SearchField)。
  • pane 切换用工具栏式横向 tab 条(Safari / Xcode 偏好设置用法):粘在工具栏之下、同材质。 选中态用 bg-primary 实心填充 + text-primary-foreground,不用低饱和 tint(会被毛玻璃冲淡)。 不使用左侧竖向导航(避免与应用侧栏形成三列)。
  • 条高 height: auto + 等值 py-1.5,不要用固定高度 + items-center。
  • 内容单列居中(12 栅格 col-start-3 col-span-8);每个分组用 SettingsSection + SettingsRow。
  • 设置项立即生效,不提供「应用 / 确定」。
  • Sheet 优先:与当前窗口上下文强相关的确认 / 表单纯用附着于窗口的 sheet;全局性、破坏性、 需要强打断的用居中 Alert 样式对话框。
  • 按钮顺序:取消在左、默认按钮在最右;默认按钮回车触发(Return),Esc 触发取消。 按钮标签用具体动词(删除、保存),不用 确定 / 取消 兜底语义。
  • 信息性、常见可撤销的操作不弹 Alert;启动时不弹 Alert;面板内联可完成的操作不进模态。
  • 全局菜单栏由 src-tauri/src/menu.rs 提供;工具栏中的每个命令都必须在菜单栏有对应项, 反之菜单项若影响当前视图,需同步出现在工具栏或命令面板。
  • 标准键位:
动作键位
设置⌘,
命令面板⌘K
页内搜索⌘F
关闭窗口⌘W
关闭全部 / 退出⇧⌘W / ⌘Q
撤销 / 重做⌘Z / ⇧⌘Z
切换侧栏分组⌘1..9
重载(仅开发)⌘R
全屏⌃⌘F
关闭浮层Esc
  • 每个快捷键都必须在界面中可见(工具提示或菜单项右侧)。
  • 上下文菜单用系统右键,条目顺序:常用 → 分隔 → 危险项末位。
  • 侧栏为 source list:分组标题(text-xs,text-muted-foreground)+ 条目(图标 16 + 文本 13, 行高 28–32),选中态用 bg-sidebar-accent(半透明),不用边框或强调线;窗口变窄时自动折叠侧栏。
  • 侧栏底部不放关键信息 / 动作。
  • 表格:行高 24–32、表头粘性、divide-y 分隔、数字列右对齐 + tabular-nums、可选斑马纹。
HIG 样式字号 / 行高本项目
Large Title / Title 126/32 · 22/26页面 Hero 标题(罕用)
Title 2 / Title 317/22 · 15/20页面标题(text-base ↗ 大档)
Headline13/16 Bold面板标题(text-xs + 600)
Body13/16列表正文(text-sm)
Callout / Subheadline12/15 · 11/14辅助说明(text-xs)
Footnote / Caption10/13徽标、极小注记(本项目下限 11)
  • 字族:系统字体优先(-apple-system / SF Pro Text / SF Mono),不引入第三方字体。
  • Dark Mode:遵守系统外观(「跟随系统」不得覆盖);必须在 Increase Contrast 与 Reduce Transparency 下自测。
  • 强调色:用户可选 6 档,仅用于交互控件与选中态,不用于装饰、不用于半透明层。
  • 使用共享时长 / 缓动(共享核心 §2.7,macOS 观感偏 200–300ms)。
  • 窗口 / 材料进出:blur 半径与 scale 一起动画(材料「到位」而不是淡入)。
  • 尊重 prefers-reduced-motion;不使用持续循环动画作为唯一状态提示。