图像在悬停时移动 - 铬不透明度问题

zef*_*efs 90 css google-chrome image hover opacity

我的页面似乎存在问题:http: //www.lonewulf.eu

将鼠标悬停在缩略图上时,图像会在右侧稍微移动,而只会在Chrome上进行.

我的css:

.img{
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
    filter:alpha(opacity=50);
    -moz-opacity: 0.5; 
    opacity: 0.5;
    -khtml-opacity: 0.5;
    display:block;
    border:1px solid #121212;
}
.img:hover{
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
    filter:alpha(opacity=100);
    -moz-opacity: 1; 
    opacity: 1;
    -khtml-opacity: 1;  
    display:block;
}
Run Code Online (Sandbox Code Playgroud)

alp*_*ego 230

另一种解决方案是使用

-webkit-backface-visibility: hidden;
Run Code Online (Sandbox Code Playgroud)

在具有不透明度的悬停元素上.背面可见性与此有关transform,所以@Beskow与它有关.由于它是webkit特定问题,因此您只需指定webkit的背面可见性.还有其他供应商前缀.

有关详细信息,请参阅http://css-tricks.com/almanac/properties/b/backface-visibility/.


Ric*_*ner 33

出于某种原因,Chrome以不同的方式解释不具有不透明度1的元素的位置.如果将CSS属性position:relative应用于a.img元素,则不再有左/右移动,因为它们的不透明度会有所不同.

  • 刚刚在Firefox中遇到同样的问题.相对没有解决它,但在元素上设置这个 - `transform:translate3d(0px,0px,0px);` (6认同)

小智 21

我有同样的问题,我用css变换旋转修复它.像这样:

-webkit-transform: rotate(0);
-moz-transform: rotate(0);
transform: rotate(0);
Run Code Online (Sandbox Code Playgroud)

它在主流浏览器中运行良好.


Nic*_*k F 14

解决这个问题的另一个解决方案是添加规则:

will-change: opacity;
Run Code Online (Sandbox Code Playgroud)

在我的特殊情况下,这避免了translateZ(0)在Internet Explorer 中引入的类似像素跳跃问题,尽管在Chrome中修复了一些问题.

大多数其他解决方案的建议在这里涉及转换(例如translateZ(0),rotate(0),translate3d(0px,0px,0px)等),用人工元素的绘画转移到GPU,实现更有效的渲染工作.will-change提供了一个可能具有类似效果的浏览器提示(允许浏览器更有效地呈现转换),但感觉不那么苛刻(因为它明确地解决了问题,而不仅仅是轻推浏览器以使用GPU).

话虽如此,但值得注意的是,浏览器支持并不是那么好will-change(尽管问题只适用于Chrome,这可能是一件好事!),在某些情况下,它可能会引入自己的问题,但仍然,这是这个问题的另一种可能的解决方案.


Jam*_*and 10

我需要同时使用backface-visibilitytransform规则来防止这种故障.像这样:

a     {-webkit-transform: rotate(0);}
a img {-webkit-backface-visibility: hidden;}
Run Code Online (Sandbox Code Playgroud)


小智 10

我在悬停时遇到类似的问题(非不透明度)过滤器.修复了通过向基类添加规则:

filter: brightness(1.01);
Run Code Online (Sandbox Code Playgroud)


and*_*sra 5

backface-visibility(或-webkit-backface-visibility)只为我解决了Chrome中的问题.要修复Firefox和Chrome,我使用了以下上述答案的组合.

//fixes image jiggle issue, please do not remove
img {
  -webkit-backface-visibility: hidden; //Webkit fix
  transform: translate3d(0px,0px,0px); //Firefox fix
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*her 5

我在Safari 8.0.2中遇到了类似的问题,当不透明度转换时,图像会抖动.此处发布的修复程序均无效,但以下情况如下:

-webkit-transform: translateZ(0);
Run Code Online (Sandbox Code Playgroud)

所有信贷这个答案通过此后续的答案