در حال بارگذاری...

نقاط شکست در CSS

مدیا کوئری یاد داد @media چطور روشن می‌شود. تصویر واکنش‌گرا گفت عکس چطور داخل همان slot جا می‌گیرد. نقطهٔ شکست همان برنامه است: چند عرض کوتاه که در آن‌ها استراتژی چیدمان عوض می‌شود — ستون، منو، فاصله — یک‌بار نام می‌گذارید و همه‌جا همان را تکرار می‌کنید تا سایت هم‌قدم حرکت کند.

جعبهٔ ابزار نقطهٔ شکست

📊 نقطهٔ شکست یک‌نگاه

قطعه کار روزمره
نقطهٔ شکست عرضی برنامه‌ریزی‌شده که قانون چیدمان عوض می‌شود
انتخاب بر اساس محتوا جایی که طراحی تنگ یا خلوت می‌شود — نه مدل گوشی
گام نام‌دار (sm، md، lg…) همان توکن همه‌جا؛ بازبینی و کار تیمی ساده‌تر
نردبان موبایل‌اول پایه = باریک؛ min-width قابلیت اضافه می‌کند
سیال بین گام‌ها %، rem، Flex/Grid قبل از کوئری تازه
فهرست مستند یک لیست کوتاه در کامنت یا توکن — نه بیست عدد پراکنده

نقطهٔ شکست یعنی «آیفون» نیست. یعنی «وقتی سایدبار کنار مقاله جا نمی‌شود» یا «وقتی منو می‌تواند ردیف شود». محتوا را ببینید؛ بعد یک گام مشترک بنویسید.

اول محتوا — نه کاتالوگ دستگاه

پنجره را بکشید تا چیزی بشکند: سطر خیلی بلند، کارت له، همبرگر وقتی هنوز جا هست. همان عرض را با rem (یا em) یادداشت کنید. این نامزد بهتر از کپی جدول پیکسل گوشی‌هاست.

تصمیم را کامنت کنید، نه دستگاه را

css
/* Break when article + sidebar need two columns (~48rem content width) */
@media (min-width: 48rem) {
.layout {
display: grid;
grid-template-columns: 1fr 16rem;
gap: 1.5rem;
}
}

فهرست دستگاه‌به‌دستگاه زود کهنه می‌شود — هر سال گوشی تازه می‌آید. چند گام بر اساس محتوا بیشتر دوام می‌آورد و stylesheet خواناتر می‌ماند.

گام‌ها را نام بگذارید — همان عرض را دوباره استفاده کنید

برای سایت معمول دو تا چهار گام کافی است. در کامنت (یا با custom property برای مقدار عرض) اسم کوتاه بگذارید. هر کامپوننتی که «چیدمان عریض» را شروع می‌کند باید همان عدد را بگیرد — نه 720px در هدر و 768px در grid.

توکن‌های نام‌دار breakpoint (custom properties)

css
:root {
--bp-md: 40rem;
--bp-lg: 64rem;
}

/* Usage still needs a literal in @media in classic CSS —
keep tokens and queries in sync, or use a preprocessor/build step. */
@media (min-width: 40rem) {
.card-grid {
grid-template-columns: repeat(2, 1fr);
}
}

@media (min-width: 64rem) {
.card-grid {
grid-template-columns: repeat(3, 1fr);
}
}

در CSS کلاسیک، @media همه‌جا نمی‌تواند مثل یک متغیر ساده از custom property به‌عنوان شرط بخواند — پس توکن‌های :root بیشتر مستندسازی و کمک toolingاند؛ literalهای هم‌خوان را هم‌قدم نگه دارید. عادت مهم: یک نردبان مشترک، نه عرض تصادفی در هر فایل.

نردبان موبایل‌اول

پیش‌فرض باریک را بدون کوئری بنویسید. هر گام min-width ستون، تایپ بزرگ‌تر، یا منوی افقی اضافه می‌کند. کل صفحه را در هر گام از نو ننویسید — یک لایهٔ روشن را عوض کنید.

