如何使用CSS3过渡获得与jQuery slideToggle相同的效果?

时间:2012-01-14 06:35:04

标签: jquery css mobile css3

我想要jQuery slideToggle效果,但想要使用CSS3过渡来调用iOS设备上的GPU,以便过渡更顺畅。

5 个答案:

答案 0 :(得分:20)

您可以通过转换heightpaddingborder-width来实现这一目标。这是一个例子:

$('.run-css').click(function() {
    $('.cont').toggleClass('toggled');
});
.cont {
    width: 100px;
    height: 100px;
    border: 1px #CCC solid;
    background-color: #EEE;
    padding: 5px;
    -webkit-transition: height .3s linear, padding-top .3s linear, padding-bottom .3s linear, border-top-width .3s linear, border-top-width .3s linear;
    transition: height .3s linear, padding-top .3s linear, padding-bottom .3s linear, border-top-width .3s linear, border-top-width .3s linear;
}
.toggled {
    overflow: hidden;
    padding-top: 0;
    padding-bottom: 0;
    height: 0;
    border-width: 0 1px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<button class="run-css">CSS slideToggle</button>

<div class="cont">Toggle this div</div>

答案 1 :(得分:14)

很抱歉,CSS3不支持此功能,除非您知道确切的高度。无法在0和auto之间进行动画处理。如果您确实知道确切的高度,可以在此处生成一些转换代码:http://css3generator.com/

答案 2 :(得分:6)

是的,您无法在0和自动高度之间设置动画,但实际上您可以切换最大高度。

max-height:0max-height:1000px之间切换(通过JS),你将获得实现的结果,尽管它不会像jQuery的slideToggle函数那样顺利。

将它与不透明度淡化相结合,看起来非常不错。我强烈建议只在相对较短的容器上使用这种技术,因为大的容器可以创建一个不稳定的动画。

答案 3 :(得分:4)

.container {
    overflow-y: hidden;
    max-height: 0;

    transition: max-height 0.5s ease;
}
.container.open {
    max-height: 1000px; /* approx */
}

答案 4 :(得分:0)

我相信Animatable应该做到这一点。这是一个CSS Transitions框架,虽然我没有进行iOS开发,但Lea Verou提到她在FF和Chrome for iOS上测试它。

还有其他CSS动画库,比如使用CSS过渡和javascript的move.js