ما هي العناصر الزائفة Pseudo-elements ، وكيف تعمل؟
نظريمن أكثر جوانب CSS إثارة للاهتمام هو استخدام "العناصر الزائفة" (pseudo-elements). وفي هذا السياق، تعني كلمة "زائف" (pseudo) "غير حقيقي"؛ لذا فإن العناصر الزائفة هي عناصر افتراضية أو مُستحدثة لا تقابل بشكل مباشر أي عناصر HTML فعلية. وهي تتيح لك تنسيق أجزاء محددة من عنصر ما، أو إدراج محتوى دون الحاجة إلى إضافة عناصر HTML إضافية.
صيغة العناصر الزائفة Pseudo-element Syntax
لتطبيق عنصر زائف (pseudo-element)، قم بإلحاقه بمحدد العنصر الأصلي باستخدام علامة النقطتين المزدوجتين (::). لاحظ أن المحدد يمكن أن يكون من أي نوع، كأن يكون محدد فئة (class) أو محدد مُعرِّف (ID). إليك الشكل العام للصيغة الأساسية للعناصر الزائفة:
selector::pseudo-element {
property: value;
}
هذا النقطتان المتتاليتان (double colon) هما ما يميّز العناصر الزائفة (pseudo-elements) عن الفئات الزائفة (pseudo-classes)، التي تستخدم نقطتان فقط (single colon).
تتيح لك العناصر الزائفة (pseudo-elements) تنسيق أجزاء محددة من محتوى عنصر ما، أو إدراج محتوى قبل هذا العنصر أو بعده، لكنها لا يمكن أن توجد بشكل مستقل. ويُطلق على العنصر الذي يرتبط به العنصر الزائف اسم "العنصر الأصلي" (originating element).
العناصر الزائفة ::before و ::after
لنبدأ بالاطلاع على أمثلة للعناصر الزائفة ::before و ::after. فكما يوحي اسماهما، يتيح لك ::before إدراج محتوى قبل محتوى العنصر مباشرةً، بينما يتيح لك ::after إدراج محتوى بعده.
إليك مثال على عنصر زر (button). في لغة CSS، سنستخدم التموضع المطلق (absolute positioning) والعنصر الزائف (pseudo-element) المسمى ::before لإضافة نجمة قبل نص اعرف المزيد الموجود داخل الزر. ستتعرف على المزيد حول التموضع المطلق (absolute positioning) في دروس قادمة.
index.html
<link rel="stylesheet" href="styles.css">
<button class="cta-button">اعرف المزيد</button>
styles.css
.cta-button {
background-color: lightseagreen;
color: white;
border: none;
padding: 10px 20px;
cursor: pointer;
position: relative;
}
.cta-button::before {
content: "⭐";
position: absolute;
right: 3px;
top: 8px;
font-size: 0.75rem;
}
معاينة:
تُستخدم الخاصية content لإضافة محتوى قبل نص الزر. في هذا المثال، نقوم بإضافة رمز نجمة. ستلاحظ أنه لا يمكنك إضافة محتوى فحسب، بل يمكنك أيضاً تنسيقه. إليك مثال على استخدام العنصر الزائف ::after مع الزر ذاته:
index.html
<link rel="stylesheet" href="styles.css">
<button class="cta-button">اعرف المزيد</button>
styles.css
.cta-button {
background-color: orange;
border: none;
padding: 10px 30px;
cursor: pointer;
position: relative;
}
.cta-button::after {
content: "⬅️";
position: absolute;
left: 5px;
bottom: 6px;
font-size: 1.125rem;
transition: transform 0.3s ease;
}
معاينة:
في العنصر الزائف ::after ، تُستخدم الخاصية transition لإجراء تغييرات متحركة (animate changes) على مدار 0.3 ثانية مع تأثير تدرج في السرعة (easing effect)، مما يضفي طابعاً سلساً وتدريجياً على التحول بدلاً من حدوثه بشكل مفاجئ. ستتعرف على المزيد حول الخاصية transition في دروس قادمة.
يمكنك أيضاً إلحاق فئة زائفة (pseudo-class) بالمحتوى الذي تدرجه داخل محتوى آخر باستخدام العناصر الزائفة (pseudo-elements) مثل ::before و ::after. على سبيل المثال، يمكنك إضافة حالة "التمرير بالفأرة" (hover state) لهذا المحتوى. إليك مثال على ذلك:
index.html
<link rel="stylesheet" href="styles.css">
<button class="cta-button">اعرف المزيد</button>
styles.css
.cta-button {
background-color: orange;
border: none;
padding: 10px 30px;
cursor: pointer;
position: relative;
}
.cta-button::after {
content: "⬅️";
position: absolute;
left: 5px;
bottom: 6px;
font-size: 1.125rem;
transition: transform 0.3s ease;
}
.cta-button:hover::after {
transform: translateX(-2px);
}
معاينة:
عند استخدام الخاصية transform: translateX(-2px) في حالة التمرير (hover)، يندفع المحتوى بمقدار 2px نحو اليسار كلما مرر المستخدم مؤشر الفأرة فوق الزر. أما خاصية (transition) المطبقة على العنصر الزائف ::after فتضمن استغراق هذه العملية 0.3 ثانية 0.3s.
هذا ما تفعله خاصية transform ؛ فهي تتيح لك تدوير عنصر ما، أو إمالته، أو تغيير حجمه، أو تحريكه في اتجاه معين. ستتعرف على المزيد حول هذا الموضوع في دروس قادمة.
العنصر الزائف ::first-letter
في المثال التالي، سنلقي نظرة على العنصر الزائف ::first-letter. يستهدف هذا العنصر الزائف الحرف الأول (the first letter) من محتوى عنصرٍ ما، مما يتيح لك تنسيقه. إليك مثال يتضمن نصاً في فقرة؛ فإذا أردنا تنسيق الحرف الأول، يمكننا استخدام العنصر الزائف ::first-letter على النحو التالي:
index.html
<link rel="stylesheet" href="styles.css">
<p>معًا نصنع مستقبل التقنية العربية</p>
styles.css
p::first-letter {
font-size: 2rem;
}
معاينة:
معًا نصنع مستقبل التقنية العربية
العنصر الزائف ::marker
في المثال الأخير، سنتناول العنصر الزائف ::marker ، الذي يتيح لك تحديد العلامات أو النقاط أو الأرقام الخاصة بعناصر القائمة (list items) لتنسيقها. يوفر العنصر الزائف ::marker وسيلةً لتعزيز الهوية البصرية لموقعك الإلكتروني، وذلك من خلال تخصيص علامات القوائم لتتناغم مع نظام الألوان المعتمد في موقعك.
إليك مثال على قائمة غير مرتبة (unordered list) وقائمة مرتبة (ordered list). لتغيير لون وحجم العلامة المميزة لعناصر القائمة، يمكنك استخدام العنصر الزائف (pseudo-element) المسمى ::marker على النحو التالي:
index.html
<link rel="stylesheet" href="styles.css">
<ul>
<li>عنصر قائمة غير مرتبة 1</li>
<li>عنصر قائمة غير مرتبة 2</li>
<li>عنصر قائمة غير مرتبة 3</li>
<li>عنصر قائمة غير مرتبة 4</li>
</ul>
<ol>
<li>عنصر قائمة مرتبة 1</li>
<li>عنصر قائمة مرتبة 2</li>
<li>عنصر قائمة مرتبة 3</li>
<li>عنصر قائمة مرتبة 4</li>
</ol>
styles.css
li::marker {
color: crimson;
font-size: 1.5em;
font-weight: bold;
}
معاينة:
- عنصر قائمة غير مرتبة 1
- عنصر قائمة غير مرتبة 2
- عنصر قائمة غير مرتبة 3
- عنصر قائمة غير مرتبة 4
- عنصر قائمة مرتبة 1
- عنصر قائمة مرتبة 2
- عنصر قائمة مرتبة 3
- عنصر قائمة مرتبة 4
في هذا الدرس، تناولنا عدداً قليلاً فقط من العناصر الزائفة (pseudo-elements). ولكن هناك الكثير غيرها، مثل ::placeholder و ::spelling-error و ::selection ، والتي أشجعك على استكشافها بنفسك.
أسئلة :
أيّ مما يلي يصف بدقة العلاقة بين العناصر الزائفة (pseudo-elements) والعنصر الأصلي المرتبطة به؟
1. يمكن للعناصر الزائفة أن توجد بشكل مستقل عن العنصر الأصلي. ❌
2. يجب دائماً تعريف العناصر الزائفة قبل العنصر الأصلي. ❌
3. تعتمد العناصر الزائفة على العنصر الأصلي ولا يمكنها الوجود بشكل مستقل. ✅
4. تُستخدم العناصر الزائفة لإنشاء عناصر HTML جديدة. ❌
أيّ مما يلي يوضّح الفرق الصحيح بين العناصر الزائفة (pseudo-elements) والفئات الزائفة (pseudo-classes)؟
1. تستخدم العناصر الزائفة نقطتَيْن (colon) مفردتَيْن، بينما تستخدم الفئات الزائفة نقطتَيْن مزدوجتَيْن. ❌
2. تستخدم العناصر الزائفة نقطتَيْن مزدوجتَيْن، بينما تستخدم الفئات الزائفة نقطتَيْن مفردتَيْن. ✅
3. تستخدم كلّ من العناصر الزائفة والفئات الزائفة نفس صيغة النقطتَيْن. ❌
4. تتطلّب الفئات الزائفة نقطتَيْن مزدوجتَيْن، بينما لا تتطلّب العناصر الزائفة ذلك. ❌
أي مما يلي يصف بشكل أدق وظيفة العناصر الزائفة (pseudo-elements) في لغة CSS ؟
1. تُضيف عناصر HTML جديدة إلى المستند. ❌
2. تُطبق تنسيقات على أجزاء محددة من محتوى العنصر دون إضافة وسوم HTML إضافية. ✅
3. تستبدل المحتوى الكامل للعنصر بمحتوى جديد. ❌
4. تُعدل بنية مستند HTML. ❌