I\'m using a tutorial to create a flip card effect using CSS3 and jQuery and I\'m having issues getting the height to adjust to the content length while having it still flip
You can trick it, by making the .back position absolute and 100% height. And leave the .front position relative.
.front {position: relative;}
.back {position: absolute; top: 0; left: 0; width: 100%; height: 100%;}
Note, might be useful in some scenarios: add 2 additional elements to the back, for header and footer, and make the footer position absolute and set it to bottom 0.
Here's a working solution on 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);
}
A defined height isn't flexible, so what you're seeing is what you've defined. Since the height will not remain constant, the front or the back needs to have a defined height that matches whichever element is the tallest. In the example, .front
is taller, so .back
is updated to have the same height, allowing you to achieve the vertical flip effect at the center.
In your example, the mouseleave
event can fire while the elements during the animation. I have assumed that you did not want this to occur, so I've updated the logic to remove .flipped
when leaving the card, which retains its height throughout the animation. I also cleaned up the CSS to be less redundant. Hope this helps!