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

::before و::after في CSS: العناصر الزائفة بالأمثلة

يُدرج ::before و::after محتوى مولَّدًا كأول ابن وآخر ابن للعنصر، مباشرة من CSS. تعلّم الخاصية content، ولماذا يلزم content فارغ، وكيف تضبط موضعهما، وتلميحات attr()، والعدّادات، والأماكن التي لا يعملان فيها.

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

ماذا يفعل ::before و::after

يُدرج ::before صندوقًا كـ أول ابن للعنصر، و::after كـ آخر ابن. ما يوضع في الصندوق تحدده الخاصية content. لا يُضاف شيء إلى HTML: المتصفح يولّده من CSS.

يحتوي HTML على 9 وTests pass فقط. علامة الدولار وتسمية «/ month» وعلامة الصح كلها تأتي من CSS. وترث أنماط العنصر (الخط، اللون) إلا إذا تجاوزتها، كما تفعل الأمثلة أعلاه.

الصيغة

selector::before {
  content: "text";   /* required */
  /* any other styles */
}

selector::after {
  content: "";       /* empty string: a box with no text */
}
قيمة contentالنتيجة
"text"سلسلة نصية. استخدم "\A" لسطر جديد (مع white-space: pre)، و"\2192" لمحرف Unicode (→)
""صندوق فارغ، للأشكال والزخارف
attr(data-label)قيمة سمة من سمات العنصر
counter(step)قيمة عدّاد CSS
open-quote / close-quoteعلامات التنصيص الخاصة بلغة العنصر
none أو normalلا عنصر زائف (normal هي القيمة الافتراضية)

الخاصية content إلزامية. من دونها لا يُنشأ ::before ولا ::after أبدًا، مهما أعطيتهما من خصائص أخرى.

أشكال زخرفية بـ content: ""

مع content: "" يصبح العنصر الزائف صندوقًا فارغًا يمكنك تحديد حجمه ولونه. هو سطري افتراضيًا، والصندوق السطري يتجاهل width وheight، لذلك أعطه display: block أو inline-block أو position: absolute:

ضبط موضع العنصر الزائف

لزخرفة تقع فوق العنصر أو حوله، استخدم position: absolute على العنصر الزائف وposition: relative على العنصر نفسه، كي تُقاس الإزاحات من العنصر:

انتبه إلى الترتيب عند الدمج مع فئة زائفة: الحالة أولًا ثم العنصر الزائف، .link:hover::after، وليس .link::after:hover أبدًا.

قراءة السمات بـ attr(): تلميح منبثق

تسحب attr() قيمة سمة إلى content، فتستطيع قاعدة واحدة عرض نص مختلف على كل عنصر:

التلميح الذي يظهر عند التمرير فقط غير مرئي لمستخدمي لوحة المفاتيح والشاشات اللمسية. لأي شيء مهم، ضع النص في الصفحة، أو أظهره أيضًا عند :focus مع tabindex="0" على العنصر.

الترقيم بالعدّادات

تُرقّم عدّادات CSS مع ::before العناصر من دون كتابة الأرقام:

أضف خطوة أو احذفها وستتحدث الأرقام من تلقاء نفسها.

أين لا يعمل ::before و::after

تُدرج العناصر الزائفة داخل العنصر، بين وسومه. العناصر التي ليس لها داخل يتسع لها لا تستطيع عرضها:

  • <img> و<video> و<iframe> (العناصر المستبدلة)
  • <input> و<select> و<textarea> (عناصر التحكم في النماذج)، و<br>

بعض المتصفحات ترسمها على مربع اختيار أو صورة معطوبة، لكن ذلك غير متسق. ضع العنصر الزائف على غلاف بدلًا من ذلك: <span class="field"><input></span> ونسّق .field::after.

أخطاء شائعة

  • غياب content. السبب الأكثر شيوعًا لعدم ظهور شيء. أضف content: "".
  • تحديد حجم عنصر زائف سطري. لا تفعل width وheight شيئًا حتى تضبط display: block أو inline-block أو position: absolute.
  • ترتيب خاطئ مع الحالة. a:hover::after يعمل؛ وa::after:hover لا يعمل.
  • موضع مطلق من دون أب مُموضَع. عندها يُحاذى العنصر الزائف إلى سلف بعيد. أضف position: relative إلى العنصر.
  • وضع محتوى حقيقي في CSS. النص في content لا يمكن تحديده أو نسخه. أبقِ المعلومات في HTML.

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

ماذا يفعل ::before في CSS؟

ينشئ عنصرًا زائفًا هو الابن الأول للعنصر المحدد، ويملؤه بما تحدده الخاصية content. و::after يفعل الشيء نفسه كآخر ابن. لا يوجد أي منهما في HTML، لذلك يفيدان في الأيقونات والتسميات والزخارف.

لماذا لا يظهر ::before أو ::after عندي؟

السبب الأكثر شيوعًا غياب الخاصية content: من دونها لا يُولَّد العنصر الزائف. استخدم content: "" لصندوق زخرفي فارغ. أسباب أخرى: عنصر زائف سطري له عرض وارتفاع (أعطه display: block أو inline-block)، أو عنصر مثل <img> أو <input> لا يستطيع احتواءهما.

ما الفرق بين :before و::before؟

لا فرق في السلوك. ::before بنقطتين مزدوجتين هي الصيغة الحالية التي تميّز العناصر الزائفة؛ و:before بنقطتين مرة واحدة هي التهجئة الأقدم من CSS2 التي ما زالت المتصفحات تقبلها لـ before وafter وfirst-line وfirst-letter.

هل يمكن استخدام ::before على img أو input؟

ليس بشكل موثوق. تُدرج العناصر الزائفة داخل محتوى العنصر، والعناصر المستبدلة مثل <img> وعناصر التحكم مثل <input> ليس لها صندوق محتوى لهما. أحط العنصر بـ <span> أو <div> وضع العنصر الزائف على الغلاف.

هل تقرأ قارئات الشاشة محتوى ::before في CSS؟

عمومًا نعم: النص في content يُضمَّن عادةً في الاسم الذي تقرؤه تقنيات الوصول، لكن لا يمكن تحديده أو نسخه. أبقِ المعلومات الحقيقية في HTML واستخدم العناصر الزائفة للزخرفة والإشارات البصرية الصغيرة.

Coddy programming languages illustration

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

ابدأ الآن