当使用@keyframes 为背景设置动画时,Webkit 忽略 overflow:hidden

Webkit ignoring overflow:hidden when background is animated with @keyframes

我正在尝试使用边框半径缩放被圆圈遮盖的背景图像。经过一些研究,我了解到似乎存在一个关于边界半径屏蔽绝对定位元素的 webkit 错误。

但在这个例子中:http://jsfiddle.net/5m1n5xeg/1/

.circle{
    overflow:hidden;
    border-radius:50%;
    width:407px;
    height:407px;
}

.circle .image{
    width:407px;
    height:407px;
    background:url(http://vurtmedia.co.uk/prev/wp-content/themes/EightDegree/images/_overlay/logo-bg3.png) no-repeat 0 0;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
    background-position: center center; 
     -webkit-animation: animatedBackground 5s ease-out infinite;
        -moz-animation: animatedBackground 5s ease-out infinite;
        animation: animatedBackground 5s ease-out infinite;
        -webkit-animation-fill-mode: forwards;
        animation-fill-mode: forwards;
}

@keyframes animatedBackground {
0% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
transform: scale(1);
}
50% {
-webkit-transform: scale(4);
-moz-transform: scale(3.5);
transform: scale(3.5);
}
100% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
transform: scale(1);
}
}
@-webkit-keyframes animatedBackground {
0% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
transform: scale(1);
}
50% {
-webkit-transform: scale(4);
-moz-transform: scale(3.5);
transform: scale(1.5);
}
100% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
transform: scale(1);
}
}

(在 firefox 中完美运行)如果你在 css 中取消关键帧动画,你会看到外部 div 掩盖了内部元素,在 webkit 中也是如此。当应用动画时,溢出不再有效。

这是我试图在所有内容(包括 webkit)上完美工作但仅在悬停时使用过渡效果的另一个示例:http://jsfiddle.net/dhepce3p/

.circle .image{
    width:407px;
    height:407px;
    background:url(http://vurtmedia.co.uk/prev/wp-content/themes/EightDegree/images/_overlay/logo-bg3.png) no-repeat 0 0; 
   background-size: 100% 100%;
    transition: background-size 2s ease-in;
-moz-transition: background-size 2s ease-in;
-ms-transition: background-size 2s ease-in;
-o-transition: background-size 2s ease-in;
-webkit-transition: background-size 2s ease-in;
}

.circle .image:hover{
    background-size: 150% 150%;

}

有没有办法以某种方式结合这些技术的力量,甚至是另一种解决方法?

我也读过关于在元素上使用 :after 以及在顶部放置一个带有冲孔圆的白色正方形作为 hack,但这需要经过另一个纹理,因此需要透明!

当您遇到已知错误时,您可能会重新考虑所使用的技术并选择一个可行的技术。大多数时候有几种方法可以达到类似的视觉效果。

在这里我要说的是,删除 transform:thingy bob ; 并使用 background-size 代替。在这种情况下,除了绝对定位甚至可能不相关。

尽量简单。 http://jsfiddle.net/5m1n5xeg/4/

.circle {
    overflow:hidden;
    border-radius:50%;
    width:407px;
    height:407px;
}
.circle .image {
    border-radius:inherit;
    width:407px;
    height:407px;
    background:url(http://vurtmedia.co.uk/prev/wp-content/themes/EightDegree/images/_overlay/logo-bg3.png) no-repeat 0 0;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: 100% 100%;
    background-position: center center;
    -webkit-animation: animatedBackground 5s ease-out infinite;
    -moz-animation: animatedBackground 5s ease-out infinite;
    animation: animatedBackground 5s ease-out infinite;
    -webkit-animation-fill-mode: forwards;
    animation-fill-mode: forwards;
}
@keyframes animatedBackground {
    50% {
        background-size: 350% 350%;
    }
}
@-webkit-keyframes animatedBackground {
    50% {
        background-size: 350% 350%;
    }
}
<div class="circle">
    <div class="image"></div>
</div>

实际上,我不确定您是否需要所有 those prefix :)