CSS翻转动画在浏览器中有所不同

时间:2015-09-24 14:33:21

标签: css css3

这是一个简单的水平翻转动画 - http://jsfiddle.net/vntajmgh/2/
我看到了两个问题:

  1. 打开chrome中的网址。将鼠标悬停在红色div上。翻盖没问题,但后面div(蓝色)的背景颜色没有应用。

  2. 在firefox中打开网址。翻盖就像卡住了一样。我有时会看到蓝色的背面。

  3. 我猜它在这里'卡住了'因为高度为100vh,当减少时效果很好,但它是否也不适用于全高?

    .flip-container {
        width: 150px;
        height: 100vh;
        perspective: 800px;
        color: #fff;
        position: relative;    
    }
    .flipper {
        width: 100%;
        height: 100%;
        position: absolute;
        transform-style: preserve-3d;
        transition: transform linear 0.6s;
    }
    .flipper div {
        margin: 0;
        display: block;
        position: absolute;
        width: 100%;
        height: 100%;
        backface-visibility: hidden;
    }
    .flipper .front {
        background: red;
    }
    .flipper div:after {
        content:"";
        display: block;
        position: absolute;
        top: 0;
        left: 0;
        background-image: url("http://www.transparenttextures.com/patterns/3px-tile.png");
        width: 100%;
        height: 100%;
        opacity: 0.5;
        z-index: 1;
    }
    .flipper .back {
        background: blue;
        transform: rotateY(180deg);
    }
    .flipper:hover {
        transform: rotateY(180deg);
    }
    <div class="flip-container">
        <div class="flipper">
            <div id="1front" class="front">1-front</div>
            <div id="1back" class="back">1-back</div>
        </div>
    </div>

    更新 这是工作小提琴 - http://jsfiddle.net/gf3g8sz1/1/

3 个答案:

答案 0 :(得分:1)

添加隐藏到父div(翻转容器)的溢出。当我们使用带旋转变换属性的100vh(视口高度)时,它实际上比视口具有更多的高度。所以用隐藏的溢出来隐藏它。

<强> CSS

.flip-container {
    overflow:hidden;
}

要在两个浏览器中获得相同的悬停效果,您必须修改悬停CSS。

DEMO

答案 1 :(得分:0)

去除:

backface-visibility: hidden;

将使背面颜色可见

答案 2 :(得分:0)

Chrome中的问题是由伪元素引起的。我已经改变了在没有pseduo元素的情况下将图像与红色混合的方式,现在它可以正常工作。

FF中的问题是由于接收悬停的元素的大小减少而引起的。我已经更改了悬停,以便它由容器触发,现在它也可以正常工作。

避免在转换后的元素上使用悬停总是一个好主意,它们通常会出现某些问题

&#13;
&#13;
.flip-container {
    width: 150px;
    height: 100vh;
    perspective: 800px;
    color: #fff;
    position: relative;    
}
.flipper {
    width: 100%;
    height: 100%;
    position: absolute;
    transform-style: preserve-3d;
    transition: transform linear 0.6s;
}
.flipper div {
    margin: 0;
    display: block;
    position: absolute;
    width: 100%;
    height: 100%;
    backface-visibility: hidden;
}
.flipper .front {
    background: red;
    background-image: linear-gradient(rgba(255,0,0,0.5),rgba(255,0,0,0.5)), url("http://www.transparenttextures.com/patterns/3px-tile.png");
}
.flipper .back {
    background: blue;
    transform: rotateY(180deg);
}
.flip-container:hover .flipper {
    transform: rotateY(180deg);
}
&#13;
<div class="flip-container">
    <div class="flipper">
        <div id="1front" class="front">1-front</div>
        <div id="1back" class="back">1-back</div>
    </div>
</div>
&#13;
&#13;
&#13;