Firefox CSS3 object-fit:覆盖过渡期间的奇怪行为

Posted

技术标签:

【中文标题】Firefox CSS3 object-fit:覆盖过渡期间的奇怪行为【英文标题】:Firefox CSS3 object-fit: cover strange behaviour during transition 【发布时间】:2015-05-10 11:20:22 【问题描述】:

我在div 中有img 与精确的widthheight。我想像background-size: cover 这样将图像放在那里以填充整个div,因此html 是:

<div class="cover">
    <img class=active src="http://pixabay.com/static/uploads/photo/2015/02/26/17/56/clock-650753_640.jpg" >
</div>

而 CSS 是:

.cover 
    width: 400px;
    height: 180px;
    position: relative;


.cover img 
    visibility: hidden;
    opacity: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;

    -webkit-transition:visibility 0s linear 4.0s,opacity 2.0s linear 2.0;
    transition:visibility 0s linear 4.0s,opacity 2.0s linear 2.0s;


.cover img.active 
    visibility: visible;
    opacity: 1;

这里是实时示例http://jsfiddle.net/sytwrd9L/1/ - 加载 2 秒后图像消失。在 Firefox 36 中,它会在转换期间调整 img 的大小,但在其他浏览器中它运行良好。知道如何解决在 FF 转换期间不调整 img 的大小吗?

【问题讨论】:

由于这是一个 4 级规范实验属性,我怀疑是否会有很多解决方法。 【参考方案1】:

translate3d(0,0,0) 应用到元素内部过渡元素会阻止GPU 加速过渡本身吗?

这是您想要加速的过渡元素,对吗?但是您正在将调用 GPU 加速的 translate3d hack 应用于没有过渡的元素。

【讨论】:

【参考方案2】:

我知道这是一个老问题,但今天我找到了解决此问题的方法。到目前为止,我已经在 Firefox 44.0 中对其进行了测试。

解决方法:

<!-- Apply the transition to this element -->
<div class="transition">
    <!-- Apply a 3D translate to this element -->
    <div class="translate3d">
        <!-- Apply object-fit to this img elemnt -->
        <img src="path/to/img.jpg" class="object-fit" />
    </div>
</div>

【讨论】:

太好了,您的解决方案正在运行我刚刚测试过它:jsfiddle.net/sytwrd9L/7 它看起来像 Firefox 中的一个错误,在我的情况下,只需为“top”属性分配一个不同的值,即使没有转换:image.style.top = '10px'。图像将“挤压”片刻。显然,将转换应用于父元素是唯一的解决方法。

以上是关于Firefox CSS3 object-fit:覆盖过渡期间的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

css3 object-fit详解

理解 CSS3中 object-fit

CSS3 object-fit属性

聊聊 CSS3 中的 object-fit 和 object-position

CSS3 object-fit视频和图片比例自适应

CSS3 object-fit视频和图片比例自适应