首页归档标签关于
← 返回首页

Material Design 3 的「动态色彩」,在网页上到底怎么落地

#设计#CSS#前端

很多人第一次看 Material Design 3,会觉得它只是「圆角更大、颜色更柔和」。其实核心变化只有一个:颜色从固定色板变成了按语义分配的角色(role)。

角色,而不是颜色

旧的材料设计会告诉你「主色用 #6750A4」。MD3 说的是「主色是 primary,它在亮色主题下应该足够深以保证对比度,在暗色主题下应该足够浅」。

这句话听起来啰嗦,但落地时差别巨大:

:root {
  --primary: hsl(var(--accent-h) 42% 43%);
  --primary-soft: hsl(var(--accent-h) 42% 94%);
  --on-primary: #ffffff;
}

[data-theme='dark'] {
  --primary: hsl(var(--accent-h) 58% 72%);
  --primary-soft: hsl(var(--accent-h) 26% 22%);
  --on-primary: #17131f;
}

只要换掉 --accent-h 这一个数字,整套配色就换了。我做了五个预设:鸢尾紫 265、深海蓝 212、苔原绿 158、山茶红 344、琥珀橙 32。

圆角是有梯度的

MD3 的圆角不是随便定的,它有一套从 4dp 到 28dp 的梯度,而且越大的容器用越大的圆角。

元素圆角
输入框4–8px
卡片12–16px
面板24–28px
弹窗28–36px

这条规律看起来无关紧要,但它解决了「为什么我的界面看起来不协调」——因为所有东西都用了同一个 8px 圆角,视觉上就没有层次。

阴影要跟着主题变

亮色主题下,阴影是「灰色半透明」;暗色主题下,阴影得变成「纯黑 + 更高不透明度」,否则完全看不见。

--shadow-2: 0 4px 12px rgba(28, 20, 48, 0.07);

[data-theme='dark'] {
  --shadow-2: 0 4px 14px rgba(0, 0, 0, 0.35),
              0 12px 32px rgba(0, 0, 0, 0.28);
}

暗色下我还多加了一层,因为单层阴影在深色背景上太弱,卡片会「飘」不起来。

越界的地方

MD3 原版是给移动端准备的,桌面端直接套会有两个问题:

  • 触控目标 48dp 太大,鼠标环境下按钮会显得笨重,我缩到 38px。
  • 动效时长 200–300ms 在桌面上偏慢,尤其是 hover 反馈,我压到 180ms 左右。

规范是起点,不是终点。

好的设计系统不是让你少做决定,而是让你把决定做在正确的地方。