ฉันเพิ่งปรุงสารละลายอื่นสำหรับสิ่งนี้ซึ่งไม่จำเป็นต้องใช้ค่ามากถึงสูงสูงสุดอีกต่อไป มันต้องการโค้ดจาวาสคริปต์สองสามบรรทัดเพื่อคำนวณความสูงภายในของ DIV ที่ยุบลง แต่หลังจากนั้นก็คือ 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 )