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

الفئات الزائفة pseudo-classes في CSS: nth-child وnot وfocus

الفئات الزائفة تختار العناصر حسب موضعها أو حالتها: :nth-child() و:first-child و:not() و:focus و:checked و:has() وغيرها. تعلّم الصيغة، ومعادلة an+b مع أداة تجربة مباشرة، والفرق بين nth-child وnth-of-type.

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

ما هي الفئة الزائفة

الفئة الزائفة (pseudo-class) كلمة مفتاحية بعد نقطتين رأسيتين تختار العناصر حسب موضعها في المستند أو حالتها. تلحقها بمحدد عادي: li:first-child، input:focus، a:hover.

لفئات الحالة الخاصة بالروابط والفأرة (:hover و:active و:visited) صفحتها الخاصة، hover في CSS.

:nth-child() ومعادلة an+b

يقبل :nth-child() رقمًا أو كلمة مفتاحية أو معادلة an+b. يجرّب المتصفح n = 0، 1، 2، ... ويطابق كل موضع تنتجه المعادلة (المواضع تبدأ من 1).

المعادلةالمواضع المطابقةالمعنى
33الابن الثالث
odd أو 2n+11، 3، 5، ...الصفوف الفردية
even أو 2n2، 4، 6، ...الصفوف الزوجية
3n3، 6، 9، ...كل ثالث
n+44، 5، 6، ...الرابع وما بعده
-n+31، 2، 3الثلاثة الأولى
3n+11، 4، 7، ...كل ثالث بدءًا من الأول

اكتب معادلة وراقب العناصر التي تطابقها:

جرّب odd وeven و4 وn+7 و-n+5 و2n+3. المعادلة غير الصالحة لا تطابق شيئًا.

توأمها الذي يعدّ من النهاية هو :nth-last-child(): li:nth-last-child(-n+2) يختار العنصرين الأخيرين.

الفرق بين nth-child وnth-of-type

يعدّ :nth-child() كل العناصر الإخوة مهما كان وسمها، وبعد ذلك فقط يتحقق من باقي المحدد. أما :nth-of-type() فيعدّ الإخوة من الوسم نفسه فقط. يظهر الفرق بمجرد أن يختلط الإخوة:

توجد الأزواج نفسها للأطراف: :first-child و:first-of-type، و:last-child و:last-of-type، و:only-child و:only-of-type.

:not() و:is() و:where()

الفئة الزائفةمثالما تطابقه
:not(X)li:not(.done)العناصر التي لا تطابق X
:is(X, Y):is(h1, h2, h3) aالعناصر التي تطابق أيًا من القائمة
:where(X, Y):where(ul, ol) liمثل :is() لكن بخصوصية صفر
:has(X)li:has(> input:checked)العناصر التي تحتوي على ما يطابق X

:not() هي المستخدمة كل يوم، مثلًا لوضع فاصل بين العناصر لكن ليس بعد الأخير:

فئات الحالة: focus وchecked وdisabled وinvalid

الفئة الزائفةما تطابقه
:focusالعنصر الذي عليه تركيز لوحة المفاتيح أو الفأرة
:focus-visibleعنصر مُركَّز يقرر المتصفح إظهار حلقة التركيز له (عادةً تركيز لوحة المفاتيح)
:focus-withinعنصر يحتوي على العنصر المُركَّز
:checkedمربع اختيار أو زر راديو محدد، أو <option> مختار
:disabled / :enabledعناصر النموذج المعطلة (أو غير المعطلة)
:required / :optionalحقول الإدخال مع required أو من دونها
:invalid / :validحقول الإدخال التي تفشل قيمتها في التحقق أو تنجح
:user-invalidغير صالح، لكن فقط بعد أن يتفاعل المستخدم معه
:placeholder-shownحقل إدخال يعرض نصه التوضيحي حاليًا
:emptyعنصر بلا أبناء، ولا حتى نص
:targetالعنصر الذي يطابق الـ id الخاص به #fragment في العنوان

انقر داخل حقل البريد الإلكتروني: تتحول تسميته إلى الأزرق عبر :focus-within. اكتب شيئًا ليس بريدًا إلكترونيًا واترك الحقل: تحوّل :user-invalid الحد إلى الكهرماني. أما :invalid العادية فكانت ستلوّن الحقل المطلوب الفارغ بالكهرماني قبل أن تلمسه.

مهما فعلت بـ :focus، أبقِ نمط تركيز مرئيًا. إزالة الإطار الخارجي من دون بديل تترك مستخدمي لوحة المفاتيح عاجزين عن رؤية مكانهم.

:has()، محدد الأب

تطابق :has() العنصر حسب ما يحتويه. إنها «محدد الأب» الذي طال انتظاره، وتعمل في الإصدارات الحالية من Chrome وFirefox وSafari.

اختر الخطة الأخرى: تتبع البطاقة كلها زر الراديو، من دون أي JavaScript.

أخطاء شائعة

  • مسافة قبل النقطتين. li :first-child تعني «ابن أول داخل li». اكتب li:first-child.
  • توقع أن p:nth-child(1) تعني «أول p». معناها «الابن الأول، إن كان p». استخدم :first-of-type لأول p.
  • العد من 0. المواضع تبدأ من 1: :nth-child(0) لا يطابق شيئًا.
  • إزالة إطارات التركيز. :focus { outline: none } من دون بديل تُفسد التنقل بلوحة المفاتيح.
  • الخلط بين : و::. :before تهجئة قديمة للعنصر الزائف ::before؛ الفئات الزائفة تستخدم دائمًا نقطتين رأسيتين مرة واحدة.

الأسئلة الشائعة

ما هي الفئة الزائفة في CSS؟

كلمة مفتاحية بعد نقطتين رأسيتين تختار العناصر حسب الحالة أو الموضع لا حسب الاسم، مثل a:hover وli:first-child وinput:focus. تُضاف إلى محدد عادي، ومعظم الفئات الزائفة تُحسب كفئة في الخصوصية (:where() تُحسب صفرًا).

كيف يعمل nth-child في CSS؟

يطابق :nth-child(an+b) العناصر التي يساوي موضعها بين إخوتها a×n+b حيث n = 0 و1 و2 وهكذا، والعد يبدأ من 1. :nth-child(3) هو الابن الثالث، و:nth-child(odd) أو 2n+1 كل ابن فردي، و:nth-child(n+4) الرابع وما بعده.

ما الفرق بين nth-child وnth-of-type؟

يعدّ :nth-child() كل العناصر الإخوة ثم يتحقق من باقي المحدد؛ أما :nth-of-type() فيعدّ الإخوة من نوع العنصر نفسه فقط. في قائمة فيها h2 تتبعه فقرات، لا يطابق p:nth-child(1) شيئًا بينما يطابق p:nth-of-type(1) الفقرة الأولى.

كيف أستخدم :not() في CSS؟

ضع المحدد الذي تريد استبعاده بين القوسين: li:not(.done) يطابق كل عنصر قائمة لا يحمل الفئة done. ويقبل قائمة أيضًا، input:not([type="checkbox"], [type="radio"]).

ما الفرق بين الفئة الزائفة والعنصر الزائف؟

الفئة الزائفة (نقطتان رأسيتان مرة واحدة، :hover) تختار عنصرًا موجودًا كاملًا في حالة ما. أما العنصر الزائف (مرتان، ::before) فيستهدف جزءًا من عنصر أو ينشئ محتوى مولَّدًا.

Coddy programming languages illustration

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

ابدأ الآن