スライドダウンしているオブジェクトのコンテンツがフローティングされている場合、jQuery slideDown に問題があります。
何が起こるかというと、div がコンテンツの高さをはるかに超えてスライドし、適切な高さに「スナップ」します。
内部のコンテンツが浮かんでいない場合の高さに基づいて、divが下にスライドしていると思います(単なる理論です)。たとえば、フロート アイテムが 4 つある場合、div は、フロート アイテムが 2 つある場合よりも 2 倍拡大するように見えます。
clearfix ハックで浮動小数点数を含めても、何も修正されないようです。
私が過去に使用した解決策 (および推奨される解決策) は、アイテムを非表示にする前に、CSS を介してアイテムの高さを設定することです。そうすれば、スライドダウンはどこまで進むべきかを知っています。
問題は、スライドダウンを使用するパネルをネストしていることです。親の高さは、ネストされた非表示のパネルが既に展開されていることに基づいて計算されるため、事前に設定することはできません。
すべてのトグル パネルを設定する関数を再帰的に呼び出すことができます...最も内側のネストされたパネルを見つけ、高さを設定し、デフォルトで非表示にするパネルを折りたたんでから、階層を上に移動します。しかし、それは非常に多くのトラバースを行う必要があるため、パフォーマンス ヒットになります。
高さを手動で設定する DOM を最初にトラバースすることなく、事前に CSS を介して高さを修正せずに、フローティング コンテンツのこの slideDown を修正する方法を知っている人はいますか?
アップデート:
サンプルコードは次のとおりです。
(ページをクリックするとスライドして表示されます)
これは私が使用している正確なスタイルに基づいており、その特定の組み合わせで問題が発生します。slideDown に設定されている DIV の背景がピンク色であることに注意してください。内容物よりも遠くに滑り落ち、すぐに適切な場所に戻ります。