我正在构建一个手风琴列表,我希望它使用 CSS -webkit-transition: 为打开和关闭设置动画。动画由事件处理程序触发,该事件处理程序只需打开和关闭 .open 类。问题是当我单击它时,动画从闭合高度变为 0px 高度,然后猛拉回到全高,而不是平滑地动画到全高。
HTML
<ul class="accordion">
<li>Foo
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc quis leo sit amet justo vulputate volutpat. Suspendisse potenti. Aliquam aliquet justo ut turpis suscipit adipiscing.</p>
</li>
<li class="open">Baz
<p>Ut velit magna, sagittis at blandit accumsan, vestibulum et dolor. Aliquam elit ante, congue vel pharetra ut, ultricies non est. In hac habitasse platea dictumst. Donec velit ligula, sodales a imperdiet non, sagittis id mauris.</p>
</li>
<li>Bar
<p>Cras sit amet gravida lacus. Nulla consequat molestie nunc nec fermentum. Donec lobortis pretium quam sit amet scelerisque.</p>
</li>
</ul>
Javascript
$('.accordion').delegate('li', 'click', function(li){
$(this).toggleClass('open');
});
CSS
.accordion li.open{
-webkit-transition: height 1s;
}
.accordion li:not(.open){
height: 1em;
-webkit-transition: height 1s;
}
我已经想出了如何让它工作,但它需要在 .open 类上设置一个明确的高度。然而,手风琴具有可变高度,并且为每个手风琴创建一个显式选择器是突兀且不可维护的。谁能给我一个比这更好的解决方案?