滚动时出现故障 CSS 动态线性渐变
Glitchy CSS dynamic linear-gradient on scroll
我注意到 CSS linear-gradient
作为动态背景(使用 keyframes
),如果您在页面上滚动得非常快,它看起来会出现故障。例如,here,如果你抓住滚动条并快速上下滚动,你可以看到下面的白色。似乎与显示更多页面时渐变如何重绘有关,或者...我尝试在所有地方进行搜索,但未能找到与此相关的任何内容 - 有什么想法吗?相关的 CSS 是:
body {
background: linear-gradient(angle, some colours);
background-size: 200% 200%;
animation: gradient 15s ease infinite;
}
@keyframes gradient {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
我想知道是否必须以某种方式将背景固定为某种“图像”,以便浏览器不必在滚动时重新绘制渐变。
考虑应用翻译的固定元素:
html::before {
content: "";
position: fixed;
top: 0;
left: 0;
width: 200%;
height: 100%;
background: linear-gradient(60deg, red, blue, green);
animation: gradient 3s linear infinite alternate;
}
@keyframes gradient {
100% {
transform: translateX(-50%);
}
}
只需在伪 ::before
元素上设置样式,而不是直接在 body
上设置样式,因此您可以使用 position: fixed
.
body::before {
content: "";
position: fixed;
width: 100%;
height: 100%;
z-index: -1;
background: linear-gradient(240deg, #567EB9 0%, #B29ACA 50%, #B29ACA 70%, #F9839B 95%, #e6b394 100%);
background-size: 200% 200%;
animation: gradient 15s ease infinite;
}
它可能不是最佳解决方案,但它确实有效。
我注意到 CSS linear-gradient
作为动态背景(使用 keyframes
),如果您在页面上滚动得非常快,它看起来会出现故障。例如,here,如果你抓住滚动条并快速上下滚动,你可以看到下面的白色。似乎与显示更多页面时渐变如何重绘有关,或者...我尝试在所有地方进行搜索,但未能找到与此相关的任何内容 - 有什么想法吗?相关的 CSS 是:
body {
background: linear-gradient(angle, some colours);
background-size: 200% 200%;
animation: gradient 15s ease infinite;
}
@keyframes gradient {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
我想知道是否必须以某种方式将背景固定为某种“图像”,以便浏览器不必在滚动时重新绘制渐变。
考虑应用翻译的固定元素:
html::before {
content: "";
position: fixed;
top: 0;
left: 0;
width: 200%;
height: 100%;
background: linear-gradient(60deg, red, blue, green);
animation: gradient 3s linear infinite alternate;
}
@keyframes gradient {
100% {
transform: translateX(-50%);
}
}
只需在伪 ::before
元素上设置样式,而不是直接在 body
上设置样式,因此您可以使用 position: fixed
.
body::before {
content: "";
position: fixed;
width: 100%;
height: 100%;
z-index: -1;
background: linear-gradient(240deg, #567EB9 0%, #B29ACA 50%, #B29ACA 70%, #F9839B 95%, #e6b394 100%);
background-size: 200% 200%;
animation: gradient 15s ease infinite;
}
它可能不是最佳解决方案,但它确实有效。