نظرة عامة
يتيح التصميم المستند إلى الحجم للمكوّنات تغيير تنسيقها أو مظهرها استنادًا إلى المساحة المتاحة لها، بدلاً من حجم الشاشة بأكملها. ويُعدّ ذلك مفيدًا لمكوّنات مثل البطاقات أو أشرطة التنقّل التي قد يتم وضعها في أجزاء مختلفة من التنسيق (مثل شريط جانبي ضيق أو مساحة رئيسية واسعة).
ننصح باستخدام طلبات البحث عن الحاويات لأنّها تجعل المكوّنات قابلة للتعديل بشكل كبير. لست بحاجة إلى معرفة مكان المكوّن أو كتابة استعلامات معقّدة عن الوسائط للتعامل مع كل تنسيق ممكن.
التنفيذ
1. تحديد الحاوية
إجراء إلزامي: عليك أولاً إعلام المتصفّح بالعنصر الذي يمثّل الحاوية المطلوب قياسها.
.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;
}
2. تطبيق الأنماط استنادًا إلى حجم الحاوية
استخدِم القاعدة @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;
}
}
3- عرض المحتوى بشكل مشروط
يمكنك أيضًا استخدام طلبات البحث عن الحاوية لإخفاء التفاصيل الإضافية أو إظهارها عندما تكون هناك مساحة أكبر.
.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;
}
}
}
يضمن ذلك أن يحصل المستخدمون على المتصفحات القديمة على تنسيق قابل للاستخدام، حتى لو لم يتكيف بشكل مثالي مع كل عرض حاوية محدد.