جمع‌بندی خانواده Pseudo-elementها: مرور کامل شش عضو اصلی

در فصل ۳ (درس ۳-۶)، با مفهوم Pseudo-element و شش عضو اصلی این خانواده، به‌طور کامل آشنا شدیم. چون این فصل، اختصاصاً به دسته‌بندی کامل Pseudo-classها و Pseudo-elementها می‌پردازه، این درس، آخرین درس آموزشی فصل هفدهمه و یک مرور نهایی و ترکیبی روی همون شش Pseudo-element‌ه؛ با تمرکز بیشتر روی کاربردهای عملی و ترکیب‌شون با مفاهیمی که در فصل‌های بعدی (مثل فصل ۱۵ با attr()) یاد گرفتیم.

مرور: ::before و ::after

.quote::before {
  content: "«";
}

.quote::after {
  content: "»";
}

همون‌طور که در فصل ۳ دیدیم، این دو Pseudo-element، محتوای مجازی رو، قبل یا بعد از محتوای واقعی یک عنصر، بدون نیاز به تغییر HTML، اضافه می‌کنن؛ و همیشه به یک مقدار برای content نیاز دارن.

ترکیب ::before/::after با attr(): یادآوری از فصل ۱۵

a[href^="http"]::after {
  content: " (" attr(href) ")";
  font-size: 0.8em;
  color: gray;
}

دقیقاً همون مثالی که در فصل ۱۵ (درس ۱۵-۴) دیدیم: ترکیب ::after با تابع attr()، امکان نمایش خودکار مقدار یک ویژگی HTML (مثل آدرس واقعی یک لینک)، بعد از متن اصلی، بدون تکرار دستی، رو فراهم می‌کنه.

مرور: ::first-letter و ::first-line

p::first-letter {
  font-size: 2.5em;
  font-weight: bold;
  float: inline-start;
}

همون‌طور که در فصل ۳ دیدیم، ::first-letter فقط اولین کاراکتر یک بلوک متنی رو هدف می‌گیره (تکنیک Drop Cap در طراحی مجلات). یک نکته تکمیلی: ترکیبش با float (که در فصل ۱۱، درس ۱۱-۵ به‌طور خلاصه بهش اشاره کردیم)، جلوه بصری‌ای می‌سازه که حرف بزرگ‌شده، در گوشه پاراگراف قرار می‌گیره و بقیه متن، دورش می‌پیچه.

مرور: ::selection

::selection {
  background-color: gold;
  color: black;
}

همون‌طور که در فصل ۳ دیدیم، این Pseudo-element، ظاهر متن انتخاب‌شده (Highlight شده با ماوس یا صفحه‌کلید) رو کنترل می‌کنه. یک نکته مهم درباره محدودیت‌ها: تعداد Propertyهایی که می‌شه روی ::selection تنظیم کرد، محدوده (عمدتاً color، background-color، و چند مورد دیگه مثل text-shadow)؛ Propertyهایی مثل display یا margin، روی این Pseudo-element، اصلاً معنا و کاربرد ندارن.

مرور: ::marker

li::marker {
  color: crimson;
  font-weight: bold;
}

همون‌طور که در فصل ۳ دیدیم، این Pseudo-element، نشانگر (Bullet یا شماره) عناصر لیست رو، مستقل از خود متن آیتم، هدف می‌گیره.

یک نکته تکمیلی درباره ::marker: محدودیت Propertyها

li::marker {
  content: "→ ";
  font-size: 1.2em;
}

یک نکته‌ای که در فصل ۳ کمتر بهش پرداختیم: ::marker، برخلاف ::before/::after، فقط مجموعه محدودی از Propertyها رو می‌پذیره (عمدتاً مرتبط با متن و رنگ، مثل color، font-*، و خود content)؛ Propertyهایی مثل background-color یا border، روی ::marker، پشتیبانی گسترده و قابل‌اعتمادی ندارن.

