面板边缘偏重时,我会先分清正在看的暗部:它是轮廓、接触阴影,还是整片表面的明度?混在一起调整,减轻阴影可能连形状都变得难以辨认。
我倾向先确定轮廓,再决定距离与材质。以下从同一道 ring 的宽度开始,逐步加入深度、表面与透光,每次只改变有意比较的关系。
本文由原篇重编并扩充。样例数值代表当时条件,并非所有界面的固定规格;系列背景与工具入口见 总论。
轮廓与深度
让同一道轮廓变窄
我希望一眼看得出面板从哪里开始,边缘又不至于像一圈硬框。这组试样用零模糊的外侧阴影画出 ring,另外用其他阴影处理深度。Ring 的宽度与透明度可以独立调整,不占布局空间,也能保留利落的外形。
先只改 ring 的宽度,观察它变窄后的分量。第一张把扩散值(spread)由 1 px 改成 0.5 px,暗色、12% 不透明度、底色与尺寸全部固定,也不加入深度阴影。这里的 hairline 就是同一道 ring 变细,没有另外多画一条线。

变窄之后,再决定要多清楚
轮廓变细后,如果辨识度不足,可以再调不透明度。第二张固定 0.5 px,只比较 12% 与 18%;形状、填色与阴影保持一致。右侧的轮廓更清楚,宽度仍然相同。
这组实心表面仍以 0.5 px、12% 的中性暗色 ring 为起点,18% 只是用来观察补偿效果。大面板、白色选中面与玻璃所在的背景不同,要配合各自背景决定边界强度,不能因为线宽减半,就把透明度一律乘上固定倍数。

0.5 px 也要看用在哪里。border-width 会依设备像素对齐;box-shadow 的小数 spread 则可能通过部分像素覆盖呈现,两者不能当成同一种画法。这组试样的 WebKit 1× 检查里,0.25 px ring 在直边处没有画出可辨识的边,0.5 px 也有左右分量不均的情况。细化后仍要连同原尺寸、像素密度与缩放一起看。
沿着轮廓分配明暗
轮廓的分量也可以沿着形状改变。前面的 ring 整圈保持同样深浅,这里则把边缘对比(edge contrast)沿着形状分配,让某些位置稍微退后,另一些位置收得清楚。我偏好把这种差异留在窄边里,中央的表面仍然安静。
这组试样把边界宽度固定在 0.5 px。左侧整圈使用 12% 不透明度,右侧在 6% 到 18% 之间分布;表面填色、尺寸与背后图形都相同。浅色用暗轮廓,左上较淡、右下稍重,变化沿着直边与转角一起走。

这里用遮罩合成(mask compositing)挖空中央,只留下外侧窄环,让渐变沿着这个范围绘制。它承接前面 ring 确定外形的工作,并把明暗的分布交给渐变。背后斜向灰带仍以同样方式透过表面,边缘处理没有顺带把整张卡片盖深。
暗色试样改用亮轮廓,明暗方向也跟着反转:左上稍亮,往右下退淡,维持相同的进光暗示。我会连同底面一起看,让轮廓刚好交代形状,不沿整圈堆上一样重的亮线。

固定内容面仍可用均匀的淡 ring 稳住外形。方向性的变化比较适合少数需要材质暗示的浮动片;若每张卡片都强调同一个转角,边缘就会抢走内容的注意力。
轮廓确定形状,柔影交代距离
Ring 已经收住外形,深度阴影(depth shadow)就可以退后一点。这里另外放两层:近影偏移 1 px、模糊 2 px,以 −1 px 扩散值收窄;远影偏移 3 px、模糊 8 px,以 −3 px 扩散值限制范围。不透明度分别是 4% 与 2%。
近影交代接触,远影让暗部柔和退回底面。这段衰减(falloff)需要和 ring 一起看:如果下缘堆成一条深线,通常要调整近影的重量或范围;整圈发灰,则要检查远影有没有扩得太满。我偏好表面贴得住,边缘外侧很快恢复干净。

实心表面不再默认加一圈内缘光(inner light)。近白面板已经够亮,稍深的底槽若再叠白光,容易显出硬亮边。我会先用轮廓、底色和阴影把层次做好,把亮缘留给确实需要交代材质的局部。
暗色表面先靠明度站出来
换到暗色时,我会先把上层表面稍微提亮。图中的底面是 #171717,卡片是 #242424,再加 0.5 px、12% 白色 ring;黑色深度阴影独立放在下方。卡片的存在感先来自表面差异,细线再补出轮廓。

表面与材质
相近的白,各有工作
表面层级(surface hierarchy)可以先从明度分工。这组亮色试样的画布是 #F7F7F7,外壳是几乎中性的 #F1F1F2,内容面是 #FCFCFC,白色留给部分操作面。色偏很少,差别也要连同露出的面积一起看:窄窄一圈灰和大片灰底,分量并不相同。

文字仍要有清楚的主次。名称、数字与当前选项用深色站稳,说明再退后一级。我喜欢表面安静,但不希望读取信息也需要仔细寻找。
让渐变慢慢接回平面
有些表面需要一点明暗过渡,我会看渐变如何开始、又如何回到底色。缓动渐变(eased gradient)调整的是空间里的变化速度:接近平面时慢一些,中间再加快,让起止的位置不那么容易被察觉。画面本身保持静止。
这组对照使用相同中性色,最大不透明度都是 16%,渐变范围都在面板的 20% 到 80% 之间。左侧以固定速度退到零,右侧采用缓动分布;两边都用 33 个色标,不透明度的积分也相同。差异来自明暗如何分布,整体分量没有一起减少。

图中的线性渐变接到平面时,变化速度突然停下;缓动分布则在附近逐渐放慢。暗色对照沿用相同关系,让微弱的亮度慢慢退回深灰。

这里用中间色标近似平滑函数,实际 CSS 仍在相邻色标之间线性插值。16% 是方便观察差异的试样取值;放回洁白界面,我会按面积降低分量,把它留给窄小的遮罩退场或材质过渡。这组比较只说明衰减的接点,没有把色标数量当成解决所有色带问题的方法。
让玻璃有具体的位置
我把少量玻璃感留给浮动工具:72% 不透明度的近白填色、10 px 背景模糊(backdrop blur),加上清楚的前景文字与图标。工具栏跨过容器下缘,底下的明暗才能透出;位置避开主要数据行,材质也有了实际的交界。
玻璃用 0.5 px、6% 中性暗色 ring 收住轮廓,内侧只留柔化的微光。下方三层淡影从接触处接到 24 px 模糊的外围,让悬浮感向外散开。这里的 ring 比实心组件更淡,透明表面已经会借用背景明暗,不需要再加一圈深边。

我会用它真正跨过的背景检查:全白底可能只剩轮廓,底下太繁杂又可能干扰文字。这组示意只呈现透光与柔化,不模拟真正的折射。
回到实际界面,我会依次看轮廓能否辨认、阴影是否交代距离,以及材质有没有妨碍内容。这个顺序让细化有明确对象;半像素与透明度都只是起点,不是每个背景都适用的答案。
