محدد الفئة
محدد الفئة نقطة يليها اسم الفئة. ينسق كل عنصر تحتوي سمته class على ذلك الاسم، مهما كان نوع العنصر.
النقطة تظهر في CSS فقط. في HTML تكون السمة class="badge" من دون نقطة. أسماء الفئات حساسة لحالة الأحرف: .Badge لا يطابق class="badge".
عدة فئات على عنصر واحد
يمكن للعنصر أن يحمل أي عدد من الفئات، مفصولة بمسافات. كل فئة تجلب قواعدها الخاصة، وهكذا تبني أشكالًا مختلفة من قطع صغيرة:
.btn.danger، من دون مسافة، يطابق العناصر التي تحمل الفئتين معًا. عنصر span الأخير يحمل danger لكن لا يحمل btn، لذلك تتخطاه القاعدة المتسلسلة.
أشكال محدد الفئة
| المحدد | ما يطابقه |
|---|---|
.note | أي عنصر يحمل الفئة note |
p.note | عناصر <p> فقط التي تحمل الفئة note |
.btn.primary | العناصر التي تحمل btn وprimary معًا |
.card .title | عنصر .title في أي مكان داخل .card |
.card > .title | عنصر .title أبوه .card |
.a, .b | العناصر التي تحمل a أو b |
الفرق بين وجود المسافة وغيابها مشروح مع مُركِّبات أخرى في صفحة المحددات في CSS.
محدد المعرّف
محدد المعرّف علامة # يليها الـ id: #site-header ينسق العنصر الذي يحمل id="site-header". يجب أن يكون الـ id فريدًا في الصفحة، لذلك يستهدف محدد المعرّف عنصرًا واحدًا بالضبط.
المعرّفات تفعل أكثر من التنسيق: href="#details" ينقل الصفحة إلى العنصر، و<label for="email"> يشير إلى id حقل الإدخال، وJavaScript يجده عبر document.getElementById('details'). هذا هو السبب المعتاد لإعطاء عنصر id؛ أما للتنسيق فالفئة هي الأداة الأفضل.
الفرق بين class وid
الفئة .name | المعرّف #name | |
|---|---|---|
| في الصفحة | عناصر كثيرة | عنصر واحد |
| لكل عنصر | عدة فئات مفصولة بمسافات | واحد |
| الخصوصية | (0,1,0) | (1,0,0) |
هدف رابط (#name في العنوان) | لا | نعم |
| الأنسب لـ | التنسيق | المراسي، والتسميات، ونقاط ربط JavaScript |
فجوة الخصوصية هي السبب العملي للتنسيق بالفئات. معرّف واحد يتغلب على أي عدد من الفئات، لذلك لا يمكن تجاوز قاعدة مكتوبة بمعرّف إلا بمعرّف آخر أو بنمط مضمّن أو بـ !important:
إضافة الفئات وإزالتها بـ JavaScript
الفئات هي الطريقة المعتادة كي يغيّر JavaScript مظهر شيء ما: CSS تعرّف الحالات، والسكربت يبدّل بينها فقط.
يوفر classList أيضًا add وremove وcontains وreplace. تجنب إسناد قيمة إلى className مباشرة: فهي تستبدل كل الفئات التي كان يحملها العنصر.
تسمية الفئات
- الحروف والأرقام والشرطات والشرطات السفلية آمنة:
card،card-title،card__title،is-open. - لا تبدأ المحدد برقم أو بشرطة يليها رقم.
.2colغير صالح في CSS. ابدأ بحرف (.cols-2) أو هرّب الرقم (.\32 col). - سمِّ حسب الغرض لا حسب الشكل:
.errorتصمد أمام إعادة التصميم، و.red-textلا تصمد. - اتفاقية تسمية تساعد في المشاريع الأكبر. تكتب BEM الشكل
block__element--modifier، مثلًا.card__title--large.
أخطاء شائعة
- وضع النقطة في HTML.
class=".badge"لا يطابق.badgeأبدًا. - سمتا
class.<p class="a" class="b">يحتفظ بـaفقط. استخدمclass="a b". - مسافة حين تقصد الفئتين معًا.
.btn .primaryيبحث عن عنصر متداخل؛ أما.btn.primaryفهو العنصر نفسه. - تكرار id. المعرّفات المكررة تُفسد
getElementByIdوروابط المراسي وربط التسميات، حتى لو بدت CSS تعمل. - تنسيق كل شيء بالمعرّفات. خصوصيتها تجعل التجاوزات اللاحقة مرهقة؛ استخدم الفئات.
الأسئلة الشائعة
كيف أختار فئة class في CSS؟
اكتب نقطة يليها اسم الفئة: .card { ... } ينسق كل عنصر يحمل class="card". النقطة موجودة في CSS فقط؛ سمة HTML لا تحتوي على نقطة.
ما الفرق بين class وid في CSS؟
يمكن استخدام الفئة على أي عدد من العناصر، ويمكن للعنصر أن يحمل عدة فئات؛ أما الـ id فيجب أن يكون فريدًا في الصفحة، وللعنصر id واحد على الأكثر. في CSS خصوصية #id أعلى بكثير من .class، لذلك يصعب تجاوز قواعد المعرّف.
كيف أعطي عنصرًا فئتين؟
افصل بين الاسمين بمسافة داخل سمة واحدة: class="btn primary". كتابة class مرتين على العنصر لا تعمل؛ يحتفظ المتصفح بالسمة الأولى فقط.
كيف أختار عنصرًا يحمل فئتين؟
اربط محددي الفئتين من دون مسافة: .btn.primary يطابق العناصر التي تحمل الفئتين معًا. ومع المسافة، .btn .primary تعني عنصر .primary داخل عنصر .btn.
هل يمكن أن يبدأ اسم الفئة في CSS برقم؟
في HTML نعم، لكن المحدد لا يمكن أن يبدأ برقم غير مُهرَّب، فـ .1col غير صالح في CSS. هرّب الرقم (.\31 col) أو، وهو الأفضل، ابدأ أسماء الفئات بحرف.