跳到主要内容
menumenu tanreiexpand_morecontrasttranslate
tanreiexpand_more
开始使用WebReactSwiftUIJetpack ComposeFlutterReact Native预设你自己的设计系统与 AI 代理一起使用 Tanrei品牌设计令牌设计系统与定制Theme Studio颜色字体排印图标形状层级动效交互状态行为布局无障碍文字颜色令牌字阶令牌形状令牌层级令牌动效令牌状态令牌间距与度量令牌组件按钮主操作按钮分段按钮按钮组带菜单的按钮工具栏复制按钮复选框单选按钮开关纸片(Chip)菜单滑块滑块字段日历DateTimePicker字段组单选组复选框组下拉选择框下拉选择字段菜单栏文件上传文件选择器 进阶放置区文本输入框 进阶文本字段纸片字段字段组合框 进阶组合框字段数字输入框 进阶数字字段颜色输入框 进阶颜色字段一次性验证码输入框 进阶一次性验证码字段嵌入式文本输入框 进阶聊天输入栏卡片分隔线模态层 进阶对话框列表列表行底部面板侧边面板轮播代码块表格弹出框步骤折叠面板描述列表图示应用外壳页头树视图时间线图片预览调整手柄可调整大小的框滚动区域徽标进度指示器计量条数字滚动器加载指示器消息条(Snackbar)工具提示键盘快捷键标签(Tag)行内代码提示块(Callout)头像空状态标签组(Tag group)骨架屏文件项色块跑马灯文本标签页标签页视图应用栏导航栏导航抽屉搜索链接分页上一页/下一页链接步骤条面包屑目录链接卡片FAB 菜单状态Tanrei 是如何构建的参与贡献许可与致谢
首页基础交互状态

交互状态

状态层、“先留间隙、再画圆环”的焦点指示,以及禁用状态的画法。

content_copy以 Markdown 格式查看

可交互的组件共用一套状态词汇:enabled、hovered、focused、pressed、dragged、selected、activated、error、loading 和 disabled。组件的规格会列出它支持的状态,每个平台都必须全部实现。

状态层

悬停、聚焦、按下和拖动通过状态层来呈现:一层覆盖在组件容器之上的半透明浮层。

  • 状态层取内容的颜色,也就是它所覆盖对象的 on- 角色。在 filled 按钮上是 on-primary;在 text 按钮上是标签的颜色。
  • 它的不透明度来自令牌,而不是组件。
  • 同一时刻只显示一层。 多个状态重叠时,最强的那个胜出:按下高于聚焦,聚焦高于悬停。
  • 它通过一段短促的效果过渡淡入,按下时则立即出现。

低调的选中状态也是一层,而且是一直保留的那一层:列表中选中的选项、菜单中的当前链接项和 tonal 标签页的指示器,都以其内容颜色按 selected-state-layer-opacity(悬停层的两倍)绘制,叠在该项所处的任何表面之上。因此在任何表面上,选中项与悬停项之间的差距,都和悬停项与静止项之间的差距相同。悬停、聚焦和按下层叠在它之上;选中状态从不只靠填充来表达:勾选标记、标识或标签也会表明它。

令牌 值 样张
--tanrei-sys-state-disabled-container-opacity 0.12 (12%) AaAa
--tanrei-sys-state-disabled-content-opacity 0.38 (38%) AaAa
--tanrei-sys-state-dragged-state-layer-opacity 0.16 (16%) AaAa
--tanrei-sys-state-focus-state-layer-opacity 0.1 (10%) AaAa
--tanrei-sys-state-hover-state-layer-opacity 0.08 (8%) AaAa
--tanrei-sys-state-pressed-state-layer-opacity 0.1 (10%) AaAa
--tanrei-sys-state-selected-state-layer-opacity 0.16 (16%) AaAa

生成自 design/tokens/tanrei.light.tokens.json, tokens/sys/state.tokens.json

将指针悬停在下面的按钮上并按下它们,看看状态层在不同容器上的样子:

状态层

FilledTonalElevatedOutlinedText

焦点:先留间隙,再画圆环

键盘焦点的画法是:先是一圈 2px 的、表面颜色的间隙,外面再是一圈 2px 的、focus-ring 角色的圆环。有了这圈间隙,即使组件自身的填充色与圆环颜色相近,圆环也一定看得见;这个角色相对于表面的对比度会按 3:1 进行校验。

  • 圆环只在键盘和辅助技术聚焦时显示,指针点击时不显示。
  • 它从不带动画。
  • 它沿着组件的形状向外偏移绘制。

默认没有涟漪

Tanrei 不在按下时绘制向外扩散的涟漪。按下时的状态层就是反馈。主题可以选择启用涟漪,但没有任何组件依赖它。

禁用

禁用的组件以 on-surface 的 disabled-container-opacity 绘制容器,以 disabled-content-opacity 绘制内容,不显示状态层,并且不在焦点顺序之内。禁用的元素不受对比度要求的约束,这也正是应当少用它们的原因。

lightbulb

提示

更好的做法是让操作保持可用,并在用户使用它时说明还缺少什么。禁用的按钮没法告诉任何人它为什么被禁用。