আমি এর জন্য আরও একটি সমাধান প্রস্তুত করেছি, যেখানে উচ্চ-সর্বাধিক উচ্চতার মানটি ব্যবহার করার দরকার নেই। ধসে পড়া ডিআইভি-র অভ্যন্তরীণ উচ্চতা গণনা করার জন্য জাভাস্ক্রিপ্ট কোডের কয়েকটি লাইনের প্রয়োজন তবে এর পরে এটি সমস্ত সিএসএস।
1) আনয়ন এবং উচ্চতা নির্ধারণ
ধসে পড়া উপাদানটির অভ্যন্তরের উচ্চতা আনুন (ব্যবহার করে scrollHeight)। আমার উপাদানটির একটি বর্গ রয়েছে .section__accordeon__contentএবং আমি forEach()সমস্ত প্যানেলের উচ্চতা নির্ধারণ করতে এটি একটি লুপে চালিত করি তবে আপনি ধারণাটি পাবেন।
document.querySelectorAll( '.section__accordeon__content' ).style.cssText = "--accordeon-height: " + accordeonPanel.scrollHeight + "px";
2) সক্রিয় আইটেমটি প্রসারিত করতে CSS ভেরিয়েবল ব্যবহার করুন
এরপরে, max-heightআইটেমটির একটি .activeশ্রেণি থাকে যখন মান সেট করতে সিএসএস ভেরিয়েবল ব্যবহার করুন ।
.section__accordeon__content.active {
max-height: var(--accordeon-height);
}
চূড়ান্ত উদাহরণ
সুতরাং সম্পূর্ণ উদাহরণটি এর মতো হয়: সমস্ত অ্যাকডিয়ন প্যানেলগুলির মধ্যে প্রথমে লুপ করুন এবং scrollHeightসিএসএস ভেরিয়েবল হিসাবে তাদের মানগুলি সংরক্ষণ করুন । এরপরে max-heightউপাদানটির সক্রিয় / প্রসারিত / উন্মুক্ত স্থানে মান হিসাবে সিএসএস ভেরিয়েবল ব্যবহার করুন ।
javascript:
document.querySelectorAll( '.section__accordeon__content' ).forEach(
function( accordeonPanel ) {
accordeonPanel.style.cssText = "--accordeon-height: " + accordeonPanel.scrollHeight + "px";
}
);
সিএসএস:
.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);
}
এবং সেখানে আপনি এটা আছে। কেবল সিএসএস এবং জাভাস্ক্রিপ্ট কোডের কয়েকটি লাইন (কোনও জিকুয়ের প্রয়োজন নেই) ব্যবহার করে একটি অভিযোজিত সর্বোচ্চ-উচ্চতা অ্যানিমেশন।
আশা করি এটি ভবিষ্যতে কাউকে সহায়তা করবে (বা রেফারেন্সের জন্য আমার ভবিষ্যত স্ব)।
.scrollHeightকরে DOM ফাংশন ইন্টারনেট <8.0 (কাজ করবে না developer.mozilla.org/en/DOM/element.scrollHeight )