مرور: ::placeholder

input::placeholder {
  color: #999;
  font-style: italic;
}

همون‌طور که در فصل ۳ دیدیم، این Pseudo-element، ظاهر متن راهنمای داخل یک input خالی رو کنترل می‌کنه.

ترکیب ::placeholder با مفاهیم فصل ۱۷: :focus

input::placeholder {
  color: #999;
  transition: color 0.2s;
}

input:focus::placeholder {
  color: #ccc;
}

یک ترکیب رایج و عملی: تغییر رنگ Placeholder (روشن‌تر و کمرنگ‌تر شدنش)، وقتی کاربر، روی همون input، فوکوس می‌کنه (که در همین فصل، در درس ۱۷-۱ باهاش آشنا شدیم)؛ این جلوه ظریف، به کاربر، بازخورد بصری اضافه‌ای می‌ده که «الان داری روی این فیلد کار می‌کنی».

جدول جمع‌بندی نهایی شش Pseudo-element

Pseudo-element هدف نیاز به content؟
::before قبل از محتوای اصلی بله
::after بعد از محتوای اصلی بله
::first-letter اولین حرف یک بلوک متنی خیر
::selection متن انتخاب‌شده توسط کاربر خیر
::marker نشانگر آیتم‌های لیست خیر (اختیاری)
::placeholder متن راهنمای input خالی خیر

یک مثال کامل و جامع: ترکیب چند Pseudo-element در یک فرم

.form-title::before {
  content: "📝 ";
}

.form-title::first-letter {
  font-size: 1.3em;
}

.required-field label::after {
  content: " *";
  color: crimson;
}

input::placeholder {
  color: #aaa;
}

input:focus::placeholder {
  opacity: 0.5;
}

::selection {
  background-color: #cce5ff;
}

این مثال نهایی، تقریباً تمام شش Pseudo-element این خانواده رو، در یک فرم واقعی، کنار هم به‌کار می‌گیره: آیکون قبل از تیتر با ::before، بزرگ‌نمایی حرف اول تیتر با ::first-letter، ستاره اجباری بعد از برچسب با ::after، رنگ متن راهنما با ::placeholder (که با :focus هم تغییر می‌کنه)، و رنگ متن انتخاب‌شده با ::selection.

نکات مهم

  • ::before و ::after، همیشه به یک مقدار برای content نیاز دارند؛ در غیر این‌صورت، هیچ محتوایی تولید نمی‌کنند.
  • ::selection و ::marker، برخلاف ::before/::after، فقط مجموعه محدودی از Propertyها را می‌پذیرند.
  • ترکیب Pseudo-elementها با Pseudo-classها (مثل input:focus::placeholder)، امکان ساخت جلوه‌های بصری پویا و واکنش‌گرا را فراهم می‌کند.

اشتباهات رایج

  • فراموش کردن Property به اسم content در ::before یا ::after، که باعث می‌شود هیچ‌چیزی نمایش داده نشود.
  • تلاش برای تنظیم Propertyهایی مثل background-color یا margin روی ::selection یا ::marker، که پشتیبانی گسترده و قابل‌اعتمادی ندارند.
  • استفاده از ::before/::after برای نمایش اطلاعات معنایی مهم، به‌جای قرار دادن آن‌ها مستقیماً در HTML واقعی.

جمع‌بندی

شش Pseudo-element اصلی CSS (::before، ::after، ::first-letter، ::selection، ::marker و ::placeholder)، هرکدام بخش خاصی از یک عنصر یا محتوای مجازی آن را هدف قرار می‌دهند. ترکیب این Pseudo-elementها با Pseudo-classهایی مثل :focus، یا با توابعی مثل attr()، امکان ساخت جلوه‌های بصری پویا و واکنش‌گرا، بدون نیاز به جاوااسکریپت، را فراهم می‌کند؛ و با این جمع‌بندی نهایی، فصل هفدهم دوره را به پایان می‌رسانیم.