Tôi vừa mới đưa ra một giải pháp khác cho vấn đề này, trong đó không còn cần thiết phải sử dụng giá trị từ cao đến cực đại. Nó cần một vài dòng mã javascript để tính chiều cao bên trong của DIV bị sập nhưng sau đó, tất cả là CSS.
1) Tìm nạp và thiết lập chiều cao
Lấy chiều cao bên trong của phần tử bị sập (sử dụng scrollHeight
). Phần tử của tôi có một lớp .section__accordeon__content
và tôi thực sự chạy nó trong một forEach()
vòng lặp để đặt chiều cao cho tất cả các bảng, nhưng bạn có ý tưởng.
document.querySelectorAll( '.section__accordeon__content' ).style.cssText = "--accordeon-height: " + accordeonPanel.scrollHeight + "px";
2) Sử dụng biến CSS để mở rộng mục hoạt động
Tiếp theo, sử dụng biến CSS để đặt max-height
giá trị khi mục có một .active
lớp.
.section__accordeon__content.active {
max-height: var(--accordeon-height);
}
Ví dụ cuối cùng
Vì vậy, ví dụ đầy đủ diễn ra như sau: vòng lặp đầu tiên thông qua tất cả các bảng accordeon và lưu trữ các scrollHeight
giá trị của chúng dưới dạng các biến CSS. Tiếp theo sử dụng biến CSS làmmax-height
giá trị ở trạng thái kích hoạt / mở rộng / mở của phần tử.
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);
}
Và bạn có nó rồi đấy! Một hình ảnh động có chiều cao tối đa thích ứng chỉ sử dụng CSS và một vài dòng mã JavaScript (không yêu cầu jQuery).
Hy vọng điều này sẽ giúp ai đó trong tương lai (hoặc bản thân tương lai của tôi để tham khảo).
.scrollHeight
chức năng DOM sẽ không hoạt động trong IE <8.0 ( developer.mozilla.org/en/DOM/element.scrollHeight )