المحددات (Selectors) — تصميم CSS
المحددات (Selectors)
المحدد يجيب عن سؤال: أي العناصر تتأثر بهذه القاعدة؟
المحددات الأساسية
p { color: #333; } /* كل الفقرات */
.card { padding: 16px; } /* كل عنصر فيه class="card" */
#site-header { height: 64px; } /* العنصر الذي id="site-header" */
* { box-sizing: border-box; } /* كل العناصر */<header id="site-header">...</header>
<div class="card featured">بطاقة لها صنفان</div>- العنصر يمكن أن يحمل عدة أصناف مفصولة بمسافة.
- الـ id فريد في الصفحة. للتنسيق فضّل الأصناف دائماً: قابلة لإعادة الاستخدام، وأولويتها أقل (لن تحتاج لاحقاً قواعد أقوى لتغلبها).
التجميع والدمج
h1, h2, h3 { font-family: "Cairo", sans-serif; } /* تجميع: قاعدة لعدة محددات */
.card.featured { border-color: gold; } /* دمج: عنصر فيه الصنفان معاً */
button.primary { background: navy; } /* زر فيه الصنف primary */لاحظ الفرق: .card.featured (بلا مسافة) عنصر واحد له الصنفان، أما .card .featured (بمسافة) فعنصر featured داخل card.
علاقات العناصر (Combinators)
| المحدد | يطابق |
|---|---|
| nav a | كل a داخل nav (بأي عمق) |
| ul > li | li ابن مباشر لـ ul فقط |
| h2 + p | أول p يأتي مباشرة بعد h2 |
| h2 ~ p | كل p يأتي بعد h2 بنفس المستوى |
.menu > li { display: inline-block; } /* المستوى الأول فقط، لا القوائم الفرعية */
h2 + p { font-size: 1.1em; } /* الفقرة الافتتاحية بعد كل عنوان */محددات الخصائص
a[target="_blank"] { padding-inline-end: 16px; } /* روابط تفتح تبويباً جديداً */
input[type="email"] { direction: ltr; } /* البريد يُكتب من اليسار */
a[href^="https"] { color: green; } /* يبدأ بـ */
a[href$=".pdf"] { font-weight: bold; } /* ينتهي بـ */نصائح للتسمية
- سمِّ الأصناف حسب الدور لا الشكل: .btn-danger أفضل من .red-button (ماذا لو صار برتقالياً؟).
- تجنب المحددات الطويلة جداً مثل body div.main ul li a: هشّة (تنكسر عند تغيير HTML) وصعبة الغلبة. صنف واحد على العنصر غالباً أوضح.
تمرين
في صفحتك الشخصية: لوّن روابط القائمة فقط (nav a)، واجعل أول فقرة بعد كل h2 أكبر قليلاً، وأضف صنفاً .highlight لبطاقة مشروع مميزة بحدود ذهبية.
/* محدد العنصر */
p {
color: gray;
}
/* محدد الـ Class - نقطة + اسم */
.card {
border: 1px solid #ddd;
border-radius: 8px;
padding: 20px;
}
/* محدد الـ ID - # + اسم */
#header {
background: linear-gradient(45deg, #667eea, #764ba2);
color: white;
}
/* المحدد العام */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* محددات مركبة */
div.container {
max-width: 1200px;
margin: 0 auto;
}
/* المحدد التنازلي */
nav ul li a {
text-decoration: none;
}اختبر فهمك