最近在写这个 blog 主题的时候发现了一个奇怪的 CSS 支持问题。

我想让渐变背景能够固定并且占据完整 viewport ,所以我尝试使用了 background-attachment 这个 CSS 属性 ,如下:

body {
    background: #393451;
    background-attachment: fixed;
    background-position: center;
    background-image: url(/ps/gradient.png);
    background-blend-mode: screen;
    background-size: 32px 100vh;
}

网页示例:using background-attachment:fixed


在桌面端渲染没有问题,但如果用移动端浏览器访问,比如 iOS 上的 Safari 或者 Chrome ,问题就出现了。

这个网页背景会出现显示不正确或者能被滚动的情况。似乎这个属性在移动端支持不是很好,和 MDN 记录并不一致,而且好像也没有任何官方文档记录这个行为。

更迷幻的是,用 Chrome 模拟 iOS 渲染这个网页也是可以正常显示的……

Stack Overflow 上似乎也有人提出了这个疑问,有猜想说这个 fixed 会导致 滚动时需要重复渲染 的性能问题,所以这个 fixed 会被浏览器忽略。我觉得这个猜想并不是很科学,也没有找到对应的 bug 。


解决方法是不使用这个 CSS 属性,而是用另一个有 position: fixed 的元素盖在上面做一个 overlay 。

没问题的网页示例:workaround

反正有点迷…………