要素の高さが事前にわからない場合は、少し複雑になります。フェードするには、不透明度を直接アニメーション化する必要があります。また、コンテンツが「スライド」している間は、CSSの可視性でコンテンツを非表示にする必要があります。
CSSの可視性を「非表示」にすると、コンテンツは通常のドキュメント内のスペースを占めることができますが、ビューからは非表示になります。CSS表示「none」は、要素を非表示にするだけでなく、ドキュメントフローから削除します。可視性を使用して要素を非表示にすることで、要素のコンテンツが非表示のままで、要素が完全な高さになるまで下にスライドできます。
同様に、jQueryのfadeIn関数を使用する際のコンテンツのフェードは、要素が最初は表示「none」で非表示になっていることを前提としているため、可視性を使用すると機能しません。代わりに、要素を最初は完全に透明にします(不透明度0.0)。スライドアニメーションが完了したら、可視性を「可視」に設定し、不透明度を完全に透明から完全に不透明(0.0から1.0)にアニメーション化します。
要素が最初に非表示になっていると仮定します(CSSは「none」またはjQuery非表示関数を表示します):
$(element).css("visibility", "hidden").slideDown("slow", function() {
$(this).css("opacity", 0.0).css("visibility", "visible").animate({
"opacity": 1.0
}, "slow");
});
注意:「visibility」と「visible」はスペルミスが発生しやすいため、特に注意して入力してください。これは、多くの苛立たしいバグの原因です。
コンテンツを最初に透明にすることで同じことを達成できるため、可視性を使用する必要はありませんが、可視性を使用すると、何が起こっているのかがより明確になります。つまり、これも機能します。
$(element).css("opacity", 0.0).slideDown("slow", function() {
$(this).animate({
"opacity": 1.0
}, "slow");
});