我想要jQuery slideToggle效果,但想要使用CSS3过渡来调用iOS设备上的GPU,以便过渡更顺畅。
答案 0 :(得分:20)
您可以通过转换height
,padding
和border-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:0
和max-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。