نردبان سه‌گامهٔ موبایل‌اول

css
.nav {
display: flex;
flex-direction: column;
gap: 0.5rem;
}

.card-grid {
display: grid;
grid-template-columns: 1fr;
gap: 1rem;
}

@media (min-width: 40rem) {
.card-grid {
grid-template-columns: repeat(2, 1fr);
}
}

@media (min-width: 64rem) {
.nav {
flex-direction: row;
align-items: center;
gap: 1.5rem;
}

.card-grid {
grid-template-columns: repeat(3, 1fr);
}
}

تنگ کردن دسکتاپ‌اول (وقتی از عریض شروع می‌کنید)

اگر پروژه از قبل layout عریض دارد، کوئری max-width می‌تواند ستون را روی صفحهٔ کوچک جمع کند. یکدست بمانید: برای یک کامپوننت بی‌دلیل min-width و max-width را قاطی نکنید.

تنگ کردن دسکتاپ‌اول در یک گام

css
.sidebar {
width: 18rem;
float: left;
margin-right: 1.5rem;
}

@media (max-width: 39.99rem) {
.sidebar {
float: none;
width: auto;
margin-right: 0;
}
}

ترجیح این است هر پروژه یک جهت داشته باشد. درس Media Queries نحو min-width و max-width را گفت — اینجا قانون استراتژی است: گام مشترک، همان فلسفه همه‌جا.

یک گام، چند کامپوننت

وقتی --bp-lg (یا 64rem) روشن شد، اگر منو و grid و فاصله مال یک فصل چیدمان‌اند، با هم عوضشان کنید. عرض‌های «تقریباً یکی» باگ می‌سازند: هدر زودتر از grid اصلی می‌پرد.

گام بزرگ مشترک برای nav و main

css
@media (min-width: 64rem) {
.site-header {
display: flex;
justify-content: space-between;
align-items: center;
}

.main {
display: grid;
grid-template-columns: minmax(0, 1fr) 18rem;
gap: 2rem;
}
}

اول سیال — بعد کوئری

بین نقاط شکست، Flex و Grid و % و rem باید تغییر عرض کوچک را تحمل کنند. کوئری تازه فقط وقتی ساختار باید عوض شود (تعداد ستون، الگوی منو). کوئری بیشتر = حرفه‌ای‌تر نیست.

خودتان امتحان کنید

  1. یک صفحهٔ تمرینی را resize کنید و دو عرضی را بنویسید که واقعاً چیدمان باید عوض شود.
  2. همان عرض‌ها را به rem تبدیل کنید و نام بگذارید (md، lg).
  3. همان دو min-width را هم روی grid کارت و هم روی منو بگذارید.
  4. در CSS بگردید دنبال عددهای دیگر min-width/max-width — نزدیک‌ها را یکی کنید.
  5. با بهتر کردن پایهٔ سیال (gap، minmax، wrap) یک کوئری اضافه را حذف کنید.

اشتباه‌های رایج

  • کاتالوگ عرض هر گوشی به‌جای نقاط درد محتوا
  • دوازده کوئری روی‌هم با پیکسل‌های کمی فرق
  • هدر در 768px، main در 800px، فوتر در 720px
  • رد کردن CSS سیال و حل هر تکان با یک @media تازه
  • دوباره درس دادن آکولاد @media یا srcset اینجا به‌جای برنامه‌ریزی نردبان

جمع‌بندی

  • نقطهٔ شکست = گام برنامه‌ریزی‌شدهٔ چیدمان — چند تا نام بگذارید و تکرار کنید
  • عرض را از فشار محتوا بگیرید، نه از جدول بازاریابی دستگاه
  • نردبان min-width موبایل‌اول را ترجیح دهید؛ هر پروژه یک جهت
  • بین گام‌ها سیال بمانید؛ کوئری فقط برای تغییر ساختاری
  • این پایان ماژول Responsive است — بعد: Box Shadow در Effects & Motion

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
8
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود