【问题标题】:transform scaleing down makes image blurry缩小变换使图像模糊
【发布时间】:2017-01-13 16:24:04
【问题描述】:

我尝试为某些产品在悬停时制作一点缩放效果。为此,我将图像的容器缩小到 95%,并在悬停时将其缩放到 100%:

但是缩小后的图像看起来很模糊。我尝试了其他有关该主题的问题中给出的不同解决方案,例如:backface-visibility、blur(0)、translateZ。但似乎没有任何改变。

有没有办法让这个更漂亮,或者这是尽可能好?

.container {
	transform: scale(0.95);
	transition: transform 70ms ease-in;
  float: left;
}

.container:hover {
	transform: scale(1);
}
<div class="container">
<img src="https://s28.postimg.org/kagu55chp/csm_632san_Amalfi_Pearl_ca02784e51.jpg" />
</div>
<div class="container">
<img src="https://s24.postimg.org/cdecsntlx/csm_594san_Amalfi_Silver_bbb138a25a.jpg" />
</div>

【问题讨论】:

    标签: html css css-transforms blurry


    【解决方案1】:

    将以下 CSS 添加到您的 img 元素(不是安全的跨浏览器技巧):

    img {
       image-rendering: -moz-crisp-edges; /* Firefox */
       image-rendering: -o-crisp-edges; /* Opera */
       image-rendering: -webkit-optimize-contrast; /* Webkit (non-standard naming) */
       image-rendering: crisp-edges;
       -ms-interpolation-mode: nearest-neighbor; /* IE (non-standard property) */
    }
    

    以下片段:

    .container {
      transform: scale(.95);
      transition: transform 70ms ease-in;
      float: left;
    }
    .container:hover {
      transform: scale(1);
    }
    img {
      image-rendering: -moz-crisp-edges; /* Firefox */
      image-rendering: -o-crisp-edges; /* Opera */
      image-rendering: -webkit-optimize-contrast; /* Webkit (non-standard naming) */
      image-rendering: crisp-edges;
      -ms-interpolation-mode: nearest-neighbor; /* IE (non-standard property) */
    }
    <div class="container">
      <img src="https://s28.postimg.org/kagu55chp/csm_632san_Amalfi_Pearl_ca02784e51.jpg" />
    </div>
    <div class="container">
      <img src="https://s24.postimg.org/cdecsntlx/csm_594san_Amalfi_Silver_bbb138a25a.jpg" />
    </div>

    备选方案 1: 避免改变维度的属性,例如 translate on img

    .container {
      transition: transform 70ms ease-in;
      float: left;
      margin: 5px;
    }
    .container:hover img {
      transform: translate(0, -3px);
    }
    <div class="container">
      <img src="https://s28.postimg.org/kagu55chp/csm_632san_Amalfi_Pearl_ca02784e51.jpg" />
    </div>
    <div class="container">
      <img src="https://s24.postimg.org/cdecsntlx/csm_594san_Amalfi_Silver_bbb138a25a.jpg" />
    </div>

    备选方案 2: box-shadow

    .container {
      transition: transform 70ms ease-in;
      float: left;
      margin: 5px;
    }
    .container:hover img {
      box-shadow: 0px 0px 5px #888888;
    }
    <div class="container">
      <img src="https://s28.postimg.org/kagu55chp/csm_632san_Amalfi_Pearl_ca02784e51.jpg" />
    </div>
    <div class="container">
      <img src="https://s24.postimg.org/cdecsntlx/csm_594san_Amalfi_Silver_bbb138a25a.jpg" />
    </div>

    【讨论】:

    • Props 用于提及“-ms-interpolation-mode: nearest-neighbor;”但我不认为这是我们可以依赖的 CSS 标准。正如第 19 期 CSS 图像值文档所述 (w3.org/TR/css4-images),我们目前无法控制浏览器如何进行插值。
    • 虽然它在 IE 中变得更好一些,但我看不到 Crome 和 Firefox 中的任何变化,但不能说这是更好或更坏 :) 你的选择,但我喜欢。无需缩放图像,只需将其提高 3 px 即可获得相同的感觉。
    • 是的,我完全同意,我很肯定它并没有比这个 hack 好多少。我建议使用 translate 替代,以避免 img 尺寸改变。 Firefox(虽然有点奇怪,是的,但它不是模糊的,更像是一些最小的像素异步)在我的身上很好地接受了黑客攻击,Chrome 不是。多年来,这一直是一个普遍存在的问题,现在仍然如此。
    【解决方案2】:

    我相信您的问题是像素插值:http://www.cambridgeincolour.com/tutorials/image-interpolation.htm

    调整图像大小时,必须调整像素。通过缩小,像素被平均化和减少。通过放大,像素被添加,像素之间的平均值填补了空白。

    请使用 Photoshop 或 Gimpshop 等图像编辑器来调整图像大小,因为图像程序比网络浏览器更适合此目的。

    关于这一点,在浏览器处理插值时,某些百分比比其他百分比效果更好。我注意到它通常是每个季度的那些:25%、50%、75% 的缩小和 125%、150%、175% 的放大往往比其他数字(如 95% 或 73% 等)处理得更好。 )。

    【讨论】:

    • 是的,通常我会按照您的建议使用图像编辑器(或者只是图像魔法并在服务器上创建所需的大小)。但是因为我希望它作为前端的缩放效果,所以这是不可能的。我的意思是.. 我有一个可以工作的肮脏解决方案的想法:创建 2 个图像,95% 和 100%,并使用 95% 的图像作为背景,背景大小:封面。然后在悬停时将背景图像更改为 100%,并使用变换更改 div 的宽度和高度:宽度 70 毫秒,高度 70 毫秒。这可以工作.. 但会使客户端加载 2 个图像
    • Robin Williams 在她的《非设计师设计书》一书中建议,如果你想建立视觉对比——无论是交互式的还是静态的,都要把它放大。例如,将同一家族的字体相隔几个点会导致眼睛疲劳,而大的点变化可以更好地支持内容的流动。我不是建议你改变你的设计,但也许考虑一下只有 5% 的缩放实际上是如何帮助用户的。
    猜你喜欢
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2016-10-20
    • 2020-12-09
    • 2018-08-27
    • 1970-01-01
    相关资源
    最近更新 更多