Faire fonctionner les transitions de hauteur peut être un peu délicat, principalement parce que vous devez connaître la hauteur pour laquelle animer. Ceci est encore compliqué par le remplissage dans l'élément à animer.
Voici ce que j'ai trouvé:
utilisez un style comme celui-ci:
.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 ;
}
Enveloppez votre contenu dans un autre conteneur afin que le conteneur que vous glissez n'a pas de remplissage / marges / bordures:
<div id="Slider" class="slideup">
<div id="Actual">
Hello World Text
</div>
</div>
Ensuite, utilisez un script (ou un balisage déclaratif dans les frameworks de liaison) pour déclencher les classes CSS.
$("#Trigger").click(function () {
$("#Slider").toggleClass("slidedown slideup");
});
Exemple ici:
http://plnkr.co/edit/uhChl94nLhrWCYVhRBUF?p=preview
Cela fonctionne bien pour le contenu de taille fixe. Pour une solution plus générique, vous pouvez utiliser du code pour déterminer la taille de l'élément lorsque la transition est activée. Voici un plug-in jQuery qui fait exactement cela:
$.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);
});
};
qui peut être déclenché comme ceci:
$ ("# Trigger"). Cliquez sur (function () {
if ($("#SlideWrapper").hasClass("height-transition-hidden"))
$("#SlideWrapper").slideDownTransition();
else
$("#SlideWrapper").slideUpTransition();
});
contre un balisage comme celui-ci:
<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>
Exemple:
http://plnkr.co/edit/Wpcgjs3FS4ryrhQUAOcU?p=preview
J'ai récemment écrit ceci dans un article de blog si vous êtes intéressé par plus de détails:
http://weblog.west-wind.com/posts/2014/Feb/22/Using-CSS-Transitions-to-SlideUp-and-SlideDown