基础 · FOUNDATION
光照模型 Elevation
光从正上方来。每个可交互控件都是一枚真实的键:凸面、顶部反光、贴地投影、反光光晕、按压内陷,五层缺一不可。
五层,逐层叠上去
键
① 凸面
竖向微渐变:顶亮底沉
键
② 顶部反光
inset 高光线:键面上缘接住光
键
③ 贴地投影
近影锐 1px + 远影柔 2–6px
键
④ 反光光晕
外圈 3px 白环,悬停变亮变宽
键
⑤ 按压内陷
:active 渐变翻转 + inset 阴影
四种表面
凸的是键,凹的是输入槽,浮起的是卡片。四种表面共用同一个光源,所以放在一起不打架。把鼠标移到最右边的卡链上看悬停。
.zzm-card · 浮起
凸
.zzm-btn · 键面
.zzm-input · 内凹
.zzm-cardlink · 悬停上浮
源码
五层光影在 controls.css 里是这样写的(原样裁出):
controls.css · 基键 / 悬停 / 按压
.zzm-v4 .zzm-btn {
-webkit-appearance: none;
appearance: none;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
height: 36px;
padding: 0 16px;
font-family: inherit;
font-size: 13px;
font-weight: 600;
letter-spacing: .2px;
white-space: nowrap;
cursor: pointer;
user-select: none;
border-radius: 8px; /* 圆角矩形——按钮禁胶囊 */
border: 1px solid rgba(0, 0, 0, .14);
color: #3F3F3B;
background: linear-gradient(180deg, #FFFFFF 0%, #F2F2EF 100%);
box-shadow:
0 0 0 3px rgba(255, 255, 255, .55), /* ④ 反光光晕环 */
0 1px 2px rgba(0, 0, 0, .09), /* ③ 近影 */
0 2px 6px rgba(0, 0, 0, .06), /* ③ 远影 */
inset 0 1px 0 rgba(255, 255, 255, .92), /* ② 顶部反光 */
inset 0 -1px 0 rgba(0, 0, 0, .05); /* ① 底缘收沉 */
transition: box-shadow .16s ease, transform .16s ease, background .16s ease,
border-color .16s ease, filter .16s ease, opacity .16s ease;
}
.zzm-v4 .zzm-btn:hover {
transform: translateY(-1px);
border-color: rgba(0, 0, 0, .18);
box-shadow:
0 0 0 4px rgba(255, 255, 255, .8),
0 2px 4px rgba(0, 0, 0, .10),
0 4px 12px rgba(0, 0, 0, .09),
inset 0 1px 0 rgba(255, 255, 255, .95),
inset 0 -1px 0 rgba(0, 0, 0, .05);
}
.zzm-v4 .zzm-btn:active {
transform: translateY(0);
background: linear-gradient(180deg, #ECECE9 0%, #F4F4F1 100%); /* ⑤ 凹面翻转 */
box-shadow:
0 0 0 3px rgba(255, 255, 255, .45),
0 1px 0 rgba(255, 255, 255, .65),
inset 0 2px 4px rgba(0, 0, 0, .13),
inset 0 1px 2px rgba(0, 0, 0, .09);
}深色面上要重新标定
同一套五层模型搬到深色面(付款页、播放器锁罩)时,数值必须重标:
- 顶部反光从
.88左右降到.055左右——深底上任何高于 .1 的白线都会变成刺眼亮边。 - 投影要加深(
.4左右)。 --ondark暗面键就是重标后的结果,直接用它,不要自己调。
铁律
✓ 要阴影只从
.zzm-btn .zzm-card .zzm-cardlink .zzm-input 取✗ 不要在组件里散写
box-shadow——各写各的光源方向必然穿帮✓ 要光源永远在正上方:投影只向下
✗ 不要
backdrop-filter 模糊(性能原因全域禁用)✓ 要按下去真的「凹」:
:active 翻转渐变 + inset 阴影✗ 不要把微拟物强度原样搬进原生桌面窗口——保留结构,幅度降一个数量级