Menu
flag Ar iconالعربيةdown icon

المحددات في CSS: الأنواع والمُركِّبات ومحددات السمات

محدد CSS يختار العناصر التي تنسقها القاعدة. تعلّم كل أنواع المحددات، والمُركِّبات الأربعة (السليل، الابن، الأخ المجاور، الأخ العام)، ومحددات السمات، والتجميع، وجرّب المحددات مباشرة.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

ما هو محدد 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) يطابق عناصر القائمة التي تحتوي مباشرة على رابط نشط.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن