R1.01.4semantic alias retargeting设计

主题切换依赖语义层而非数值层

别名: 主题别名 · 明暗切换 · theme swap · 语义重指向

概念解释

换主题不是再抄一套数字,而是让同一批语义名指向另一批原始值。浅色里 color.bg.default 指向近白,深色里指向近黑;调用点始终写语义名,不写那档近白。语义别名重指向(semantic alias retargeting)才是主题切换的机制。

它处理的是同一产品里的成套外观(明 / 暗、高对比),不是多个品牌各自换一套语义表——那是另一条产品线问题。也不该靠改原始值本身来「换主题」:原始值是材料,材料被全局替换会把碰巧共用这档材料的角色一起拖走。

机制

主题文件是一张对照表:语义名 → 原始值,按主题各给一份。运行时(或构建时)只替换这张表,组件树不动。如果在原始值层做切换——把 gray.0 从白改成黑——所有引用 gray.0 的角色都会变,包括那些不该随主题走的(打印用近白、始终保持的品牌色)。语义层把「可随主题变的角色」收成一张稳定的名字清单,主题作者只改指针。

调用点一旦写了原始值,主题表再完整也驱动不了它:那一处会在深色模式里继续发白。所以主题能力不是调色板有两套,而是调用点是否全部停在语义层上。多品牌则是换掉整张语义表的取值,服务的是不同产品身份,不是同一界面的昼夜切换。

边界

操作系统强制色(Windows 高对比、部分阅读模式)由系统接管色板,产品主题表会被覆盖,不能假设别名仍然生效。没有运行时主题的管道(部分打印、部分原生启动屏)只能出构建期的单一展开。用户自选强调色若不进入语义表,切换主题时它会悬空或回退到硬编码。邮件 HTML 往往只能出两份静态皮肤,不能在客户端重指向。

怎么落地

  • 为每个主题维护一份语义→原始值对照表,组件文件中不出现浅色专用或深色专用的字面量。
  • 用同一棵组件树分别套上两份对照表截图,禁止为深色另写一套组件。
  • 把「不随主题变」的角色(品牌标志色、始终对比足够的状态色)标成固定别名,不要放进可切换表。
  • 验证:只替换对照表、不改组件,深色截图应整体跟上;任何仍保持浅色字面量的节点,就是调用点停在了数值层。

延伸

  • 同组R1.01.1 令牌把设计决定变为可分发的命名值 · R1.01.2 语义令牌与原始值令牌需分层 · R1.01.3 直接使用原始值会绕过体系
  • 相邻R1.15 多品牌与多主题 · R1.09 令牌的层级与语义化
  • 站内检索semantic alias retargeting · theme swap · semantic layer

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/R1.01.4