اذهب إلى المحتوى

محددات الأصناف الزائفة pseudo-classes والعناصر الزائفة pseudo-elements في CSS


ابراهيم الخضور

تقدم لغة CSS عددًا كبيرًا من المحددات التي تُعرف بمحددات الأصناف الزائفة pseudo-classes ومحددات العناصر الزائفة pseudo-elements التي تخدم غايات خاصة في تنسيق العناصر. عندما تستوعب طريقة عملها، ستكون قادرًا على البحث ضمن القوائم على ما يناسب المهمة التي تريد إنجازها.

ننصحك قبل متابعة القراءة أن تكون على دراية بالمواضيع التالية:

محددات الأصناف الزائفة pseudo-classes

وهي محددات تختار العناصر التي تتميز بوضع معين كأن تكون العناصر الأولى من نوعها أو أن يكون مؤشر الفأرة مارًا فوقها. تميل هذه المحددات لأن تشابه في عملها تطبيق صنف معين على جزء من الملف، وتساعد غالبًا في تقليل عدد الأصناف التي تستخدمها في شيفرتك، مما يجعلها أكثر مرونة وقابلية للصيانة.

تبدأ الأصناف الزائفة بالنقطتين المتعامدتين(:) كما بالشكل التالي:

:pseudo-class-name

مثال بسيط عن محددات الأصناف الزائفة

لنلق نظرة على المثال البسيط التالي الذي نحاول فيه جعل الفقرة الأولى من المقالة كبيرًا وبخط سميك. يمكننا أن نضيف صنفًا إلى الفقرة ثم نكتب قاعدة تنسيق لهذا الصنف كالتالي:

