Hacer que las transiciones de altura funcionen puede ser un poco complicado, principalmente porque debes saber la altura para la que animar. Esto se complica aún más con el relleno en el elemento que se va a animar.
Esto es lo que se me ocurrió:
usa un estilo como este:
.slideup, .slidedown {
max-height: 0;
overflow-y: hidden;
-webkit-transition: max-height 0.8s ease-in-out;
-moz-transition: max-height 0.8s ease-in-out;
-o-transition: max-height 0.8s ease-in-out;
transition: max-height 0.8s ease-in-out;
}
.slidedown {
max-height: 60px ;
}
Envuelva su contenido en otro contenedor para que el contenedor que está deslizando no tenga relleno / márgenes / bordes:
<div id="Slider" class="slideup">
<div id="Actual">
Hello World Text
</div>
</div>
Luego use algún script (o marcado declarativo en marcos vinculantes) para activar las clases CSS.
$("#Trigger").click(function () {
$("#Slider").toggleClass("slidedown slideup");
});
Ejemplo aquí:
http://plnkr.co/edit/uhChl94nLhrWCYVhRBUF?p=preview
Esto funciona bien para contenido de tamaño fijo. Para una solución más genérica, puede usar código para calcular el tamaño del elemento cuando se activa la transición. El siguiente es un complemento de jQuery que hace precisamente eso:
$.fn.slideUpTransition = function() {
return this.each(function() {
var $el = $(this);
$el.css("max-height", "0");
$el.addClass("height-transition-hidden");
});
};
$.fn.slideDownTransition = function() {
return this.each(function() {
var $el = $(this);
$el.removeClass("height-transition-hidden");
$el.css("max-height", "none");
var height = $el.outerHeight();
$el.css("max-height", "0");
setTimeout(function() {
$el.css({
"max-height": height
});
}, 1);
});
};
que se puede activar así:
$ ("# Trigger"). Haga clic en (function () {
if ($("#SlideWrapper").hasClass("height-transition-hidden"))
$("#SlideWrapper").slideDownTransition();
else
$("#SlideWrapper").slideUpTransition();
});
contra el marcado como este:
<style>
#Actual {
background: silver;
color: White;
padding: 20px;
}
.height-transition {
-webkit-transition: max-height 0.5s ease-in-out;
-moz-transition: max-height 0.5s ease-in-out;
-o-transition: max-height 0.5s ease-in-out;
transition: max-height 0.5s ease-in-out;
overflow-y: hidden;
}
.height-transition-hidden {
max-height: 0;
}
</style>
<div id="SlideWrapper" class="height-transition height-transition-hidden">
<div id="Actual">
Your actual content to slide down goes here.
</div>
</div>
Ejemplo:
http://plnkr.co/edit/Wpcgjs3FS4ryrhQUAOcU?p=preview
Escribí esto recientemente en una publicación de blog si está interesado en más detalles:
http://weblog.west-wind.com/posts/2014/Feb/22/Using-CSS-Transitions-to-SlideUp-and-SlideDown