Я тільки що підготував інше рішення для цього, де більше не потрібно використовувати значення -мік до великого-максимуму висоти. Для розрахунку внутрішньої висоти згорнутого DIV йому потрібно кілька рядків коду javascript, але після цього - це все CSS.
1) Збір та встановлення висоти
Отримайте внутрішню висоту згорнутого елемента (за допомогою scrollHeight
). У мого елемента є клас, .section__accordeon__content
і я насправді запускаю це в forEach()
циклі, щоб встановити висоту для всіх панелей, але ви отримуєте ідею.
document.querySelectorAll( '.section__accordeon__content' ).style.cssText = "--accordeon-height: " + accordeonPanel.scrollHeight + "px";
2) Використовуйте змінну CSS для розширення активного елемента
Далі використовуйте змінну CSS для встановлення max-height
значення, коли у елемента є .active
клас.
.section__accordeon__content.active {
max-height: var(--accordeon-height);
}
Заключний приклад
Отже, повний приклад виглядає так: спочатку проведіть цикл через усі панелі акордеона і зберігайте їх scrollHeight
значення у вигляді змінних CSS. Далі використовуйте змінну CSS якmax-height
значення активного / розширеного / відкритого стану елемента.
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);
}
І там у вас є. Адаптивна анімація максимальної висоти з використанням лише CSS та декількох рядків коду JavaScript (не потрібно jQuery).
Сподіваюсь, це допоможе комусь у майбутньому (або моєму майбутньому для довідок).
.scrollHeight
функція DOM не працюватиме в IE <8,0 ( developer.mozilla.org/en/DOM/element.scrollHeight )