Upgrading to the v26 Design System
DWC 26 引入了全新的设计系统。此次更新是增量式的,而非完全重写:大多数 v25 的 CSS 变量仍然可用,主题引擎的公共 API 保持不变,现有的自定义设置无需更改即可继续使用。
本指南记录了变化内容、视觉输出的不同之处,以及当应用依赖于特定 v25 行为时所需的升级步骤。
快速评判
| 场景 | 预期效果 |
|---|---|
| 使用默认样式 | 视觉更新。默认调色板色相已经重新调整(例如,主色从 h: 211 / s: 100% 移动到 h: 223 / s: 91%),阴影看起来更分层,组件感觉更圆润。无需代码更改,但品牌默认颜色会有所变化。 |
重写 --dwc-color-{name}-h 和 -s | 仍然有效。HSL 种子路径保持不变。 |
单个调色板步骤重写(例如 --dwc-color-primary-40) | 数字可能解析为不同的颜色。请参阅 颜色调色板。 |
依赖于 --dwc-color-{name}-c | 删除。现在根据每个阴影自动计算浅/深文本翻转。 |
引用命名字体大小标记(--dwc-font-size-m、-l 等) | 尺度向下移动了一档。m 现在是 14px,而不是 16px。请参阅 排版。 |
使用 --dwc-font-weight-semibold 获取 500 权 重 | semibold 现在是 600。切换到新的 --dwc-font-weight-medium 以获取 500。 |
使用 --dwc-focus-ring-width 来保留可聚焦元素周围的填充 | 现在环有一个间隙。将 --dwc-focus-ring-gap 添加到该填充,否则环会溢出。请参阅 焦点环。 |
| 自定义按钮悬停/涟漪效果 | 涟漪效果已经消失。按压反馈现为小范围缩小。 |
如果上述情况都不适用,您可以在此停止阅读。您的升级已经完成。
新功能一览
- 现代色彩引擎。 调色板使用 OKLCH 代替 HSL 生成。亮度级别是感知均匀的(相邻步骤看起来像相邻步骤),暗模式不再翻转调色板。
- 通过一个变量实现暗模式。
--dwc-dark-mode: 1翻转整个用户界面。模式适应发生在变体层,而不是通过重新映射每个步骤。 - 自动
on-text颜色。 每个调色板步骤都有一个--dwc-color-on-{name}-text-{step}伴随值,符合该阴影的 WCAG AA 对比度要求。您无需手动计算对比度。 - 直接种子重写。 将任何 CSS 颜色(十六进制、
rgb()、oklch()、lab()等)传入--dwc-color-{name}-seed,整个调色板将从中重新生成。 - 重新调整的阴影。 仍然有六个级别(
xs到2xl),现 在具有逼真的层次衰减,并通过--dwc-shadow-strength自动增强暗模式强度。 - 表面和
default使用自己的亮度曲线。 现在两者都通过--dwc-dark-mode和一个小主色调进行适应,而不是在暗主题中重新定义表面并将default别名为调色板步骤。 - 缩小按压反馈。 涟漪由按压时的小范围缩小替代。标记:
--dwc-scale-press、--dwc-scale-press-deep。 - 带间隙的焦点环。 环现在有一个小的表面颜色间隙(
--dwc-focus-ring-gap),在有色阴影之前保持可见,以便在实心按钮和紧凑布局中保持可见。 - 边框半径被种子化。 改变
--dwc-border-radius-seed,则s到4xl步骤将成比例缩放(2xs和xs保持在固定像素值)。新增3xl和4xl步骤。
颜色系统
这是内部最大的变化。您应该熟悉看到的行为,内部结构有所不同。
定义颜色的两种方式
您可以像以前一样继续使用色相 + 饱和度,或直接重写种子为任何 CSS 颜色。
/* 色相 + 饱和度(仍为默认路径) */
:root {
--dwc-color-primary-h: 223;
--dwc-color-primary-s: 91%;
}
/* 直接种子 - 任何 CSS 颜色格式 */
:root {
--dwc-color-primary-seed: #6366f1;
}
如果您已经在使用 -h 和 -s,则无需进行任何操作。种子重写是直接品牌颜色的新路径。
颜色调色板:第 5 步始终是最暗的
在 v25 中,调色板在暗模式下翻转(在 光线中第 5 步最暗,在暗中最亮)。在 v26 中,第 5 步始终是最暗的阴影,第 95 步始终是最亮的,无论模式如何。模式适应现在发生在一个层次的顶部,在变体标记中:
/* v26 - 变体指向固定步骤 */
--dwc-color-primary-dark: var(--dwc-color-primary-45);
--dwc-color-primary: var(--dwc-color-primary-50);
--dwc-color-primary-light: var(--dwc-color-primary-55);
| 场景 | 更改内容 |
|---|---|
使用 --dwc-color-primary(或 -dark、-light、-text) | 无变化。变体在各模式间仍表现相同。 |
硬编码步骤如 --dwc-color-primary-40 | 该步骤现在在两种模式下解析为相同的 OKLCH 亮度。您在暗模式中看到的颜色来自不同的步骤。如果希望支持模式迁移,请切换到变体标记。 |
直接编写 hsl(var(--dwc-color-primary-h), ...) | 仍然有效。HSL 种子仍然由 h + s 构造。 |
颜色是派生的,而不是承诺的
您设置的色相是一个 种子,而不是目标。您通过 --dwc-color-{name}-h / -s(或 -seed)传递的颜色不一定会出现在第 50 步。
由于调色板使用绝对 OKLCH 亮度来表示每一步,您的种子落在哪一步取决于其自然亮度。明亮的色相(青色、黄色)具有高 OKLCH 亮度,通常在第 80-85 步附近。较暗的色相(蓝色)碰巧位于第 50 步附近。
如果您需要确切的颜色在确切的步骤下,请显式设置该步骤:
:root {
--dwc-color-primary-50: #1d4ed8;
}
--dwc-color-{name}-c 已消失
在 v25 中,-c 是对比阈值:伴随文字颜色从白色翻转为黑色的背景亮度阈值。值为 50 表示,在 50% 更暗的背景上文字是白色,而在 50% 更亮的背景上文字是黑色。
在 v26 中,您不再选择翻转点。每个步骤都有一个经过自动计算的着色的 on-text 颜色。这样得到的结果始终达到 WCAG AA 仅安全,同时保留搭配色调的暗示,而不是落入纯黑或纯白。
如果您有任何 --dwc-color-{name}-c 的重写,可以将其删除,因为没有效果。
文字和 on-text 颜色
v25 有每个步骤一个文字标记,--dwc-color-{name}-text-{step},该标记是从 -c 阈值计算的纯黑或白色,旨在用作该步骤作为背景里的文字。
v26 保留相同的标记名称,但其含义发生变化,并增加第二个每步的标记:
| 标记 | v25 含义 | v26 含义 |
|---|---|---|
--dwc-color-{name}-text-{step} | 纯黑/白,旨在作为该阴影里的背景文字 | 着色的 表面安全 文字,在中性页面背景上可读 |
--dwc-color-on-{name}-text-{step} | (未作为每步标记存在) | 着色的文字用于 在 那一步做背景 |
v26 两个标记都根据其预期背景的 WCAG AA 对比度进行限制。如果您将 --dwc-color-{name}-text-{step} 作为有色背景上的前景,请切换到 --dwc-color-on-{name}-text-{step}(新的 on-text 标记)以保持该语义。
着色和边框
生成器现在为每个调色板发出三个标记 ,一个真正的新标记,一个新变体,以及一个移动了源的标记:
| 标记 | v25 | v26 |
|---|---|---|
--dwc-color-{name}-tint | (未存在) | 种子透明度 12%,用于替代背景 |
--dwc-border-color-{name}-emphasis | (未存在) | 更强的模式感知边框,用于悬停/聚焦/激活 |
--dwc-border-color-{name} | 在每个变体中设置为 var(--dwc-color-{name})(饱和色调) | 在生成器中计算:模式感知的轻度种子色调 |
如果您的 CSS 读取 --dwc-border-color-primary 期待饱和的主色,视觉效果现在变成了细微的分隔线色调。如果您特意想要饱和的外观,请直接切换到 --dwc-color-primary。
暗模式
暗模式由一个变量 --dwc-dark-mode 控制。设置为 1 为暗模式,0 为亮模式:
html[data-app-theme='my-dark-theme'] {
--dwc-dark-mode: 1;
color-scheme: dark;
}
它参与整个系统中的 calc() 表达式,它是模式适应传播到表面、阴影、边框和文本颜色的方式。
在 v25 中,内置的 dark 和 dark-pure 主题必须手动重新定义表面、阴影和许多调色板变体。在 v26 中,所有这些内容都从 --dwc-dark-mode 和种子颜色派生。典型的自定义暗主题,过去需要 20 行的重写,现在能简化为:
html[data-app-theme='my-dark-theme'] {
--dwc-dark-mode: 1;
--dwc-color-primary-h: 280;
color-scheme: dark;
}
如果您有从 v25 结构复制的自定义暗主题,通常可以删除大部分内部块,只保留种子和暗模式标志。