سبک‌پردازی آگاه از اندازه

نمای کلی

سبک‌بندی حساس به اندازه به مؤلفه‌ها امکان می‌دهد چیدمان یا ظاهرشان را براساس فضای دردسترسشان تغییر دهند، نه براساس اندازه کل صفحه‌نمایش. این ویژگی برای مؤلفه‌هایی مانند کارت‌ها یا نوارهای پیمایش که ممکن است در بخش‌های مختلف چیدمان (مانند نوار کناری باریک یا ناحیه اصلی عریض) قرار گیرند مفید است.

استفاده از پُرسمان‌های محفظه توصیه می‌شود زیرا باعث می‌شود مؤلفه‌ها واقعاً پیمانه‌ای شوند. لازم نیست بدانید که مؤلفه کجا قرار خواهد گرفت یا پرسمان‌های رسانه‌ای پیچیده بنویسید تا هر چیدمان ممکن را مدیریت کنید.

پیاده‌سازی

۱. تعریف کردن محتوا

اجباری: ابتدا باید به مرورگر بگویید کدام عنصر محتوی‌ای است که باید اندازه‌گیری شود.

.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;
    }
  }
}

این کار تضمین می‌کند که کاربران در مرورگرهای قدیمی‌تر همچنان چیدمان قابل‌استفاده‌ای دریافت کنند، حتی اگر کاملاً با هر عرض محفظه خاصی سازگار نباشد.