এক নজরে
সাইজ-অ্যাওয়ার স্টাইলিংয়ের মাধ্যমে কম্পোনেন্টগুলি সম্পূর্ণ স্ক্রিনের সাইজের পরিবর্তে তাদের জন্য উপলভ্য স্পেসের উপর ভিত্তি করে তাদের লেআউট বা চেহারা পরিবর্তন করতে পারে। এটি কার্ড বা নেভিগেশন বারের মতো কম্পোনেন্টের জন্য উপযোগী যা লেআউটের বিভিন্ন অংশে (যেমন সরু সাইডবার বা চওড়া প্রধান এলাকা) রাখা হতে পারে।
কন্টেনার কোয়েরি ব্যবহার করার সাজেশন দেওয়া হয় কারণ এটি কম্পোনেন্টকে সত্যিকারের মডিউলার করে তোলে। কম্পোনেন্ট কোথায় থাকবে তা আপনাকে জানতে হবে না অথবা প্রতিটি সম্ভাব্য লেআউট ম্যানেজ করার জন্য জটিল মিডিয়া কোয়েরি লিখতে হবে না।
প্রয়োগ
১. কন্টেনার নির্ধারণ করুন
বাধ্যতামূলক: কোন এলিমেন্টটি পরিমাপ করার কন্টেনার তা আপনাকে প্রথমে ব্রাউজারকে জানাতে হবে।
.card-container {
/* Define the container type. Use 'inline-size' for width-based queries. */
/* You can also use 'size' for both width and height, but it requires explicit sizing. */
container-type: inline-size;
}
২. কন্টেনারের সাইজের উপর ভিত্তি করে স্টাইল প্রয়োগ করুন
কন্টেনার নির্দিষ্ট সাইজে পৌঁছালে স্টাইল প্রয়োগ করতে @container নিয়ম ব্যবহার করুন।
/* Default styles for small containers (stacked layout) */
.card {
display: flex;
flex-direction: column;
gap: 1rem;
}
/* Styles for larger containers (side-by-side layout) */
/* This triggers when the container is wider than 400px */
@container (min-width: 400px) {
.card {
flex-direction: row;
align-items: center;
}
.card-image {
width: 150px;
height: 150px;
}
}
৩. শর্তসাপেক্ষে কন্টেন্ট দেখান
এছাড়াও, আরও জায়গা থাকলে অতিরিক্ত বিবরণ লুকানো বা দেখানোর জন্য আপনি কন্টেনার কোয়েরি ব্যবহার করতে পারেন।
.card-details {
/* Hide extra details by default in small spaces */
display: none;
}
@container (min-width: 600px) {
.card-details {
/* Show details when there is plenty of room */
display: block;
}
}
ফলব্যাক স্ট্র্যাটেজি
যেসব ব্রাউজার কন্টেনার কোয়েরি সাপোর্ট করে না, সেগুলির ক্ষেত্রে সবচেয়ে ভালো উপায় হল নিরাপদ ডিফল্ট লেআউট (যেমন, স্ট্যাক করা উল্লম্ব লেআউট) ব্যবহার করা এবং সাধারণ স্ক্রিন সাইজ অনুমতি দিলে মিডিয়া কোয়েরি ব্যবহার করে ধীরে ধীরে এটিকে উন্নত করা।
/* Default safe stacked layout */
.card {
display: flex;
flex-direction: column;
}
/* Fallback using media queries for older browsers */
@media (min-width: 600px) {
.card {
flex-direction: row;
}
}
/* Overwrite with container queries where supported */
@supports (container-type: inline-size) {
@media (min-width: 600px) {
.card {
/* Reset media query fallback if needed, or let container query handle it */
flex-direction: column;
}
}
@container (min-width: 400px) {
.card {
flex-direction: row;
}
}
}
এর ফলে পুরনো ব্রাউজার ব্যবহারকারীরাও ব্যবহারযোগ্য লেআউট দেখতে পান, যদিও তা প্রতিটি নির্দিষ্ট কন্টেনারের প্রস্থের সাথে নিখুঁতভাবে মানানসই হয় না।