这是一个简单的水平翻转动画 - http://jsfiddle.net/vntajmgh/2/
我看到了两个问题:
打开chrome中的网址。将鼠标悬停在红色div上。翻盖没问题,但后面div(蓝色)的背景颜色没有应用。
在firefox中打开网址。翻盖就像卡住了一样。我有时会看到蓝色的背面。
我猜它在这里'卡住了'因为高度为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/
答案 0 :(得分:1)
添加隐藏到父div(翻转容器)的溢出。当我们使用带旋转变换属性的100vh(视口高度)时,它实际上比视口具有更多的高度。所以用隐藏的溢出来隐藏它。
<强> CSS 强>
.flip-container {
overflow:hidden;
}
要在两个浏览器中获得相同的悬停效果,您必须修改悬停CSS。
答案 1 :(得分:0)
去除:
backface-visibility: hidden;
将使背面颜色可见
答案 2 :(得分:0)
Chrome中的问题是由伪元素引起的。我已经改变了在没有pseduo元素的情况下将图像与红色混合的方式,现在它可以正常工作。
FF中的问题是由于接收悬停的元素的大小减少而引起的。我已经更改了悬停,以便它由容器触发,现在它也可以正常工作。
避免在转换后的元素上使用悬停总是一个好主意,它们通常会出现某些问题
.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;