我开始使用 CSS 渐变,而不是实际的图像,原因有两个:首先,CSS 渐变的加载速度肯定比图像快,其次,它们不应该像许多光栅图形那样显示条带。我最近开始在各种屏幕上测试我的网站,在较大的屏幕(24 英寸以上)上,构成我网站背景的 CSS 线性渐变显示非常明显的条纹。作为临时修复,我用一个小的、重复的、透明PNG
的噪声图像覆盖了渐变,这有点帮助。有没有其他方法可以解决此条带问题?
8 回答
我知道你不会喜欢这样的声音,但在这种情况下,目前唯一真正获得一致的跨浏览器美学的方法是使用重复图像。
如果是简单的线性渐变,那么只需要1px宽,和渐变一样高,然后将页面的背景色作为渐变的最终颜色,这样就可以流畅的运行了。这将保持文件大小很小。
如果您想减少图像中的渐变带,请使用 PNG(不是透明度),因为我发现这些比 JPG 更适合此目的。
在 Adobe Fireworks 中,我会将其导出为 PNG-24。
祝你好运。
http://codepen.io/anon/pen/JdEjWm
#gradient {
position: absolute;
width: 100%;
height: 100%;
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(black), to(white));
background: -webkit-linear-gradient(top, black, white);
background: -moz-linear-gradient(top, black, white);
background: -ms-linear-gradient(top, black, white);
background: -o-linear-gradient(top, black, white);
background: linear-gradient(top, black, white);
}
background-color
您可以通过使渐变从第一种颜色变为透明,并在下方为第二种颜色提供更好的结果。我还建议使用background-size
在屏幕上延伸的大渐变,这样渐变实际上不会填满整个屏幕。
我制作了一个“scatter.png”来放置我的渐变。像这样:
- 打开 gimp
- 100x100 图像
- 添加 Alpha 通道
- 过滤器 -> 噪音 -> 投掷...接受默认值
- 将不透明度设置为 5%
保存,然后添加到渐变。
background: url('/img/scatter.png'), linear-gradient(50deg,#d00 0,#300 100%);
这是对微妙效果的微妙影响。
对于纯 CSS 答案,您可以使用模糊过滤器为 css 渐变添加模糊并减轻条带。这可能意味着对层次结构进行一些重建以不模糊内容,并且您需要隐藏溢出以获得清晰的边缘。在条带问题可能特别可怕的动画背景上工作得非常好。
.blur{
overflow:hidden;
filter: blur(8px);
}
我知道这个问题早就解决了,但是对于其他遇到条带并正在寻找解决方案的人来说,对我来说一个非常简单的解决方法就是简化我在渐变中包含的颜色。例如:
这个梯度产生条带:
background-image: linear-gradient(-155deg, #202020 0%, #1D1D1D 20%,
#1A1A1A 40%, #171717 60%, #141414 80%, #101010 100%);
这个渐变没有,而且看起来很相似:
background-image: linear-gradient(-155deg, #202020 0%, #101010 100%);
我知道这有点晚了,但我发现了一个有效的技巧。对于任何在颜色交汇点处具有粗糙边缘的人。这将其删除。
.gradient {
background: linear-gradient(
173deg,
rgba(0, 132, 255, 1) 50%,
rgba(255, 255, 255, 1) 50.5%
);
}
实际上没有任何方法可以去除条带。CSS 渐变受浏览器各种渲染引擎的支配。有些浏览器只是比其他浏览器渲染得更好。您可以做的最好的事情是覆盖较短的区域和较大的颜色范围以增加渐变步骤......然后等待浏览器渲染改善。
添加最小高度。
#gradient {
min-height: 100vh;
background: linear-gradient(black, white);
}
您还可以将 background-repeat 设置为 no-repeat,但这不是必需的。
#gradient {
min-height: 100vh;
background: linear-gradient(black, white);
background-repeat: no-repeat;
}