html - CSS 缩放图像在不透明度过渡时呈锯齿状/像素化

标签 html css

我有一个较大的图像正在缩小到缩略图大小,并且在悬停时不透明度将使用 CSS3 过渡改变。它在过渡期间变得锯齿状和像素化,然后恢复正常。我尝试过使用背面可见性,但这似乎没有任何作用,尽管我可能做错了。

为什么会这样?

a img {
  transition: all 0.3s ease-out 0s; 
}
a img:hover { 
  opacity: 0.7; 
}
<h4>Large image scaled small</h4>
<a href="">
  <img src="http://f.cl.ly/items/1U0b1p1k1j1q0v2p0v2S/01.jpg" width="100" />
</a>

<h4>Small image no scale</h4>
<a href="">
  <img src="http://f.cl.ly/items/253s3p1k0I2z3A081P2w/01.png" width="100" />
</a>

最佳答案

在动画期间,浏览器正在重绘受影响的对象。为了保持此过程高效且电池友好,浏览器将使用不同的渲染方法,以便更快地重绘。

由于 CSS 动画仍然相对较新,我希望浏览器会随着时间的推移而改进。在那之前,您可以尝试通过 CSS image-rendering 属性强制浏览器使用不同的渲染方法:

img
{
    image-rendering: crisp-edges;
}

请注意,这仍然是实验性的,当前的浏览器迭代需要各种前缀属性,这些属性在未来可能会随着标准的创建而中断和改变。以下是撰写本文时可用的一些选项:

img
{
    image-rendering: -moz-crisp-edges;
    image-rendering:   -o-crisp-edges;
    image-rendering: -webkit-optimize-contrast;
    image-rendering: crisp-edges;
    -ms-interpolation-mode: nearest-neighbor; 
}

我还注意到有些人通过应用看似毫无意义的 CSS 转换属性来欺骗浏览器始终使用其他渲染函数,如下所示:

img
{
    transform: translateZ(0px);
}

这实际上对图像的描绘方式没有任何影响,除了浏览器将使用不同的渲染方法来掩盖动画效果的开始和结束。

关于html - CSS 缩放图像在不透明度过渡时呈锯齿状/像素化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31281576/

相关文章:

javascript - 将类添加到动态变化的元素

javascript - JSP、JavaScript : display byte[] as image

javascript - 将 div 放在 StickyContainer 组件之间以使其具有粘性

javascript - 使用 JavaScript 按字符串设置 CSS 属性

javascript - 如何遍历对象数组并将每个对象显示在页面上? ( Vanilla JS)

javascript - 缩放移动网站上的图像以适合屏幕

javascript - IE 8 支持奇/偶斑马样式

c# - 如何在 MVC 4 中将图像传递到多个 View

css - 如何让 Internet Explorer 8 支持第 n 个 child() CSS 元素?

javascript - 向上滚动时淡出