نقاط التوقف في CSS
درس استعلامات الوسائط كيف يُفعَّل @media. ودرس الصور المتجاوبة كيف تملأ الصور الخانات التي تفتحها تلك الاستعلامات. نقاط التوقف هي الخطة: قائمة قصيرة من العروض التي يتغيّر عندها استراتيجية التخطيط — الأعمدة، التنقل، التباعد — تسمّيها مرة واحدة وتعيد استخدامها حتى يتحرّك الموقع كله بنفس الإيقاع.
صندوق أدوات نقاط التوقف
📊 نقاط التوقف بنظرة
| القطعة | المهمة اليومية |
|---|---|
| نقطة توقف | عرض مخطَّط له يتغيّر عنده قواعد التخطيط |
| اختيار مبني على المحتوى | اختر العرض حيث يبدو التصميم ضيقاً أو فارغاً — لا موديلات الهاتف |
خطوات مسماة (sm، md، lg…) |
نفس الرمز في كل مكان؛ مراجعة وتعاون أسهل |
| سلم mobile-first | الأساس = ضيق؛ خطوات min-width تضيف تحسينات |
| مرونة بين الخطوات | %، rem، Flex/Grid قبل إضافة استعلام جديد |
| مجموعة موثّقة | قائمة قصيرة في تعليقات أو tokens — لا عشرين قيمة عشوائية |
نقطة التوقف ليست «الآيفون». بل «عندما لا يعود الشريط الجانبي يلائم بجانب المقال» أو «عندما يمكن للتنقل أن يصبح صفاً». قِس المحتوى، ثم اكتب خطوة مشتركة واحدة.
المحتوى أولاً — لا فهرس أجهزة
صغّر نافذة المتصفّح حتى ينكسر شيء: سطر طويل جداً، بطاقات مضغوطة، قائمة همبرغر رغم وجود مساحة. سجّل ذلك العرض بـ rem (أو em). هذا أفضل من نسخ جدول تسويقي لبكسلات الهواتف.
/* 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 properties تحمل قيم العرض). كل مكوّن يبدأ «التخطيط العريض» يجب أن يستخدم نفس الرقم — لا 720px في الرأس و768px في الشبكة.
: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 properties كشرط في كل المتصفحات كما قد تتمنى — فعامل tokens في :root كـ توثيق ومساعدة للأدوات/JS، وابقِ القيم الحرفية المتطابقة متسقة. العادة المهمّة: سلم مشترك واحد، لا عروض عشوائية في كل ملف.
سلم mobile-first
اكتب الافتراضات الضيقة بدون استعلامات. كل خطوة min-width تضيف أعمدة، خطاً أكبر، أو تنقلاً أفقياً. تجنّب إعادة كتابة الصفحة كاملة في كل خطوة — غيّر طبقة واحدة واضحة.
.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);
}
}
ضبط desktop-first (عندما تبدأ من العريض)
إذا كان المشروع يُسلّم أصلاً تخطيطاً عريضاً، استعلامات max-width يمكن أن تطوي الأعمدة على الشاشات الأصغر. كن متسقاً: لا تخلط min-width وmax-width عشوائياً لنفس المكوّن بلا سبب.
.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)، حدّث التنقل والشبكة والتباعد معاً إن كانوا في فصل التخطيط نفسه. العروض المتفرقة «تقريباً نفسها» تسبّب أخطاء حيث ينقلب الرأس قبل الشبكة الرئيسية.
@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 يجب أن تستوعب تغيّرات العرض الصغيرة. أضف استعلاماً جديداً فقط عندما يلزم تغيير هيكلي (عدد أعمدة، نمط تنقل مختلف). المزيد من الاستعلامات لا يعني احترافية أكثر.
جرّب بنفسك
- غيّر حجم صفحة تدريبية واذكر عرضين يحتاج فيهما التخطيط فعلاً إلى تغيير.
- حوّل تلك العروض إلى
remوسمّها (md،lg). - طبّق نفس قيمتي
min-widthعلى شبكة البطاقات والتنقل. - ابحث في CSS عن أرقام
min-width/max-widthأخرى — ادمج المكرّرات القريبة. - احذف استعلاماً غير ضروري بتحسين الأساس المرن (gap،
minmax، wrapping).
أخطاء شائعة
- فهرس بعرض كل هاتف بدل نقاط ضغط المحتوى
- اثنا عشر استعلاماً متداخلاً بقيم بكسل مختلفة قليلاً
- الرأس ينكسر عند
768px، الرئيسي عند800px، التذييل عند720px - تخطّي CSS المرن وحل كل حركة بـ
@mediaجديد - إعادة تدريس أقواس
@mediaأوsrcsetهنا بدل تخطيط السلم
ملخص
- نقاط التوقف خطوات تخطيط مخطَّطة — سمِّ مجموعة قصيرة وأعد استخدامها
- اختر العروض من ضغط المحتوى، لا من جداول تسويق الأجهزة
- فضّل سلم
min-widthmobile-first؛ اتجاه واحد لكل مشروع - ابقَ مرناً بين الخطوات؛ استعلم فقط للتغييرات الهيكلية
- هذا يختتم وحدة Responsive — التالي: Box Shadow في Effects & Motion
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى