微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CSS:在webkit上一起使用object-fit和transform时出现的问题

我正在尝试使用css属性object-fit:覆盖img元素以使我的图像填充其包含的div并变换:scale(xx)以使图像在悬停时缩小.

这是一个示例小提琴:https://jsfiddle.net/96kbuncq/
编辑:带有真实图像的样本:https://jsfiddle.net/96kbuncq/3/

HTML:

<div>
   <div class="category">
      <img src="http://placehold.it/1200x950&text=1200x950+-+Category+1+-" />
   </div>
   <div class="category">
      <img src="http://placehold.it/1200x950&text=1200x950+-+Category+2+-" />
   </div>
   <div class="category">
      <img src="http://placehold.it/1200x950&text=1200x950+-+Category+3+-" />
   </div>
</div>

CSS:

.....

div.category img {
  display: block;
  height: 100%;
  width: 100%;
  object-fit: cover;
  object-position: center;
}

/* Transformations */

div.category img {
  transition: transform 0.35s;
  transform: /*translateZ(0)*/ scale(1.12);
}

div.category:hover img {
  transform: /*translateZ(0)*/ scale(1);
}

这在Firefox中运行良好,但在Chrome和Opera中我遇到以下问题:

>当悬停第一个div时,另外两个也会受到影响(当悬停第二个时,第三个也会受到影响),
>当悬停div时,首先完全显示内部图像(我们可以看到整个图像被拉伸以适合div内部),然后才能正确缩小并“覆盖”div.

我不知道如何解决这些问题.

关于第一个问题(受影响的兄弟姐妹),我发现其他答案说要使用translateZ(0)但是当我添加这个对象适合:封面不再工作(整个图像被拉伸以适合div内).

有关如何在Chrome中使用此功能的任何想法? (对象拟合和变换在没有其他的情况下使用时都按预期工作.)

解决方法

在测试之后,似乎背面可见性,translateZ和translate3d是防止变换闪烁所需的,破坏了对象适合和背景大小.如果您的目标是使图像居中,那么您可以使用position:absolute和translate,如下例所示.

div.category {
    width: 80%;
    height: 150px;
    margin: 20px;
    position: relative;
    overflow: hidden;
}
img {
    display: block;
    width: 100%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%) scale(1.12); /* order is important here*/
    backface-visibility: hidden;
    transition: transform 0.35s;
}
div.category:hover img {
    transform: translate(-50%,-50%) scale(1);
}
<div>
    <div class="category">
        <img src="http://www.4freephotos.com/images/batch/Elephant-dusting674.jpg" />
    </div>
    <div class="category">
        <img src="http://www.4freephotos.com/images/batch/Bananas-and-kiwi-221.jpg" />
    </div>
    <div class="category">
        <img src="http://placehold.it/1200x950&text=1200x950+-+Category+3+-" />
    </div>
</div>

http://jsfiddle.net/moogs/r1s1rtLk/4/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。