Получение переходов по высоте на работу может быть немного сложным, главным образом потому, что вы должны знать высоту, для которой нужно анимировать. Это дополнительно усложняется заполнением анимируемого элемента.
Вот что я придумал:
используйте такой стиль:
.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 ; // fixed width
}
Оберните ваш контент в другой контейнер, чтобы у перемещаемого контейнера не было отступов / полей / границ:
<div id="Slider" class="slideup">
<!-- content has to be wrapped so that the padding and
margins don't effect the transition's height -->
<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");
// temporarily make visible to get the size
$el.css("max-height", "none");
var height = $el.outerHeight();
// reset to 0 then animate with small delay
$el.css("max-height", "0");
setTimeout(function() {
$el.css({
"max-height": height
});
}, 1);
});
};
, который может быть вызван так:
$ ("# Trigger"). 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">
<!-- content has to be wrapped so that the padding and
margins don't effect the transition's height -->
<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 / сообщений / 2014 / Февраль / 22 / Использование-CSS-переходы к SlideUp-и-SlideDown