用 CSS 自定义属性实现主题切换时,为什么你的过渡动画会闪烁?
给站点做主题切换时,不少人会想到用 CSS 自定义属性配合 transition 做颜色过渡,让浅色和深色模式间的切换不那么生硬。实际写的时候,切换瞬间常常出现半秒的闪烁、过渡卡在中间色、或者某些元素根本不动。尤其是把 transition 加在 :root 的变量上时,浏览器并不会对自定义属性的值做补间动画——它只对能插值的属性生效,而变量本身在计算值阶段就被替换掉了。更麻烦的是,如果变量被用在 background-color、color 这些属性里,transition 写在元素上又会被变量变化触发一次重绘,产生肉眼可见的跳变。这篇文章从渲染管线解释这个现象,并给出几种真机上不闪烁的切换...