Заставить переходы высоты работать может быть немного сложно, в основном потому, что вам нужно знать высоту для анимации. Это дополнительно усложняется заполнением элемента, который нужно анимировать.
Вот что я придумал:
используйте такой стиль:
.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 ;
}
Оберните ваш контент в другой контейнер, чтобы у контейнера, который вы перемещаете, не было отступов / полей / границ:
<div id="Slider" class="slideup">
<div id="Actual">
Hello World Text
</div>
</div>
Затем используйте какой-нибудь сценарий (или декларативную разметку в каркасах привязки) для запуска классов CSS.
$("#Trigger").click(function () {
$("#Slider").toggleClass("slidedown slideup");
});
Пример здесь:
http://plnkr.co/edit/uhChl94nLhrWCYVhRBUF?p=preview
Это отлично работает для содержимого фиксированного размера. Для более общего решения вы можете использовать код для определения размера элемента при активации перехода. Ниже приводится подключаемый модуль jQuery, который делает именно это:
$.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);
});
};
который может быть запущен следующим образом:
$ ("# Триггер"). Click (function () {
if ($("#SlideWrapper").hasClass("height-transition-hidden"))
$("#SlideWrapper").slideDownTransition();
else
$("#SlideWrapper").slideUpTransition();
});
против такой разметки:
<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>
Пример:
http://plnkr.co/edit/Wpcgjs3FS4ryrhQUAOcU?p=preview
Я недавно написал об этом в блоге, если вас интересуют более подробные сведения:
http://weblog.west-wind.com/posts/2014/Feb/22/Using-CSS-Transitions-to-SlideUp-and-SlideDown