一个滑块能拖出光源方向,另一个滑块调高光和阴影的强度,材质从磨砂切到玻璃再切到磨砂金属,边缘还能选倒角、圆角、沟槽——这是Ambient CSS v3演示站给出的第一印象。官方给它的定位是"physics-based lighting system for CSS",听起来像是浏览器里跑了一套光线追踪。
但翻开它的开源仓库就会发现,真正的物理运算发生在你打开网页之前。项目里有个叫ambient3d的目录,跑的是Python驱动的Blender生成器,用Cycles引擎离线渲一遍光影曲线,再把结果拟合成CSS系数。浏览器拿到的,是算好的答案,不是正在计算的过程。这套包本身"pure CSS with zero dependencies",不依赖WebGL,也不依赖CSS Houdini。
五层阴影撑起的"光照感"
页面上看起来浑然一体的光影效果,拆开是五层叠加:一层投影,两层圆角边的高光与暗影,两层倒角边的高光与暗影。全局共享一个光源方向,每个组件的阴影角度、强弱都跟着同一套参数联动——这是它和过去几年的"新拟态"最大的区别。
这套结构解释了一个关键事实:所谓"physics-based",指的是系数来自物理渐染的校准,而不是"浏览器里正在跑光线追踪"。这个区分很重要——前者是可信的工程方法,后者才是营销话术会让人误会的部分。
热度和生态规模之间有温差
Reddit上r/css和r/reactjs的讨论整体正面,但具体的批评很集中:一是calc()嵌套表达式写起来和维护起来都费劲,二是演示站点自己出现过短暂的加载卡顿。这两条批评比"反响热烈"这种空泛描述更值得记一下。
再看仓库的硬指标,会发现讨论热度和项目体量并不对等。
104颗star、7个fork、88次commit、0个PR——这是一个作者独立打磨、刚被人看见的项目,不是被广泛协作打磨过的成熟库。社区讨论的热闹,和代码层面的成熟度,是两件不同的事。
新拟态的老毛病,换了个精致外壳
CSS视觉效果这几年走过两条路:新拟态靠双向box-shadow堆出软质凸起,玻璃拟态靠backdrop-filter堆出半透明质感。两者都是手工调参的"配方",都因为对比度不够被反复批评——新拟态尤其伤低视力用户,玻璃拟态的文字对比度还得看背后内容脸色。
Ambient CSS解决的是这条谱系里一个真实痛点:以前每个组件各调各的阴影角度,光源看起来是乱的;现在全局共享一个光源,场景里的光影是一致的。这是工程意义上的进步。
- 结论.它把"光照一致性"这件事系统化了,值得肯定,也确实比手调阴影的老办法聪明。
- 风险.可辨识性和对比度这道题它没碰——如果一个按钮的可交互状态主要靠微弱的倒角高光去区分,视力正常的人能看出来,低视力用户依然很难分辨点没点上。
灯打匀了,控件本身能不能被看清,还是老问题。
无障碍相关的媒体查询——forced-colors、prefers-reduced-motion、prefers-reduced-transparency——目前没有看到官方给出对应的降级方案。做仪表盘、合成器、旋钮控件这类硬件风格界面的团队,会是这套系统最贴切的应用场景;但如果打算把它当成整站的默认视觉皮肤,可辨识性和大规模DOM下的性能开销,都是还没验证过的坑。
对于普通前端项目,眼下更现实的用法是局部使用——挑一两个关键控件用它出效果,而不是把整站换上这套光照层。这不是因为效果不好看,是因为它现在的角色更像一个"光照感知的组件层",还没到"可以直接替代设计系统"的成熟度。
