【发布时间】:2020-08-27 03:15:38
【问题描述】:
我需要在 html 中的图像上添加一个非常细的条纹图案。由于多种原因,我无法真正将其添加到图像本身(图像在 CMS 中上传,必须在没有条纹的其他地方使用,而且我还希望图案保持未缩放,而图像确实缩放...... )。
所以我用图案制作了一个透明的 PNG,用伪元素把它放在图像上,然后使用 background-repeat 循环它在整个图像上(参见 sn-p)。
我遇到的问题是当我向下滚动页面时图像闪烁/闪烁。在 Firefox 和 Chrome 上测试,结果相同。我尝试了不同的其他选项,例如使用非常大的条纹图像来避免背景重复,或者使用带有 mix-blend-mode:multiply 的非透明图像,但结果始终相同。
我也尝试了一个纯css解决方案,带有重复的线性背景,但渲染效果不是很好,因为图案太薄了。
我可以获得干净渲染的唯一方法是在原始图像中嵌入图案,然后不闪烁,但由于上述原因,这不是一个真正的选择。
有什么想法吗?谢谢:-)
#container {
position: relative;
}
#container:after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url(https://indelebil.fr/stripes.png) repeat;
}
img {
display: block;
max-width: 100%;
}
<div id="container">
<img src="https://indelebil.fr/sample.jpg" />
</div>
【问题讨论】:
-
在我看来这不是 CSS 的问题,而是浏览器本身的监控和渲染引擎。线条要细(1px)才能在滚动时在每个状态下正确显示(始终相同)。证明 - 将页面缩放到 110% 或 120% - 线条看起来很奇怪,因为这样就无法适应像素,显示器必须以某种方式模仿它。然后放大到 150% - 工作正常。直线可以,但你的旋转了 45 度,它只能失败。
-
您可能是对的,这是一个“亚像素”问题,但是如果将图案直接打印在图像上(光栅化),则不会出现闪烁效果,这就是我想知道的原因还有另一种方法可以让渲染引擎处理得更好......
标签: css png background-image flashing