数字花园

明与暗之间:一次 iPhone 式的主题切换

2026-09-14 · 约 2 分钟 · 设计 · 迭代记录

之前:一次没有仪式感的切换

主题切换按钮一直是三态循环:自动 → 浅色 → 深色。图标直接显隐,页面瞬间翻转。功能完整,但那一下”啪”地变了——像关灯,不像日落。

iPhone 是怎么做的

iOS 切换明暗时从来没有”啪”过。它有三层同时发生:

  1. 图标弹簧旋入——新图标从缩小 0.4 倍、旋转 -100° 的状态,沿系统弹簧曲线转正。旧的不是消失,是被转出来的那个取代
  2. 按钮回弹——点按的一瞬缩到 0.86 再弹回,指尖先于眼睛知道”我按到了”
  3. 整页交叉淡入——View Transitions API 拍下新旧两帧,0.5 秒交叉淡化。不是换皮肤,是整个世界一起换了光线

一道门闩

有个细节差点毁掉这一切:这些动画如果挂在状态上,首帧渲染时就会自己播一次——页面还没见人,图标先转了一圈。

解法是一道门闩:theme-switched 类只在用户真正点下第一次之后才挂上。动画为交互而存在,不为渲染而存在。

降级是尊严的一部分

prefers-reduced-motion 的用户看到的是干净的瞬间切换;不支持的浏览器自动跳过整页淡化,图标动画照旧。每一位用户都拿到完整的功能,只是节奏不同。

动效是给愿意看的人的礼物,不是给所有人的关卡。

评论

← 数字花园