5

我正在使用教程使用 CSS3 和 jQuery 创建翻转卡片效果,我在让高度调整到内容长度时遇到问题,同时它仍然在水平中心翻转。

小提琴。

代码:

<div class="flip"> 
    <div class="card"> 
        <div class="face front"> 
            Front<br> Other text.<br> Other text.<br> Other text.<br> Other text.
        </div> 

        <div class="face back"> 
            Back
        </div> 
    </div> 
</div> 

body {
 background: #ccc;   
}
.flip {
  -webkit-perspective: 800;
   width: 400px;
   height: 200px;
    position: relative;
    margin: 50px auto;
}
.flip .card.flipped {
  -webkit-transform: rotatex(-180deg);
}
.flip .card {
  width: 100%;
  height: 100%;
  -webkit-transform-style: preserve-3d;
  -webkit-transition: 0.5s;
}
.flip .card .face {
  width: 100%;
  height: 100%;
  position: absolute;
  -webkit-backface-visibility: hidden ;
  z-index: 2;
    font-family: Georgia;
    font-size: 3em;
    text-align: center;
}
.flip .card .front {
  position: absolute;
  z-index: 1;
    background: black;
    color: white;
    cursor: pointer;
}
.flip .card .back {
  -webkit-transform: rotatex(-180deg);
    background: blue;
    background: white;
    color: black;
    cursor: pointer;
}​

$('.flip').click(function(){
    $(this).find('.card').addClass('flipped').mouseleave(function(){
        $(this).removeClass('flipped');
    });
    return false;
});​

​</p>

4

2 回答 2

18

您可以通过使 .back 位置为绝对位置和 100% 高度来欺骗它。并保留 .front 相对位置。

.front  {position: relative;}
.back       {position: absolute; top: 0; left: 0; width: 100%; height: 100%;}

注意,在某些情况下可能有用:在后面添加 2 个附加元素,用于页眉和页脚,并将页脚位置设为绝对位置并将其设置为底部 0。

于 2013-12-14T12:05:55.530 回答
6

这是关于jsFiddle的有效解决方案。

JS:

$('.flip').click(function(){
    $(this).find('.card').addClass('flipped');
    return false;
}).mouseleave(function () {
    $('.flip > .card').removeClass('flipped');
});

var frontHeight = $('.front').outerHeight();
var backHeight = $('.back').outerHeight();

if (frontHeight > backHeight) {
    $('.flip, .back').height(frontHeight);
}
else if (frontHeight > backHeight) {
    $('.flip, .front').height(backHeight);
}
else {
    $('.flip').height(backHeight);
}

定义的高度是不灵活的,所以你看到的就是你定义的。由于高度不会保持不变,因此正面或背面需要具有与最高元素匹配的定义高度。在示例中,.front较高,因此.back更新为具有相同的高度,从而可以在中心实现垂直翻转效果。

在您的示例中,mouseleave事件可以在动画期间触发元素。我假设您不希望这种情况发生,所以我更新了.flipped离开卡片时要移除的逻辑,它在整个动画中保持其高度。我还清理了 CSS 以减少冗余。希望这可以帮助!

于 2012-10-22T01:00:40.453 回答