我想要jQuery slideToggle效果,但希望使用CSS3过渡,以便调用iOS设备上的GPU,使过渡更平滑。
1szpjjfi1#
您可以通过转换height、padding和border-width来实现这一点。
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>
3phpmpom2#
抱歉,除非您知道确切的高度,否则CSS3不支持此功能。无法在0和自动之间进行动画。如果您知道确切的高度,您可以在此处生成一些转换代码:http://css3generator.com/
1l5u6lss3#
则不能在0和自动高度之间设置动画,但实际上可以切换最大高度。在max-height:0和max-height:1000px之间切换(通过JS),您将获得所获得的结果,尽管它不会像jQuery的slideToggle函数那样平滑。再加上一个不透明的褪色效果,它看起来相当不错。我强烈建议只在相对较短的容器上使用这种技术,因为大的容器可以创建一个肉干的动画。
max-height:0
max-height:1000px
syqv5f0l4#
.container { overflow-y: hidden; max-height: 0; transition: max-height 0.5s ease; } .container.open { max-height: 1000px; /* approx */ }
hpxqektj5#
我相信Animatable应该可以做到这一点,它是一个CSS Transitions框架,虽然我不做iOS开发,但莱亚Verou提到她在FF和Chrome for iOS上测试了它。还有其他CSS动画库,比如move.js,它使用CSS过渡和javascript。
s6fujrry6#
另一种解决方法是使用transform:scale 3D和transform-origin。它并不完美,但总比没有好。它必须与显示/隐藏相结合。
.slideIn { animation-name: slideIn; animation-duration: 200ms; transform-origin: top; animation-timing-function: ease-in; } .slideOut { animation-name: slideIn; animation-duration: 200ms; animation-direction: reverse; transform-origin: top; animation-timing-function: ease-out; } @keyframes slideIn { from { opacity: 0; transform: scale3d(1, 0, 0); } to { opacity: 1; transform: scale3d(1, 1, 1); } }
6条答案
按热度按时间1szpjjfi1#
您可以通过转换
height
、padding
和border-width
来实现这一点。3phpmpom2#
抱歉,除非您知道确切的高度,否则CSS3不支持此功能。无法在0和自动之间进行动画。如果您知道确切的高度,您可以在此处生成一些转换代码:http://css3generator.com/
1l5u6lss3#
则不能在0和自动高度之间设置动画,但实际上可以切换最大高度。
在
max-height:0
和max-height:1000px
之间切换(通过JS),您将获得所获得的结果,尽管它不会像jQuery的slideToggle函数那样平滑。再加上一个不透明的褪色效果,它看起来相当不错。我强烈建议只在相对较短的容器上使用这种技术,因为大的容器可以创建一个肉干的动画。
syqv5f0l4#
hpxqektj5#
我相信Animatable应该可以做到这一点,它是一个CSS Transitions框架,虽然我不做iOS开发,但莱亚Verou提到她在FF和Chrome for iOS上测试了它。
还有其他CSS动画库,比如move.js,它使用CSS过渡和javascript。
s6fujrry6#
另一种解决方法是使用transform:scale 3D和transform-origin。它并不完美,但总比没有好。它必须与显示/隐藏相结合。