لكن الأمر قد يزيد صعوبة صيانة الشيفرة، فقد تُضاف فقرة جديدة إلى أعلى الصفحة وعليك عندها نقل الصنف إلى هذه الفقرة. وبدلًا من ذلك يمكننا استخدام محدد الأصناف الزائفة first-child: الذي يستهدف دائمًا الابن الأول في المقالة، ولا حاجة عندها لتعديل شيفرة HTML (وقد يكون أمر التعديل مستحيلًا نظرًا لوجود نظام إدارة محتوى يولّد هذه الشيفرة مثلًا ?

تسلك جميع محددات الأصناف الزائفة السلوك السابق، إذ تستهدف جزءًا من الملف الذي يتمتع بوضع معين وتتصرف وكأنك أضفت صنفًا إلى شيفرتك.

من الأصناف الزائفة أيضًا:

ملاحظة: تُعد القاعدة التي تبدأ بصنف زائف وعنصر دون أية محددات عناصر تسبقها صحيحة.

إذ يمكنك كتابة القاعدة في المثال السابق على الشكل first-child: وعندها ستُطبّق على أي عنصر يكون ابنًا للعنصر <article> وليس فقط أول عنصر ابن يكون فقرة نصية. فكتابة المحدد first-child: تكافئ المحدد first-child:*، لكن لا بدّ أن تكون أكثر تحديدًا في أغلب الأحيان.

محددات أصناف زائفة مرتبطة بأفعال المستخدم

تُطبق تنسيقات بعض محددات الأصناف الزائفة عندما يتفاعل المستخدم مع الصفحة بطريقة ما. تُدعى هذه المحددات أحيانًا الأصناف الزائفة الديناميكية وتُطبق كما لو أنك أضفت صنفًا إلى عنصر عندما يتفاعل معه المستخدم. إليك بعض الأمثلة:

  • hover:: وتُطبّق عندما يمرر المستخدم مؤشر الفأرة فوق عنصر وهذا العنصر المستهدف هو الرابط عادةً.
  • focus:: وتُطبق عندما يعطي المستخدم تركيز الدخل إلى عنصر بالنقر عليه أو من خلال لوحة المفاتيح.

محددات العناصر الزائفة pseudo-elements

تسلك هذه المحددات سلوك محددات الأصناف الزائفة، وتعمل وكأنك أضفت عنصر HTML جديد إلى شيفرتك بدلًا من تطبيق صنف على عنصر موجود. تبدأ محددات العناصر الزائفة بنقطتين متعامدتين مزدوجتين (::).

::pseudo-element-name

ملاحظة: استخدمت بعض العناصر الزائفة في البدايات نقطتين متعامدتين فقط (:)، لذا قد ترى ذلك في شيفرة أو في مثال. تدعم المتصفحات الحديثة تلك الصياغة بالإضافة إلى الصياغة الجديدة لأغراض التوافق.

لو أردت مثلًا أن تستهدف السطر الأول من فقرة ستتمكن من ذلك بتغليف هذا السطر داخل العنصر <span> ثم اختيار محدد عنصر. لكن ستفشل العملية إن كان عدد الكلمات التي تغلفها أكثر أو أقل من اتساع العنصر الأب. وطالما أننا لن نعرف بدقة عدد الكلمات التي ستقع في سطر واحد، إذ سيتغير العدد وفقًا لاتساع شاشة العرض، فمن الصعب التأكد من نجاح الأمر باستخدام شيفرة HTML فقط.

سينجز محدد العناصر الزائفfirst-line:: هذه العملية بسهولة، وسيطبق التنسيق على السطر الأول إن زاد أو قل عدد الكلمات.

يعمل المحدد السابق كعنصر <span> سحري يغلف السطر المطلوب وينسقه ويعدّل وضعه إن تغير طول السطر. لاحظ أيضًا كيف اختار السطر الأول من الفقرة الثانية أيضًا!

الجمع بين محددات الأصناف الزائفة ومحددات العناصر الزائفة

إن أردت أن تجعل خط الكتابة في أول سطر في أول فقرة نصية سميكًا يمكن ضم المحددين first-child: وfirst-line:: على التسلسل. حاول أن تعدّل الشيفرة في المثال السابق لتصبح على الشكل التالي:

article p:first-child::first-line {
  font-size: 120%;
  font-weight: bold;
}

تعني هذه القاعدة استهداف أول سطر لأول فقرة نصية <p> داخل العنصر <article>.

إنشاء محتوى باستخدام المحددين before:: و after::

يُستخدم المحددين السابقين مع الخاصية content لإدراج محتوى في ملف HTML باستخدام CSS. يعرض المثال التالي كيف تستخدم المحدد before:: والخاصية السابقة في إدراج النص الذي يمثل قيمة هذه الخاصية قبل محتوى العنصر الذي يمتلك الصنف box. كما يمكنك استخدام المحدد after:: لإدراج هذا النص في نهاية محتوى ذلك العنصر.

لا نستخدم هذا الأسلوب كثيرًا في إدراج المحتوى في صفحات الويب، لأن هذا المحتوى لن يكون مقروءًا بالنسبة لقارئات الشاشة وقد تواجه صعوبة في إيجاده وتعديله إن لزم الأمر.

أما الاستخدام المفيد حقًا لهذه التقنية فهو إدراج أيقونة مثلًا. لاحظ أيقونة السهم التي أدرجناها في الشيفرة التالية كمثال عن محتوىً يمكن إضافته إن لم نكن نريد لقارئات الشاشة التعرف عليه.

تُستخدم محددات العناصر الزائفة مرارًا في إدراج سلسلة نصية فارغة يمكن تنسيقها لاحقًا كأي عنصر من عناصر الصفحة.

أضفنا في المثال التالي سلسلة نصية فارغة باستخدام المحدد before:: ووضعنا داخله التصريح display: block لكي نتمكن من ضبط أبعاده. ثم استخدمنا بعد ذلك لغة CSS لتنسيقه كأي عنصر. حاول أن تغير في التنسيقات وتراقب ما الذي سيحدث!

يُدعى أسلوب إدراج المحتوى باستخدام before:: وafter:: مع الخاصية content في CSS بأسلوب "المحتوى المولَّد"، وسترى كثرة استخدام هذا الأسلوب في إنجاز مهام مختلفة. وعندما ترى هذين المحددين، ابحث عن الخاصية content وانظر إلى محتواها لتعرف ما سيُضاف إلى محتوى الصفحة.

مرجع إلى محددات الأصناف الزائفة والعناصر الزائفة

نقدم لك في الجدول التالي مرجعًا إلى أكثر المحددات السابقة شيوعًا ووصفًا لعمل كلٍ منها، كما ربطنا كل محدد بشرح إضافي له موجود على موسوعة حسوب.

محددات الأصناف الزائفة

المحدد الوصف
active: يطبق التنسيق عندما يٌفعّل المستخدم عُنصرًا (كالنقر عليه مثلًا).
any-link: يُطبق التنسيق على حالتي الرابط link: و:visited:
blank: يطبق التنسيق على العنصر <input> إن كان فارغًا.
checked: يطبق التنسيق على أزرار الخيارات المتعددة radio buttons ومربعات التحقق التي تتمتع بحالة معينة.
current: يُطبق التنسيق على العنصر الذي يُعرض حاليًا أو أحد آبائه
default: يطبق التنسيق على عنصر واجهة المستخدم الافتراضي من بين مجموعة عناصر مشابهة
dir: يختار العنصر وفقًا لاتجاهه (قيمة السمة dir في HTML أو قيمة الخاصية direction في CSS)
disabled: يطبق التنسيق على عنصر واجهة مستخدم عندما يكون في حالة التعطيل
empty: يطبق التنسيق على عنصر لا يمتلك أبناء ماعدا مسافة فارغة اختيارية.
enabled: يُطبق التنسيق على عنصر واجهة مستخدم عندما يكون في حالة تمكين
first: يطبق التنسيق على أول صفحة في الوسائط التي تدعم الصفحات المتعددة.
:first-child يطبق التنسيق على أول عنصر بين مجموعة أشقاء.
:first-of-type يطبق التنسيق على أول عنصر من نوع محدد من بين مجموعة أشقاء.
focus: يطبق التنسيق على العنصر الذي يتلقى تركيز الدخل.
:focus-visible يُطبق التنسيق على عنصر تلقى التركيز وهذا التركيز مرئي بالنسبة للمستخدم.
focus-within: يطبق التنسيق على عنصر يمتلك تركيز الدخل بالإضافة إلى عنصر له سليل تلقى تركيز الدخل أيضًا.
future: يطبق التنسيق على العنصر التالي للعنصر الحالي.
hover: يطبق التنسيق عندما يمر مؤشر الفأرة فوق العنصر.
indeterminate: يطبق التنسيق على عناصر واجهة المستخدم قيمة حالتها غير محددة وعادة ما تطبق على أزرار التحقق checkbox.
in-range: يطبق التنسيق على عنصر لقيمته مجال محدد وكانت هذه القيمة ضمن المجال.
invalid: يطبق التنسيق على عنصر مثل <input> عندما يكون في حالة غير صحيحة.
lang: يطبق التنسيق على عنصر بناءً على اللغة (قيمة السمة lang لهذا العنصر)
last-child: يطبق التنسيق على آخر عنصر بين مجموعة أشقاء
last-of-type: يطبق التنسيق على آخر عنصر من نوع محدد من بين مجموعة أشقاء.
left: يطبق التنسيق على الصفحة اليسرى في الوسائط التي تدعم الصفحات المتعددة.
link: يطبق التنسيق على الروابط التي لم تُزار بعد.
local-link: يطبق التنسيق على الروابط التي تشير إلى صفحات تقع في نفس موقع الصفحة الحالية.
:is() يطابق أي محدد من قائمة المحددات الممرة.
not: يطابق الأشياء التي لا يطابقها المحد الممر كقيمة لهذا المحدد.
nth-child: يطابق عناصر ضمن قائمة أشقاء وفق صيغة (آ.ن+ب). فالصيغة 2ن+1 ستطابق العناصر الفردية 1،3،5،7 وهكذا.
:nth-of-type: يطابق عناصر من نوع محدد (<p> مثلًا) ضمن قائمة أشقاء وفق صيغة (آ.ن+ب). فالصيغة 2ن+1 ستطابق العناصر الفردية من النوع المحدد 1،3،5،7 وهكذا
:nth-last-child: يطابق عناصر ضمن قائمة أشقاء وفق صيغة (آ.ن+ب) لكن من النهاية إلى البداية. فالصيغة 2ن+1 ستطابق العنصر الأخير ثم يتجاوز عنصر ويختار الذي يسبقه وهكذا أي كل النقاط الفردية لكن من النهاية.
:nth-last-of-type: يطابق عناصر من نوع محدد (<p> مثلًا) ضمن قائمة أشقاء وفق صيغة (آ.ن+ب) لكن من النهاية إلى البداية. فالصيغة 2ن+1 ستطابق العنصر الأخير ثم يتجاوز عنصر ويختار الذي يسبقه وهكذا أي كل النقاط الفردية لكن من النهاية.
only-child: يطبق التنسيق على عنصر لا أشقاء له.
:only-of-type: يطابق العنصر الوحيد من نوعه ضمن قائمة أشقاء.
optional: يطبق التنسيق على العناصر غير الضرورية (الاختيارية).
:out-of-range يطبق التنسيق على عنصر لقيمته مجال محدد وكانت هذه القيمة خارج المجال.
‎:past يطبق التنسيق على العنصر الذي يسبق العنصر الحالي.
:placeholder-shown يطبق التنسيق على عنصر إدخال يُظهر مكانًا لكتابة نص.
playing: يطبق التنسيق على عنصر يمثل صوت أو فيديو أو مورد مشابه يمكن تشغيله وإيقافه وذلك في الحالة التي يُشغّل فيها.
:paused يطبق التنسيق على عنصر يمثل صوت أو فيديو أو مورد مشابه يمكن تشغيله وإيقافه وذلك في الحالة التي يوُقف فيها.
read-only: يطبق التنسيق على العناصر التي لا يمكن للمستخدم تبديلها.
read-write: يطبق التنسيق على العناصر التي يمكن للمستخدم تبديلها.
required: يُطابق عناصر النموذج الضرورية
right: يطبق التنسيق على الصفحة اليمنى في الوسائط التي تدعم الصفحات المتعددة.
root: يُطبق التنسيق على العنصر الذي يعتبر العنصر الجذري للملف.
:scope يطبق التنسيق على أي عنصر يمثل عنصر مجال رؤية.
valid: يطبق التنسيق على عنصر مثل <input> عندما يكون في حالة صحيحة.
target: يطبق التنسيق على عنصر إن كان هدفًا لعنوان URL الحالي
visited: يطبق التنسيق على الروابط المُزارة.

يمكنك الرجوع إلى صفحة محددات الأصناف الزائفة في موسوعة حسوب للاطلاع على القائمة الكاملة بالتفصيل.

محددات العناصر الزائفة

المحدد الوصف
after:: يُدرج عنصرًا قابلًا للتنسيق بعد المحتوى الأصلي لعنصر إن استُخدم مع الخاصية content التي لها قيمة لا تساوي none.
before:: يُدرج عنصرًا قابلًا للتنسيق قبل المحتوى الأصلي لعنصر إن استُخدم مع الخاصية content التي لها قيمة لا تساوي none.
first-letter:: Matches the first letter of the element. يُطابق الحرف الأول من العنصر
first-line:: يطبق التنسيق على السطر الأول من العنصر الذي يحتوي نصًا.
grammar-error:: يطابق جزءًا من محتوى الملف يحوي أخطاء قواعدية حددها المتصفح.
marker:: يُطابق صندوق التحديد marker box لقائمة عناصر تستخدم النقاط أو التعداد.
selection:: يطابق الجزء المُختار من ملف
spelling-error:: يطابق جزءًا من محتوى الملف يحوي أخطاء إملائية يحددها المتصفح.

يمكنك الرجوع إلى صفحة محددات العناصر الزائفة في موسوعة حسوب للاطلاع على القائمة الكاملة بالتفصيل.

ترجمة -وبتصرف- للمقال pseudo-classes and pseudo-elements.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...