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__content
ve 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 .active
sı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 scrollHeight
değ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.
.scrollHeight
DOM işlevi IE <8.0 (çalışmaz developer.mozilla.org/en/DOM/element.scrollHeight )