私はアコーディオン リストを作成しています。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;
}
JSFiddle で試してみて、私の言いたいことを理解してください。
機能させる方法はすでにわかっていますが、.open クラスに明示的な高さを設定する必要があります。ただし、アコーディオンの高さは可変であり、それぞれに明示的なセレクターを作成するのは邪魔で保守できません。誰かがこれよりも良い解決策を教えてくれますか?