Bunun için başka bir çözüm hazırladım, artık bir -much-yüksek-yüksek-değer değeri kullanmanın artık gerekli olmadığı. Daraltılmış DIV'nin iç yüksekliğini hesaplamak için birkaç satır javascript kodu gerekir, ancak bundan sonra hepsi CSS'dir.
1) Getirme ve yükseklik ayarlama
Daraltılmış öğenin iç yüksekliğini (kullanarak scrollHeight) getirin. Öğemin bir sınıfı var .section__accordeon__contentve bunu forEach()tüm paneller için yüksekliği ayarlamak için bir döngüde çalıştırıyorum , ancak fikri anlıyorsunuz.
document.querySelectorAll( '.section__accordeon__content' ).style.cssText = "--accordeon-height: " + accordeonPanel.scrollHeight + "px";
2) Etkin öğeyi genişletmek için CSS değişkenini kullanın
Ardından, max-heightöğenin bir .activesınıfı olduğunda değeri ayarlamak için CSS değişkenini kullanın .
.section__accordeon__content.active {
max-height: var(--accordeon-height);
}
Son örnek
Yani tam örnek şu şekildedir: ilk önce tüm akordeon paneller arasında döngü yapın ve scrollHeightdeğerlerini CSS değişkenleri olarak saklayın . Ardından max-height, öğenin etkin / genişletilmiş / açık durumundaki değer olarak CSS değişkenini kullanın .
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);
}
İşte buyur. Yalnızca CSS ve birkaç satır JavaScript kodu kullanan uyarlanabilir bir maksimum yükseklik animasyonu (jQuery gerekmez).
Umarım bu gelecekte birine (veya referans için gelecekteki kendime) yardımcı olur.
.scrollHeightDOM işlevi IE <8.0 (çalışmaz developer.mozilla.org/en/DOM/element.scrollHeight )