Skip to content

设计规范 · iOS 26 液态玻璃(Liquid Glass) ​

本规范是「课表 · ClassSchedule」三端统一的视觉与交互基准。所有界面、组件、动效必须遵循本文件定义的 Design Token 与组件契约。


1. 设计原则 ​

  1. 材质即层级:用玻璃的厚度(模糊/高光/透明度)表达 z 轴层级,而非阴影堆叠。
  2. 内容优先:玻璃服务于内容,文字与图标保持足够对比度(WCAG AA)。
  3. 流体反馈:交互以连续形变与弹簧曲线响应,杜绝生硬位移。
  4. 自适应明暗:玻璃在浅色下偏白雾、深色下偏灰镜,颜色随系统主题实时变化。
  5. 优雅降级:在不支持实时模糊的设备上,退化为带轻微噪点的纯色卡片,视觉不打架。

2. 色彩 Token ​

2.1 语义色(浅色 / 深色) ​

Token浅色深色用途
accent/primary#0A84FF#0A84FF主题强调(随用户主题色覆盖)
accent/onPrimary#FFFFFF#FFFFFF强调色上的文字
bg/canvas#F2F4F8#000000应用底色
bg/elevated#FFFFFF#1C1C1E非玻璃实体面
text/primary#1C1C1E#F5F5F7主文字
text/secondary#6B6B70#AEAEB2次文字
text/tertiary#A1A1A6#636366辅助文字
semantic/success#30D158#30D158完成
semantic/warning#FF9F0A#FFD60A逾期/提醒
semantic/danger#FF453A#FF453A删除/冲突
semantic/info#64D2FF#64D2FF提示

2.2 玻璃材质 Token ​

Token浅色 alpha深色 alphablur(σ)边框高光
glass/surface0.550.4514top 0.5 white
glass/elevated0.650.5520top 0.7 white
glass/thick0.780.6830top 0.9 white
glass/thin0.300.258—

玻璃强度档位(用户可调):弱→thin/surface σ×0.6;中→surface/elevated;强→elevated/thick。低端机自动锁定为「纯色 elevated」。

2.3 课程色板(12 色) ​

#FF6B6B #FFA94D #FFD43B #A0E85B
#4FD1C5 #38BDF8 #0A84FF #7C83FF
#B07CFF #FF6BCB #FA8AD0 #94A3B8
  • 新建课程默认按课程名 hash 落点;
  • 每色在玻璃上以「色块 18% + 文字 100%」呈现,保证可读。

3. 字体与排版(SF Pro / HarmonyOS Sans / 思源) ​

Tokensizeweightline用途
largeTitle3470041页面大标题
title12870034一级标题
title22270028二级标题
title32060025三级标题
headline1760022列表主标题
body1740022正文
callout1640021强调正文
subhead1540020副标题
footnote1340018注释
caption11240016说明
caption21140013角标

4. 圆角 / 间距 / 高度 ​

Token值
radius/xs8
radius/sm12
radius/md16
radius/lg22
radius/xl28
radius/capsuleheight / 2(全圆)
Token值
space/14
space/28
space/312
space/416
space/524
space/632
高度模糊 σ用途
z0 底层0canvas
z1 卡片14列表/课程块
z2 浮层20抽屉/弹层
z3 模态30全屏模态背景

5. 动效 ​

场景曲线时长
普通转场easeOut220ms
弹簧出现spring(stiffness 260, damping 26)—
抽屉上滑spring(stiffness 220, damping 28)—
当前课呼吸光晕easeInOut 无限循环1600ms
完成勾选spring(stiffness 320, damping 20)—
滑动切周fastOutSlowIn280ms

所有动效遵循「Reduce Motion」系统设置:开启后压缩为淡入淡出 ≤150ms。


6. 核心组件契约 ​

实现见 lib/shared/widgets/glass/。

6.1 GlassContainer ​

属性:
  elevation: z1 | z2 | z3
  radius: radius token(默认 md)
  strength: glass token
  enableBlur: bool(降级时 false)
  child: Widget
视觉:
  ClipRRect(radius)
    └ Stack
       ├ BackdropFilter(blur σ)        // 降级时省略
       ├ Container(填充色 alpha + 顶部高光渐变边)
       └ child

6.2 GlassCard(带内边距的卡片容器) ​

6.3 GlassButton(胶囊按钮) ​

  • primary:accent 实色 + 白字;secondary:glass surface + accent 字;ghost:透明 + accent 字。

6.4 CourseBlock(课程块) ​

  • 课程色玻璃 + 课名(最多 2 行省略)+ 地点 + 节次范围;
  • 当前节:外层呼吸光晕(AnimatedBuilder + CustomPaint)。

6.5 NextClassCard(「下一节」常驻卡) ​

6.6 主导航(移动端左侧抽屉 / 宽屏玻璃侧栏) ​

  • 移动端:页面标题栏左侧放置玻璃菜单按钮,点击后从左侧滑出主菜单;
  • 宽屏:保留 GlassNavRail 左侧玻璃导航栏;
  • 旧 GlassTabBar 组件仅作为兼容组件保留,移动端主流程不再占用底部空间。

6.7 GlassSheet(底部抽屉,课程详情/编辑) ​

6.8 SegmentControl(分段选择,视图切换) ​


7. 页面视觉走查清单(上线门槛) ​

  • [ ] 所有浮层/Tab/抽屉为玻璃材质,深浅色切换无闪烁;
  • [ ] 文字在玻璃上对比度 ≥ AA;
  • [ ] 课表当前节呼吸光晕流畅且遵循 Reduce Motion;
  • [ ] 弹簧动效无过冲错位;
  • [ ] 三端截图与设计稿一致性 ≥95%(允许字体族差异)。