CSS3 equivalent to jQuery slideUp and slideDown? CSS3 equivalent to jQuery slideUp and slideDown? jquery jquery

CSS3 equivalent to jQuery slideUp and slideDown?


You could do something like this:

#youritem .fade.in {    animation-name: fadeIn;}#youritem .fade.out {    animation-name: fadeOut;}@keyframes fadeIn {    0% {        opacity: 0;        transform: translateY(startYposition);    }     100% {        opacity: 1;        transform: translateY(endYposition);    }}@keyframes fadeOut {    0% {        opacity: 1;        transform: translateY(startYposition);    }     100% {        opacity: 0;        transform: translateY(endYposition);    }}

Example - Slide and Fade:

This slides and animates the opacity - not based on height of the container, but on the top/coordinate. View example

Example - Auto-height/No Javascript: Here is a live sample, not needing height - dealing with automatic height and no javascript.
View example


I changed your solution, so that it works in all modern browsers:

css snippet:

-webkit-transition: height 1s ease-in-out;-moz-transition: height 1s ease-in-out;-ms-transition: height 1s ease-in-out;-o-transition: height 1s ease-in-out;transition: height 1s ease-in-out;

js snippet:

    var clone = $('#this').clone()                .css({'position':'absolute','visibility':'hidden','height':'auto'})                .addClass('slideClone')                .appendTo('body');    var newHeight = $(".slideClone").height();    $(".slideClone").remove();    $('#this').css('height',newHeight + 'px');

here's the full example http://jsfiddle.net/RHPQd/


So I've gone ahead and answered my own question :)

@True's answer regarded transforming an element to a specific height. The problem with this is I don't know the height of the element (it can fluctuate).

I found other solutions around which used max-height as the transition but this produced a very jerky animation for me.

My solution below works only in WebKit browsers.

Although not purely CSS, it involves transitioning the height, which is determined by some JS.

$('#click-me').click(function() {  var height = $("#this").height();  if (height > 0) {    $('#this').css('height', '0');  } else {    $("#this").css({      'position': 'absolute',      'visibility': 'hidden',      'height': 'auto'    });    var newHeight = $("#this").height();    $("#this").css({      'position': 'static',      'visibility': 'visible',      'height': '0'    });    $('#this').css('height', newHeight + 'px');  }});
#this {  width: 500px;  height: 0;  max-height: 9999px;  overflow: hidden;  background: #BBBBBB;  -webkit-transition: height 1s ease-in-out;}#click-me {  cursor: pointer;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script><p id="click-me">click me</p><div id="this">here<br />is<br />a<br />bunch<br />of<br />content<br />sdf</div><div>always shows</div>