Bootstrap の collapse の仕組み
Published at: 2022/12/19
Bootstrap の collapse は以下のような動作を行う。
collase
が付与された要素は、show
も同時に付与されていない限り、display: none
になる。- 補足:
navbar-expand
の中にあるnavbar-collapse
は、 expand 条件が見たされる場合にはdisplay: flex
する。
- 補足:
- トグルの最初は、
collapsing
が付与される。collapsing
は、height: 0px; overflow: hidden
を設定し、見えない所で表示したい collapse されていた内容の content box を生成する。
- collapsing が dom に反映された直後に、
collapsing
の中身のscrollHeight
を計算し、それをcollapsing
の要素のstyle.height
に設定する。collapsing
によって transition が設定されているため、代入された height に向かって transition アニメーションが開始される。
- transition が終わったタイミングで、
collapsing
のクラスを削除し、collapse show
を付与する。
メモ
Bootstrap 5 を Vue 3 に組込む一環で、Transition
の機構を良い感じに使って css のカスタムクラスを付与するだけで同様の動作ができないか調べていたが、下記のスレッドによれば、 bootstrap での実現方法と同じく javascript をゴリゴリ書いて制御する必要がある模様。
javascript - Smooth vue collapse transition on v-if - Stack Overflow
stackoverflow.com
