ما هو محدد CSS
المحدد هو الجزء من القاعدة الذي يسبق الأقواس المعقوصة. يقرر العناصر التي تنطبق عليها التصريحات.
p.note { color: #2563eb; }
/* selector: p.note declaration: color: #2563eb */
المحددات الأساسية الخمسة تغطي معظم ملفات الأنماط الحقيقية:
أنواع المحددات بنظرة سريعة
| المحدد | مثال | ما يطابقه |
|---|---|---|
| العام | * | كل عنصر |
| النوع | p | كل <p> |
| الفئة | .tip | العناصر التي تحمل class="tip" (ضمن فئات أخرى) |
| المعرّف ID | #main-title | العنصر الذي يحمل id="main-title" |
| السمة | [type="email"] | العناصر التي تطابق سمتها |
| الفئة الزائفة | a:hover، li:first-child | العناصر في حالة أو موضع معيّن |
| العنصر الزائف | p::first-line، .x::before | جزء من عنصر |
| المجموعة | h1, h2, h3 | أي عنصر يطابق أحد عناصر القائمة |
| المركّب | p.tip | عنصر <p> يحمل الفئة أيضًا |
للفئات والمعرّفات صفحتها الخاصة، محدد الفئة في CSS. والفئات الزائفة مثل :nth-child() و:not() مشروحة في صفحة الفئات الزائفة.
المُركِّبات: السليل مقابل الابن
المُركِّب (combinator) يربط محددين حسب علاقتهما في شجرة HTML. هناك أربعة منها.
| المُركِّب | الصيغة | يطابق B حين |
|---|---|---|
| السليل | A B (مسافة) | يكون B في أي مكان داخل A |
| الابن | A > B | يكون أبو B هو A |
| الأخ المجاور | A + B | يأتي B مباشرة بعد A، تحت الأب نفسه |
| الأخ العام | A ~ B | يأتي B في مكان ما بعد A، تحت الأب نفسه |
المسافة و> هما الزوج الذي يخلط الناس بينهما. محدد السليل يصل إلى أي عمق، أما محدد الابن فيتوقف عند مستوى واحد:
مُركِّبا الإخوة: + و~
الإخوة ينظرون إلى الأمام فقط. لا يوجد مُركِّب «الأخ السابق»، لكن :has() تستطيع التعبير عنه: h2:has(+ p) يطابق h2 يليه مباشرة p.
محددات السمات
الأقواس المربعة تطابق حسب السمات وقيمها:
| المحدد | ما يطابقه |
|---|---|
[disabled] | يملك السمة، بأي قيمة |
[type="email"] | القيمة هي email تمامًا |
[href^="https"] | القيمة تبدأ بـ https |
[href$=".pdf"] | القيمة تنتهي بـ .pdf |
[class*="icon"] | القيمة تحتوي على icon في أي موضع |
[lang|="en"] | القيمة هي en أو تبدأ بـ en- |
[data-state="open" i] | مطابقة تامة مع تجاهل حالة الأحرف |
محددات السمات على سمات data-* طريقة نظيفة لتنسيق الحالة التي يضبطها JavaScript، من دون اختراع أسماء فئات.
جرّب أي محدد
اكتب محددًا في المربع. كل عنصر يطابقه يحصل على إطار كهرماني، ويظهر العدد في الأسفل.
جرّب #demo a وul > li وh2 ~ * وa[href^="https"] وli:not(.active).
المركّب مقابل السليل: المسافة مهمة
p.note وp .note تختلفان بمسافة واحدة وتعنيان شيئين مختلفين.
كيف تقرأ المتصفحات المحددات
حين تطابق عدة قواعد العنصر نفسه وتضبط الخاصية نفسها، يفوز المحدد الأكثر خصوصية، وعند التعادل يفوز اللاحق. المعرّف يرجح على أي عدد من الفئات، والفئة ترجح على أي عدد من محددات النوع؛ وفي صفحة !important جدول الخصوصية الكامل.
للمجموعة مشكلة واحدة: إذا كان أي محدد في قائمة عادية غير صالح، تُسقط القاعدة كلها. في a, b:unknown { } لا تُنسق حتى الروابط. إحاطة القائمة بـ :is() تجعلها متسامحة، فيبقى :is(a, b:unknown) ينسق الروابط.
أخطاء شائعة
- نسيان النقطة أو علامة #. يستهدف
tip { }عنصر<tip>، لاclass="tip". اكتب.tip. - مسافة داخل محدد مركّب.
p .noteليسp.note. - توقع أن يصل
>إلى الأحفاد. استخدم المسافة لأي عمق. - خطأ مطبعي واحد يفسد مجموعة كاملة. في
h1, h2:hovr, h3لا يُنسق شيء. - محددات طويلة جدًا.
body div.wrapper ul li aصعب القراءة وصعب التجاوز. فئة واحدة تكفي عادةً.
الأسئلة الشائعة
ما هو المحدد في CSS؟
الجزء من قاعدة CSS الذي يسبق { ويحدد العناصر التي تنطبق عليها التصريحات. في p.note { color: blue; } يطابق المحدد p.note كل <p> يحمل الفئة note.
ما الفرق بين المسافة و> في محدد CSS؟
المسافة هي مُركِّب السليل: nav a يطابق كل رابط في أي مكان داخل nav وعلى أي عمق. أما > فهو مُركِّب الابن: nav > a يطابق فقط الروابط التي أبوها المباشر هو nav.
ماذا تعني + في CSS؟
+ هو مُركِّب الأخ المجاور. h2 + p يطابق عنصر <p> يأتي مباشرة بعد <h2> تحت الأب نفسه. أما ~ فأوسع: h2 ~ p يطابق كل أخ <p> لاحق.
كيف أختار العناصر حسب السمة في CSS؟
ضع السمة بين قوسين مربعين: [disabled] يطابق العناصر التي تملكها، و[type="email"] يطابق قيمة مطابقة تمامًا، و[href^="https"] قيمة تبدأ بنص معيّن، و[href$=".pdf"] قيمة تنتهي به، و[class*="btn"] قيمة تحتويه.
هل يمكن لـ CSS اختيار العنصر الأب؟
نعم، عبر الفئة الزائفة :has() المدعومة في الإصدارات الحالية من Chrome وFirefox وSafari. li:has(> a.active) يطابق عناصر القائمة التي تحتوي مباشرة على رابط نشط.