深色背景下阴影几乎不可见
别名: 深色投影失效 · 黑上叠黑 · shadow on dark
概念解释
把浅色主题里那套「卡片 2dp、对话框 8dp」的黑投影原样铺到近黑底上,截图里几乎找不出影子的轮廓。层还在组件树里,屏上却读不出谁浮着。投影靠把周围变暗来工作;底已经够暗时,没有更暗的余量。这是浅色高度模型在深底上的失效条件,不是深色模式该怎么表达表面高低——那要用另一套以表面变亮为主的办法。这里只把「看不见」说清楚,免得有人靠加深黑色、加大模糊去救一套物理上已经没行程的线索。
机制
半影是相对邻接表面的负向亮度阶。邻接表面若已接近显示器黑点,阶的下行被夹断,半影与底落入同一量化台阶,边缘消失。把不透明度加到 80%、把模糊加到 40 像素,常常只换成一块脏的黑斑,仍然没有可辨的高度梯度,还污染了本来就少的暗部细节。有人改用浅色外发光冒充影子:那是自发光或边缘光,编码的是「这个对象在发光」而不是「它挡住了从上往下的灯」,高度符号不可靠,也和浅色主题的投影不是同一把尺子。失败发生在显示的动态范围,不发生在「用户没仔细看」。
怎么研究
在校准过的深色主题上,用色表或取色器沿投影方向采样一列像素,看是否存在单调的变暗台阶;同时做有影 / 无影的高度迫选。若采样看不出台阶,迫选正确率又不高于无影,投影在该底上即为无效线索。自变量是底的明度与投影不透明度,因变量是台阶是否可测、迫选是否高于猜测。不要在明亮办公室的未校准笔记本上看深色稿,环境光会让你以为影子还在。
边界
底不是纯黑、而是抬高了的深灰时,很薄的投影有时还能剩一点阶,不要把「深色一律看不见」做成教条,用采样说话。投影若叠在一张浅色照片或浅色卡片上,局部底够亮,影子局部有效,全页审计会误判。高对比辅助模式可能把所有暗部切成纯黑,连那点残阶也切掉。补救手段属于表面明度体系,不在投影参数里——继续调 dp 和模糊解决不了夹断。
怎么落地
- 深色主题不要把浅色的投影表当高度表用。先用采样确认影子是否还形成台阶;形不成,就停用投影作为层级手段。
- 禁止靠「更深的黑、更大的模糊」拯救深底投影。那只增加脏斑。
- 需要在深色里分出浮层时,把问题移交给表面相对底的变亮,并保证浅色 / 深色两套高度表不要混在同一屏。
- 验证:深色页截图后做 8 级色调分离。投影所在像素若与背景落在同一级,这条影子在该页上无效。列一张「浅色靠影、深色不靠影」的层对照,抽一页深色模态做有影 / 无影 A/B,高度判断无差异就删掉那层投影,避免它在代码里假装还在工作。