انتقل إلى محتوى الدرس
الدرس 147
دورة لغة CSS

العناصر الزائفة في لغة CSSCSS Pseudo-Elements

تعلم استخدام العناصر الزائفة في لغة CSS لتنسيق أجزاء محددة من النصوص وتوليد الشارات الزخرفية وعلامات الاقتباس ثنائية اللغة وتلوين رموز القوائم وتظليل القراءة دون إضافة وسوم فائضة.
أقسام الدرس
8
الأمثلة
3
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
1
محتوى الدرس
في هذا الدرس 8تصفّح المواضيع

بينما تستخدم الفئة الزائفة نقطتين مفردتين مثل :hover أو :focus لاستهداف عنصر موجود بالكامل عندما يمر بحالة تفاعلية معينة، يستخدم العنصر الزائف نقطتين مزدوجتين مثل ::before أو ::first-line لاستهداف جزء فرعي محدد داخل العنصر أو توليد صندوق زخرفي افتراضي بداخله.

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

مخطط يوضح موضعي الصندوقين الفرعيين ::before و ::after حول المحتوى النصي الأصلي داخل العنصر

ينشئ العنصران الزائفان ::before و::after صندوقين افتراضيين باعتبارهما الابن الأول والابن الأخير داخل العنصر المستهدف. ولا يُرسم أي منهما في التخطيط ما لم تصرح بخاصية content؛ إذ يؤدي إغفالها أو إعطاؤها القيمة content: none إلى عدم توليد الصندوق من الأساس.

عند رسم زخارف هندسية خالصة مثل النقاط الملونة للحالة أو الخطوط التزيينية تحت العناوين، نكتب نصاً فارغاً content: "" ثم نمنحه أبعاداً ولون خلفية مع display: inline-block أو تموضع مطلق. وانتبه إلى أن العناصر المستبدلة أو الفارغة مثل <img> و<input> و<br> لا تملك حاوية محتوى داخلية، لذا لا يعمل عليها ::before ولا ::after.

CSS
.status-chip::before {
  content: "";
  display: inline-block;
  width: 9px;
  height: 9px;
  margin-inline-end: 8px;
  border-radius: 50%;
  background-color: #10b981;
}

بدلاً من تثبيت كلمات جامدة داخل ملف الأنماط، تقرأ دالة content: attr(data-badge) قيمة السمة المكتوبة على وسم HTML وتعرضها بصرياً، كما يمكنك دمج نصوص ثابتة مع قيمة السمة في سطر واحد تفصل بينها مسافات مثل content: " [" attr(data-lang) "]".

وفي الاقتباسات النصية بوسم <q> أو بطاقات الاستشهاد، يتيح الجمع بين خاصية quotes وقيمتي open-quote وclose-quote مطابقة علامات التنصيص للغة المحتوى تلقائياً، فتظهر علامات التنصيص الإنجليزية المنحنية في النصوص اللاتينية وتظهر الشوكتان العربيتان المزدوجتان «...» في النصوص العربية.

CSS
.doc-card::after {
  content: attr(data-badge);
  padding: 2px 8px;
  background-color: #f2ebf9;
}
.quote-box { quotes: "«" "»"; }
.quote-box::before { content: open-quote; }
.quote-box::after { content: close-quote; }

تعتمد المقالات التحريرية كثيراً على إبراز بداية النص عبر ::first-line لتنسيق السطر الافتتاحي و::first-letter لتكبير الحرف الاستهلالي. ويعمل كلا العنصرين حصرياً على الحاويات الكتلية مثل <p> ولا يعملان على العناصر السطرية الصرفة display: inline. وبما أن طول السطر الأول يتغير بتغير عرض الشاشة، يعيد المتصفح حساب الكلمات المشمولة بتنسيق ::first-line لحظياً عند تكبير النافذة أو تصغيرها.

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

مختبر العناصر الزائفة التفاعلي

في السابق كان تغيير لون نقاط القائمة أو أرقامها بمعزل عن لون النص الداخلي يضطر المطور إلى إلغاء التعداد الأصلي عبر list-style: none ثم إعادة رسمه يدوياً باستخدام li::before. أما اليوم فيستهدف العنصر الزائف li::marker صندوق الرمز أو الرقم الأصلي المولد تلقائياً لعناصر القوائم بصورة مباشرة.

يتيح لك li::marker تغيير اللون عبر color وضبط حجم الخط وسماكته أو حتى استبدال الرمز بنص مخصص مثل content: "+ " مع الحفاظ الكامل على محاذاة القائمة الأصلية ودلالتها لدى قارئات الشاشة.

يمنح عنصران زائفان إضافيان صقلاً واضحاً لتجربة القراءة والإدخال في الواجهات. أولهما ::placeholder لتنسيق النص الإرشادي المؤقت داخل حقول <input> و<textarea> الفارغة؛ وبما أن بعض المتصفحات تخفض شفافيته افتراضياً، فإن ضبط opacity: 1 مع لون هادئ متوازن يضمن ثبات التباين في كل المتصفحات دون إرباك المستخدم بأن الحقل مملوء مسبقاً.

وثانيهما ::selection الذي يخصص لون الخلفية background-color ولون النص color عندما يظلل القارئ فقرة بالفأرة أو بلوحة المفاتيح، بشرط الحفاظ على نسبة تباين لا تقل عن 4.5:1 لضمان سهولة القراءة.

