Saya baru saja memasak solusi lain untuk ini, di mana tidak perlu lagi menggunakan nilai -much to high-max-height. Dibutuhkan beberapa baris kode javascript untuk menghitung ketinggian bagian dalam DIV yang diciutkan tetapi setelah itu, itu semua CSS.
1) Mengambil dan mengatur ketinggian
Ambil ketinggian bagian dalam elemen yang runtuh (menggunakan scrollHeight
). Elemen saya memiliki kelas .section__accordeon__content
dan saya benar-benar menjalankan ini dalam satu forEach()
lingkaran untuk mengatur ketinggian untuk semua panel, tetapi Anda mendapatkan ide.
document.querySelectorAll( '.section__accordeon__content' ).style.cssText = "--accordeon-height: " + accordeonPanel.scrollHeight + "px";
2) Gunakan variabel CSS untuk memperluas item yang aktif
Selanjutnya, gunakan variabel CSS untuk mengatur max-height
nilai ketika item memiliki .active
kelas.
.section__accordeon__content.active {
max-height: var(--accordeon-height);
}
Contoh terakhir
Jadi contoh lengkapnya seperti ini: loop pertama melalui semua panel accordeon dan menyimpan scrollHeight
nilai - nilai mereka sebagai variabel CSS. Selanjutnya gunakan variabel CSS sebagai max-height
nilai pada elemen aktif / diperluas / terbuka elemen.
Javascript:
document.querySelectorAll( '.section__accordeon__content' ).forEach(
function( accordeonPanel ) {
accordeonPanel.style.cssText = "--accordeon-height: " + accordeonPanel.scrollHeight + "px";
}
);
CSS:
.section__accordeon__content {
max-height: 0px;
overflow: hidden;
transition: all 425ms cubic-bezier(0.465, 0.183, 0.153, 0.946);
}
.section__accordeon__content.active {
max-height: var(--accordeon-height);
}
Dan begitulah. Animasi max-height adaptif yang hanya menggunakan CSS dan beberapa baris kode JavaScript (tidak diperlukan jQuery).
Semoga ini bisa membantu seseorang di masa depan (atau masa depan saya sendiri untuk referensi).
.scrollHeight
fungsi DOM tidak akan berfungsi di IE <8.0 ( developer.mozilla.org/en/DOM/element.scrollHeight )