סקירה כללית
עיצוב שמותאם לגודל מאפשר לרכיבים לשנות את הפריסה או המראה שלהם בהתאם למקום שזמין להם, ולא בהתאם לגודל של המסך כולו. האפשרות הזו שימושית לרכיבים כמו כרטיסים או סרגלי ניווט שאפשר למקם בחלקים שונים של פריסה (כמו סרגל צד צר או אזור ראשי רחב).
מומלץ להשתמש בשאילתות קונטיינר כי הן הופכות את הרכיבים למודולריים באמת. אתם לא צריכים לדעת איפה הרכיב יופיע או לכתוב שאילתות מדיה מורכבות כדי לטפל בכל פריסה אפשרית.
הטמעה
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;
}
}
}
כך משתמשים בדפדפנים ישנים יותר עדיין יקבלו פריסה שמישה, גם אם היא לא מתאימה באופן מושלם לכל רוחב ספציפי של מאגר תגים.