CSS
.check-list li::marker { color: #7750b2; font-weight: 700; }
.search-box::placeholder { color: #6b5a8e; opacity: 1; }
.note-copy::selection {
  background-color: #5b3894;
  color: #ffffff;
}

يقع كثير من المطورين في خطأ خفي عند كتابة * { box-sizing: border-box; } بمفردها؛ فالمحدد الشامل * يطابق عناصر شجرة المستند الحقيقية فقط ولا يشمل ::before أو ::after! ونتيجة لذلك يعود أي صندوق زخرفي بعرض width: 100% وحشوة داخلية إلى نموذج content-box فيتجاوز حدود حاويته.

لذلك فإن ترقية قاعدة التأسيس في مشاريعك إلى *, *::before, *::after { box-sizing: border-box; } تضمن خضوع جميع الصناديق الحقيقية والمولدة لحساب أبعاد موحد ودقيق.

العنصر الزائفالوظيفة الأساسيةالقاعدة الجوهرية
::before و::afterالشارات والفواصل الزخرفيةيشترط content ولا يعمل على <img>
::first-lineإبراز السطر الافتتاحييعمل على الكتل ويتحدث تلقائياً مع عرض الشاشة
::first-letterتكبير الحرف الاستهلاليتجنب فصل الحرف المتصل في الكلمات العربية
::markerتلوين نقاط وأرقام القوائميدعم الخط واللون وcontent فقط
::placeholderتنسيق النص الإرشادي للحقولاضبط لوناً هادئاً مع opacity: 1
::selectionتخصيص ألوان تظليل القراءةحافظ على تباين لا يقل عن 4.5:1

عند فحص عنصر في أدوات المطور داخل المتصفح وتوسيع وسمه في لوحة العناصر، تظهر عقدتا ::before و::after لتسهيل معاينة أبعادهما وألوانهما المحسوبة. غير أن المحتوى المولد عبر CSS لا يعد جزءاً حقيقياً من شجرة المستند؛ فلا يستطيع الزائر تظليله ونسخه بالمؤشر، ولا تعتمد عليه محركات البحث بوصفه نصاً أساسياً في الصفحة.

لذلك التزم دائماً بقاعدة إمكانية الوصول القياسية: اجعل ::before و::after للزخرفة البصرية أو التعزيز الإضافي فقط، ولا تضع معلومات جوهرية كالأسعار أو التحذيرات أو معاني الإلزام حصرياً داخل خاصية content دون وجود نص حقيقي في المستند.

خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

في ملخص الدرس أتقنت التمييز بين العناصر الزائفة والفئات الزائفة، وتوليد الزخارف وعلامات الاقتباس ثنائية اللغة عبر ::before و::after وخاصية content، وتنسيق ::first-line و::marker و::placeholder و::selection، وتحديث تصفير الأبعاد الشامل. وتتمثل الخطوة التالية في الانتقال إلى درس العدادات التلقائية في لغة CSS لترقيم العناوين والخطوات ديناميكياً.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Pseudo-Element العنصر الزائف
محدد يكتب بنقطتين مزدوجتين لاستهداف جزء نصي فرعي أو صندوق زخرفي افتراضي داخل عنصر HTML أصلي.
للمراجعة
02 Generated Content المحتوى المولد
النصوص أو علامات الاقتباس أو الأشكال الزخرفية المرسومة عبر خاصية content في CSS دون وجودها كعناصر في شجرة المستند.
للمراجعة
03 List Marker Box صندوق رمز القائمة
صندوق النقطة أو الرقم التسلسلي الذي ينشئه المتصفح تلقائياً لعناصر القوائم ويقبل التلوين عبر ::marker.
للمراجعة
04 Attribute String Extraction استخراج نص السمة
تعبير داخل خاصية content يقرأ قيمة سمة من وسم HTML ويعرضها كنص حرفي مباشر.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات3

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 3 مفهومةأول بطاقة، أول خطوة
01 DOM DOM
Document Object Model
نموذج كائن المستند الحي الذي يضم العناصر الحقيقية ولا تدخل فيه النصوص الزخرفية المولدة كعقد نصية قابلة للنسخ.
للمراجعة
02 WCAG WCAG
Web Content Accessibility Guidelines
إرشادات النفاذ القياسية التي تمنع الاعتماد الحصري على المحتوى الزخرفي المولد لنقل معلومات جوهرية للقارئ.
للمراجعة
03 CSSOM CSSOM
CSS Object Model
نموذج كائنات الأنماط في المتصفح الذي يحسب خصائص العناصر الزائفة ويعرضها للفحص في أدوات المطور.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. صمم شارة حالة ترسم دائرة خضراء بقطر 10px قبل النص عبر ::before وقيمة نص فارغ في content دون وسوم إضافية.

  2. لوّن رموز قائمة نقطية بالبنفسجي عبر li::marker وخصص تظليل الفقرة بخلفية بنفسجية داكنة ونص أبيض واضح عبر p::selection.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الخاصية الإلزامية التي يجب التصريح بها داخل ::before أو ::after لكي ينشئ المتصفح الصندوق؟

02

ما وزن الأولوية الذي يضيفه العنصر الزائف مثل ::after في معادلة حساب الأولوية؟

03

لماذا لا يظهر العنصر الزائف ::before عند تطبيقه مباشرة على وسم img أو input؟

04

أي صياغة صحيحة عند دمج حالة التمرير :hover مع العنصر الزائف ::after على رابط؟

05

أي خاصية يتجاهلها المتصفح عند كتابتها داخل المحدد li::marker؟

06

لماذا نكتب *, *::before, *::after بدلاً من * وحدها عند توحيد box-sizing؟

07

لا يجوز وضع التحذيرات الجوهرية أو الأسعار حصرياً داخل خاصية content للعناصر الزائفة دون نص حقيقي في HTML.

08

يفسر المتصفح وسوم HTML الموجودة داخل سمة مستدعاة عبر attr في خاصية content ويحولها إلى عناصر حقيقية.