مبانی و مفاهیم برنامه‌نویسی, مقالات

راهنمای جامع شبه‌کلاس‌ها (Pseudo-classes) در CSS

راهنمای جامع شبه‌کلاس‌ها (Pseudo-classes) در CSS
شبه‌کلاس‌ها (Pseudo-classes) در CSS یکی از قابلیت‌های مهم CSS هستند که به توسعه‌دهندگان اجازه می‌دهند عناصر HTML را بر اساس وضعیت، موقعیت یا شرایط خاص آن‌ها انتخاب و استایل‌دهی کنند.نکته مهم: تفاوت اصلی شبه‌کلاس (Pseudo-class) با شبه‌عنصر (Pseudo-element) در این است که شبه‌کلاس حالت یا وضعیت خاصی از یک عنصر موجود را استایل‌دهی می‌کند مانند hover: با یک دو نقطه، در حالی که شبه‌عنصر بخش خاصی از یک عنصر را هدف قرار داده یا محتوای بصری جدیدی ایجاد می‌کند مانند before:: با دو تا دو نقطه.

در ادامه این مقاله، شبه‌کلاس‌های CSS را در چند بخش و بر اساس کاربرد و نوع عملکرد آن‌ها بررسی خواهیم کرد. برای هر گروه، نحوه عملکرد شبه‌کلاس‌ها به همراه نمونه‌کدهای عملی توضیح داده خواهد شد.

شبه‌کلاس CSS چیست؟

شبه‌کلاس در CSS انتخابگری ویژه است که برای استایل‌دهی به یک عنصر در وضعیت (State) خاصی استفاده می‌شود.

سینتکس کلیدی شبه‌کلاس‌ها :

selector:pseudo-class { 
property: value;
 }

بخش اول: شبه‌کلاس‌های تعاملی

این دسته از شبه کلاس ها به شما اجازه می‌دهند به رفتارهای لحظه‌ای کاربر مانند حرکت موس یا فشردن کلیدهای کیبورد پاسخ بصری دهید.

شبه کلاس hover

این pseudo-class زمانی عنصری را هدف قرار می‌دهد که نشانگر pointing device، مانند ماوس، روی آن قرار گرفته باشد.

برای مثال:

.product-card:hover {
 box-shadow: 10px 10px 10px 10px yellow;
 }
شبه کلاس hover

شبه کلاس hover

active شبه کلاس

active برای زمانی استفاده می‌شود که یک عنصر در حال فعال‌شدن در نتیجه تعامل کاربر است. برای مثال اگر داشته باشیم:

button:active { 
transform: scale(0.95);
 }

وقتی کاربر دکمه را فعال می‌کند، اندازه‌ی آن کمی کوچک می‌شود.

focus شبه کلاس

وقتی یک عنصر قابلیت دریافت focus داشته باشد ، می‌توان با شبه کلاس focus ظاهر آن را تغییر داد.

برای مثال اگر در HTML داشته باشیم:

<"نام خود را وارد کنید"=input type="text" placeholder>

برای CSS می‌توانیم بنویسیم:

input:focus {
 border: 2px solid blue;
 }
شبه‌کلاس focus

شبه‌کلاس focus

شبه کلاس focus-visible

شبه کلاس focus-visible شبیه شبه کلاس focus است، اما برای شرایطی طراحی شده است که نمایش بصری focus برای کاربر اهمیت دارد.

برای مثال:

button:focus-visible { 
outline: 3px solid blue;
 }

شبه کلاس focus-within

شبه کلاس focus-within زمانی یک عنصر را انتخاب می‌کند که خود عنصر یا یکی از عناصر داخل آن در حالت focus باشد.

برای مثال:

.form-group:focus-within { 
border: 2px solid blue; 
}

HTML:

<div class="form-group">

<label>Name</label>

<input type="text">
</div>

در اینجا زمانی که input در حالت focus قرار بگیرد، form-group. نیز با شبه کلاس focus-within قابل هدف قرار دادن است.

بخش دوم: شبه‌کلاس‌های مربوط به لینک و موقعیت

شبه کلاس visited

شبه کلاس visited برای لینک‌هایی استفاده می‌شود که کاربر قبلاً از آن‌ها بازدید کرده است. بعد از اینکه کاربر لینک را بازدید کرد، می‌توان ظاهر آن را متفاوت کرد.

<a href="https://example.com">Visit website</a>
a:visited {
 color: purple; 
}

شبه کلاس link

شبه کلاس link لینک‌هایی را هدف قرار می‌دهد که هنوز بازدید نشده‌اند.

برای مثال:

a:link { 
color: blue;
 }

شبه کلاس any-link

شبه کلاس any-link تمام لینک‌هایی را انتخاب می‌کند که دارای href هستند؛ یعنی هم لینک‌های بازدیدنشده و هم لینک‌های بازدیدشده.

 مثال:

a:any-link { 
text-decoration: none;
 }

شبه‌کلاس local-link

شبه‌کلاس local-link برای انتخاب لینک‌هایی استفاده می‌شود که مقصد آن‌ها با URL سند فعلی یکسان است.

این قابلیت در حال حاضر Experimental است و طبق MDN، مرورگرها هنوز از آن به‌صورت عمومی پشتیبانی نمی‌کنند.

مثال:

 

<nav>

<a href="/home">خانه</a>

<a href="/about">درباره ما</a>

<a href="/contact">تماس با ما</a>

</nav>

 

a:local-link {
 font-weight: bold;
 text-decoration: underline;
 }

شبه کلاس target

target عنصری را انتخاب می‌کند که شناسه آن با بخش Fragment موجود در URL مطابقت دارد؛ در این مثال با کلیک روی لینک، بخش جزئیات استایل متفاوت میگیرد.

 

<a href="#details">مشاهده جزئیات</a>

<section id="details">

<h2>جزئیات محصول</h2>

<p>اطلاعات کامل محصول در این بخش قرار دارد</p>

</section>

 

#details { 
padding: 20px; 
} 
#details:target { 
background: #fff3b0;
 border: 2px solid #e0b000;
 }
شبه‌کلاس target

شبه‌کلاس target

شبه کلاس scope

scope به عنصر یا محدوده‌ای اشاره می‌کند که selector در چارچوب آن ارزیابی می‌شود.

برای مثال: فقط المنت‌هایی که مستقیماً داخل یک container هستند و کلاس item دارند،

margin: 10px می‌گیرند.

@scope (.container) {
    :scope > .item {
        margin: 10px;
    }
}

بخش سوم: شبه‌کلاس‌های ساختاری

این دسته‌بندی امکان انتخاب عناصر را بر اساس موقعیت آن‌ها در ساختار DOM (رابطه والد-فرزندی) فراهم می‌سازد.

شبه کلاس root

شبه کلاس root عنصر ریشه‌ای سند را انتخاب می‌کند.در یک سند HTML، عنصر ریشه معمولاً <html> است.

برای مثال:

:root { 
--main-color: blue;
 }

شبه کلاس empty

شبه کلاس empty عنصری را انتخاب می‌کند که هیچ عنصر فرزند یا محتوای متنی غیرسفید نداشته باشد. وجود متن واقعی باعث می‌شود عنصر دیگر :empty نباشد، اما whitespace-only می‌تواند همچنان با شبه کلاس empty مطابقت داشته باشد.

برای مثال:

div:empty { 
display: none; 
}

شبه کلاس first-child

شبه کلاس first-child عنصری را انتخاب می‌کند که اولین فرزند والد خود باشد.

برای مثال اگر در html داشته باشیم:

<ul>

<li>HTML</li>

<li>CSS</li>

<li>JavaScript</li>

</ul>

می‌توان اولین li را این‌گونه انتخاب کرد:

li:first-child { 
color:red;
 }

 

شبه کلاس last-child

last-child آخرین فرزند والد را انتخاب می‌کند. برای مثال در لیست بالا میتوانیم داشته باشیم:

li:last-child {
 margin-bottom: 0; 
}

شبه کلاس ()nth-child

این pseudo-class به ما اجازه می‌دهد عنصر را بر اساس موقعیت آن در میان فرزندان والد انتخاب کنیم. برای مثال  اگر در HTML و CSS به ترتیب داشته باشیم :

<ul> 
      <li>محصول ۱</li>
      <li style="width: 200px;">محصول ۲</li>
      <li>محصول ۳</li>
      <li>محصول ۴</li>
      <li>محصول ۵</li>
      <li>محصول ۶</li>
    </ul>
li:nth-child(2) {
    color: yellow;
}

در اینجا دومین فرزند انتخاب می‌شود.

شبه کلاس ()nth-child

شبه کلاس ()nth-child

انتخاب عناصر زوج و فرد:

keywords آماده‌ای مانند odd و even وجود دارند:

li:nth-child(even) {
 background-color: lightgray;
 }
 li:nth-child(odd) {
 background-color: white;
 }

شبه کلاس ()nth-last-child

()nth-last-child شبیه :()nth-child است، اما شمارش عناصر را از آخر به اول انجام می‌دهد.

برای مثال:

li:nth-last-child(2) { 
color: red;
 }

در اینجا دومین li از انتهای لیست انتخاب می‌شود.

اگر HTML به شکل زیر باشد:

<ul>

<li>HTML</li>

<li>CSS</li>

<li>JavaScript</li>

<li>Python</li>

</ul>

عبارت li:nth-last-child(2) عنصر JavaScript را انتخاب می‌کند.

only-child شبه کلاس

only-child زمانی یک عنصر را انتخاب می‌کند که تنها فرزند والد خود باشد. بنابراین اگر والد حتی یک فرزند دیگر از نوع متفاوت داشته باشد، این pseudo-class اعمال نمی‌شود.

p:only-child { 
color: blue; 
}

first-of-type شبه کلاس

first-of-typeاولین عنصر از یک نوع مشخص را انتخاب می‌کند. برای مثال اگر چند عنصرp در یک والد وجود داشته باشد، اولین p انتخاب می‌شود.

p:first-of-type { 
font-weight: bold; 
}

last-of-type شبه کلاس

این pseudo-class آخرین عنصر از نوع مشخص را انتخاب می‌کند. در اینجا آخرین p داخل والد انتخاب می‌شود.

p:last-of-type { 
margin-bottom: 0;
 }

شبه کلاس ()nth-of-type

این شبه کلاس موقعیت عنصر را در میان siblingهای همان نوع عنصر بررسی می‌کند. فرض کنیم HTML ما به این صورت باشد:

<div>

<h2>Title</h2>

<p>First paragraph</p>

<p>Second paragraph</p>

</div>

و CSS:

p:nth-of-type(2) {
 color: blue; 
}

دومین p انتخاب می‌شود.

شبه کلاس ()nth-last-of-type

این شبه کلاس عناصر هم‌نوع را از انتهای والد به سمت ابتدا شمارش می‌کند. برای مثال اگر html به این صورت باشد:

<div>

<p>First</p>

<p>Second</p>

<p>Third</p>

</div>

و CSS:

p:nth-last-of-type(2) { 
color: red;
 }

p:nth-last-of-type(2) عنصر Second را انتخاب می‌کند.

شبه کلاس only-of-type

شبه کلاس only-of-type زمانی یک عنصر را انتخاب می‌کند که در میان فرزندان والد خود تنها عنصر از آن نوع باشد.

برای مثال:

p:only-of-type { 
color: blue; 
}

اگر HTML به شکل زیر باشد:

<div>

<h2>Title</h2>

<p>Only paragraph</p>

</div>

عنصرp انتخاب می‌شود، زیرا تنها عنصر p در آن والد است.

شبه‌کلاس heading

شبه‌کلاس heading برای انتخاب تمام عناصر عنوان HTML، یعنی h1 تا h6، استفاده می‌شود. این شبه‌کلاس در حال حاضر یک قابلیت جدید و آزمایشی محسوب می‌شود و پشتیبانی مرورگرها از آن محدود است.

 

:heading {
 color: blue;
 }

در این مثال تمام عناصر h1 تا h6 که در صفحه وجود دارند انتخاب می‌شوند.

شبه‌کلاس ()heading

شبه‌کلاس ()heading نسخه تابعی شبه کلاس heading است و برای انتخاب headingها بر اساس سطح آن‌ها استفاده می‌شود. این قابلیت نیز در حال حاضر آزمایشی است و پشتیبانی مرورگرها از آن محدود است.

مثال:

:heading(1, 2) {
color: darkblue;
}

در این مثال، headingهای سطح 1 و 2 یعنی h1 و h2 انتخاب می‌شوند.

بخش چهارم:شبه‌کلاس‌های فرم و ورودی‌ها (Form & Input Pseudo-classes)

این دسته از شبه کلاس ها برای طراحی فرم‌های تعاملی و ارائه بازخورد آنی به کاربر استفاده میشود .

شبه کلاس enabled

شبه کلاس enabled عناصر فرم را که فعال هستند انتخاب می‌کند.

برای مثال:

input:enabled { 
background-color: yellow; 
}

شبه کلاس disabled

شبه کلاس disabled عناصر فرم را که غیرفعال هستند انتخاب می‌کند.

برای مثال:

<input type="text" placeholder="Enter your name" disabled>
input:disabled { 
background-color: lightgray; 
}

شبه کلاس read-only

شبه کلاس read-only عناصری را هدف قرار می‌دهد که مقدارشان توسط کاربر قابل ویرایش نیست.

<input type="text" value="User ID" readonly>
input:read-only {
 background-color: red;
 }

شبه کلاس read-write

شبه کلاس read-write عناصری را انتخاب می‌کند که کاربر امکان ویرایش آن‌ها را دارد.

input:read-write { 
background-color: white;
 }

شبه کلاس placeholder-shown

شبه کلاس placeholder-shown زمانی یک input را انتخاب می‌کند که placeholder آن در حال نمایش باشد.

برای مثال:

<input type="text" placeholder="Enter your name">
input:placeholder-shown { 
background-color: lightgray; 
}

تا زمانی که placeholder نمایش داده شود، این selector روی input اعمال می‌شود.

شبه کلاس autofill

شبه کلاس autofill برای انتخاب فیلدهایی استفاده می‌شود که مرورگر آن‌ها را با اطلاعات ذخیره‌شده به‌صورت خودکار پر کرده است.

برای مثال:

input:autofill { 
border: 2px solid blue;
 }

نکته مهم این است که ظاهر autofill ممکن است تحت تأثیر رفتار و محدودیت‌های مرورگر نیز قرار داشته باشد.

شبه کلاس default

شبه کلاس default برای انتخاب کنترل فرمی استفاده می‌شود که در یک گروه، به‌عنوان گزینه پیش‌فرض در نظر گرفته شده است.

برای مثال:

input:default {
 outline: 2px solid blue; 
}

checked شبه کلاس

شبه کلاس checked برای کنترل‌هایی مانند checkbox و radio button زمانی استفاده می‌شود که انتخاب شده باشند.

برای مثال اگر در HTML داشته باشیم:

<input type="checkbox" id="agree">

<label for="agree"> موافق هستم</label>

برای CSS می‌توان نوشت:

input:checked { 
accent-color: green;
 }
شبه کلاس checked

شبه کلاس checked

همچنین می‌توان با selector مناسب، ظاهر label را نیز بر اساس وضعیت checkbox تغییر داد:

input:checked + label { 
color:red; 
}

در این حالت، زمانی که checkbox انتخاب شود، رنگlabel بعد از آن قرمز می‌شود

شبه کلاس indeterminate

شبه کلاس indeterminate زمانی استفاده می‌شود که وضعیت یک کنترل فرم نه کاملاً انتخاب‌شده و نه کاملاً انتخاب‌نشده باشد. برای مثال زمانی که یک checkbox اصلی باید نشان دهد که فقط بخشی از checkboxهای زیرمجموعه انتخاب شده‌اند.
مثال:

input:indeterminate {
    outline: 2px solid orange;
}

شبه‌کلاس blank برای ورودی‌ها

شبه‌کلاس blank برای انتخاب کنترل‌های ورودی‌ای استفاده می‌شود که مقدار آن‌ها خالی است. این شبه‌کلاس در حال حاضر Experimental است و پشتیبانی مرورگرها از آن کامل نیست.

مثال:

 

<label for="name">نام:</label>
input:blank {
 border: 2px solid red;
 }

شبه کلاس valid

شبه کلاس valid زمانی می‌تواند یک کنترل فرم را انتخاب کند که مقدار آن با قواعد اعتبارسنجی تعریف‌شده برای آن مطابقت داشته باشد. برای مثال اگر داشته باشیم:

<input type="email" required>

 

input:valid {
 border: 2px solid green;
 }

اگر مقدار واردشده یک email معتبر باشد، می‌توان ظاهر input را تغییر داد.

شبه کلاس valid

شبه کلاس valid

شبه کلاس invalid

شبه کلاس invalid برعکس شبه کلاس valid است و زمانی مورد استفاده قرار می‌گیرد که مقدار کنترل با قواعد اعتبارسنجی مطابقت نداشته باشد.

input:invalid {
 border: 2px solid red; 
}

برای مثال اگر یک input از نوع email باشد و مقدار نامعتبر وارد شود، این selector می‌تواند ظاهر متفاوتی ایجاد کند.

شبه کلاس user-valid

شبه کلاس user-valid زمانی یک کنترل فرم را هدف قرار می‌دهد که کاربر با آن تعامل کرده باشد و مقدار آن با قواعد اعتبارسنجی تعریف‌شده مطابقت داشته باشد.

برای مثال:

input:user-valid {
 border: 2px solid green;
 }

شبه کلاس user-invalid

شبه کلاس user-invalid زمانی یک کنترل فرم را انتخاب می‌کند که کاربر با آن تعامل کرده باشد و مقدار واردشده با قواعد اعتبارسنجی مطابقت نداشته باشد.

برای مثال:

input:user-invalid {
 border: 2px solid red; 
}

شبه کلاس in-range

شبه کلاس in-range زمانی اعمال می‌شود که مقدار ورودی در محدوده‌ی تعیین‌شده باشد.

برای مثال:

<input type="number" min="1" max="100">
input:in-range {
 border: 2px solid green;
 }

شبه کلاس out-of-range

زمانی اعمال می‌شود که مقدار ورودی خارج از محدوده‌ی تعیین‌شده باشد.

input:out-of-range {
 border: 2px solid red;
 }

Required شبه کلاس

شبه کلاس required برای کنترل‌های فرمی استفاده می‌شود که دارای ویژگی required هستند.

می‌توان نوشت:

<input type="email" required>

سپس:

input:required {
 border-left: 3px solid orange; 
}

شبه کلاس optional

شبه کلاس optional کنترل‌هایی را انتخاب می‌کند که الزامی نیستند.

input:optional { 
background-color: blue;
 }

اگر یک input ویژگی required نداشته باشد، می‌تواند با این selector هدف قرار گیرد.

بخش پنجم: شبه‌کلاس‌های زبانی

شبه کلاس ()lang

شبه کلاس ()lang عناصری را بر اساس زبان تعیین‌شده برای آن‌ها انتخاب می‌کند.

برای مثال:

p:lang(en) {
 font-family: Arial, sans-serif;
 }

شبه کلاس ()dir

شبه کلاس ()dir عناصر را بر اساس جهت نوشتار انتخاب می‌کند.

برای مثال:

p:dir(rtl) { 
text-align: right;
 }

و برای محتوای چپ‌به‌راست:

p:dir(ltr) {
 text-align: left;
 }

بخش ششم: شبه‌کلاس‌های وضعیت نمایش

شبه کلاس open

شبه کلاس open عناصری را هدف قرار می‌دهد که در وضعیت باز قرار دارند.

این شبه‌کلاس برای برخی عناصر و قابلیت‌های HTML که دارای حالت باز و بسته هستند کاربرد دارد.

برای مثال:

details:open {
 border-color: blue;
 background: yellow; }
شبه‌کلاس‌های وضعیت نمایش

شبه‌کلاس‌های وضعیت نمایش

شبه کلاس popover-open

شبه کلاس popover-open عنصری را انتخاب می‌کند که در حال حاضر به‌عنوان یک popover باز نمایش داده می‌شود.

[popover]:popover-open {
    border: 2px solid black;
}

این pseudo-class برای styling وضعیت باز بودن popover کاربرد دارد.

شبه کلاس modal

شبه کلاس modal عناصری را هدف قرار می‌دهد که در وضعیت modal قرار دارند؛ برای مثال dialogای که به‌صورت modal باز شده است.

dialog:modal { 
border: 2px solid black;
 }

شبه کلاس fullscreen

شبه کلاس fullscreen عنصری را انتخاب می‌کند که در حال حاضر در حالت تمام‌صفحه (fullscreen) نمایش داده می‌شود.

برای مثال:

video:fullscreen { 
width: 100%;
 }

شبه کلاس picture-in-picture

شبه کلاس picture-in-picture زمانی یک عنصر ویدئویی را هدف قرار می‌دهد که در حالت Picture-in-Picture قرار داشته باشد.

برای مثال:

video:picture-in-picture { 
border: 3px solid blue;
 }

بخش هفتم:شبه‌کلاس‌های مربوط به وضعیت رسانه

این شبه‌کلاس‌ها به ما اجازه می‌دهند ظاهر یک عنصر را بر اساس وضعیت پخش آن تغییر دهیم.

شبه کلاس playing

شبه کلاس playing عنصری را انتخاب می‌کند که در حال پخش شدن است.

برای مثال:

video:playing {
 border: 3px solid green;
 }

شبه کلاس paused

شبه کلاس paused زمانی یک عنصر رسانه‌ای را انتخاب می‌کند که در حالت توقف قرار داشته باشد.

برای مثال:

video:paused {
 opacity: 0.6;
 }

seeking شبه کلاس

شبه کلاس seeking برای زمانی کاربرد دارد که کاربر در حال تغییر موقعیت پخش یک منبع رسانه‌ای باشد؛ برای مثال زمانی که کاربر نوار پیشرفت ویدئو را به نقطه دیگری منتقل می‌کند.

مثال:

video:seeking {
 opacity: 0.7;
 }

شبه کلاس buffering

شبه کلاس buffering برای زمانی استفاده می‌شود که رسانه در حال دریافت یا آماده‌سازی داده برای ادامه پخش باشد.

برای مثال:

video:buffering {
 opacity: 0.5;
 }

شبه کلاس stalled

شبه کلاس stalled زمانی یک منبع رسانه‌ای را هدف قرار می‌دهد که دریافت داده برای ادامه پخش آن متوقف شده باشد.

برای مثال:

video:stalled {
 border: 3px solid orange;
 }

شبه کلاس muted

شبه کلاس muted رسانه‌ای را انتخاب می‌کند که صدای آن در حالت بی‌صدا (Mute) قرار دارد.

برای مثال:

video:muted {
 opacity: 0.8;
 }

شبه کلاس volume-locked

شبه کلاس volume-locked برای رسانه‌ای استفاده می‌شود که کنترل میزان صدای آن توسط کاربر امکان‌پذیر نیست.

برای مثال:

video:volume-locked { 
cursor: not-allowed;
 }

نکته: این شبه‌کلاس‌ها بیشتر برای قابلیت‌های جدید و تخصصی CSS طراحی شده‌اند و برخلاف شبه‌کلاس‌های رایجی مانند شبه کلاس های hover و focus، ممکن است هنوز در همه مرورگرها یا نسخه‌های آن‌ها پشتیبانی نشوند. بنابراین هنگام استفاده از آن‌ها، بررسی وضعیت پشتیبانی مرورگرها و در نظر گرفتن روش جایگزین برای محیط‌های ناسازگار اهمیت دارد

بخش هشتم:شبه‌کلاس‌های زمانی

برخی از شبه‌کلاس‌های CSS برای محتوایی استفاده می‌شوند که دارای مفهوم زمانی است.

شبه کلاس current

شبه کلاس current برای انتخاب محتوایی استفاده می‌شود که در زمان فعلی در حال اجرا یا نمایش است.

برای مثال:

:current(p, li) {
 background-color: yellow;
 }

current قابلیتی جدید/آزمایشی است و کاربرد عملی و پشتیبانی آن محدود است

شبه کلاس past

شبه کلاس past محتوایی را انتخاب می‌کند که زمان نمایش آن گذشته است.

برای مثال:

video::cue(:past) { 
opacity: 0.5;
 }

شبه کلاس future

شبه کلاس future محتوایی را انتخاب می‌کند که هنوز زمان نمایش یا فعال شدن آن فرا نرسیده است.

برای مثال:

video::cue(:future) { 
opacity: 0.8;
 }

بخش نهم: شبه‌کلاس‌های مربوط به Shadow DOM و Web Components

این شبه‌کلاس‌ها به توسعه‌دهنده اجازه می‌دهند host یا بخش‌هایی از ساختار Shadow DOM را هدف قرار دهد.

شبه کلاس defined

شبه کلاس defined عناصری را انتخاب می‌کند که توسط مرورگر به‌عنوان یک عنصر تعریف‌شده شناخته می‌شوند.

مثال:

my-element:defined {
 display: block;
 }

شبه کلاس host

شبه کلاس host برای انتخاب عنصری استفاده می‌شود که به‌عنوان host یک Shadow DOM عمل می‌کند.

برای مثال:

:host { 
display: block;
 border: 1px solid gray;
 padding: 16px;
 }

در این مثال، style روی عنصر host مربوط به Shadow DOM اعمال می‌شود.

شبه کلاس ()host

شبه کلاس ()host نسخه تابعی شبه کلاس host است و امکان انتخاب host بر اساس یک selector مشخص را فراهم می‌کند.

برای مثال:

:host(.dark) {
 background-color: black;
 color: white;
 }

در این حالت، اگر host دارای کلاس dark باشد، style مشخص‌شده روی آن اعمال می‌شود. HTML مربوط به استفاده از این Web Component می‌تواند به شکل زیر باشد:

<my-card class="dark"></my-card>

شبه کلاس ()host-context

شبه کلاس ()host-context امکان انتخاب host را بر اساس شرایط مربوط به محیط یا ancestor های آن فراهم می‌کند.

برای مثال:

:host-context(.dark-theme) {
 color: white;
 }

در این مثال، اگر Web Component در محیطی قرار گرفته باشد که ancestor مناسب آن دارای کلاس dark-theme است، می‌توان ظاهر component را متناسب با آن تغییر داد.

شبه کلاس host-context() یک قابلیت قدیمی و Deprecated است و برای پروژه‌های جدید توصیه نمی‌شود؛ در اینجا صرفاً برای آشنایی معرفی شده است.

شبه کلاس has-slotted

:has-slotted برای بررسی وجود محتوایی استفاده می‌شود که از طریق slot در یک Web Component قرار گرفته است.

برای مثال:

:has-slotted { 
border: 2px solid blue;
 }

این selector فقط داخل CSS متعلق به Shadow DOM کار می‌کند و فعلاً هم Limited Availability دارد. MDN همچنین می‌گوید حتی یک whitespace text node هم می‌تواند باعث match شدن :has-slotted شود

بخش دهم: شبه‌کلاس‌های تابعی و منطقی (Logical & Functional)

این دسته از شبه کلاس ها امکانات پیشرفته‌تری برای ساخت selectorها در اختیار توسعه‌دهنده قرار می‌دهند .

شبه کلاس ()not

این pseudo-class عناصری را انتخاب می‌کند که با selector مشخص‌شده مطابقت ندارند. در این مثال، تمام buttonهایی که class آن‌ها primary نیست، انتخاب می‌شوند.

button:not(.primary) {
 background-color: gray;
 }

شبه کلاس ()is

شبه کلاس ()is برای ترکیب چند selector در یک selector استفاده می‌شود.

برای مثال به جای:

h1, h2, h3 {
 color:red;
 }

می‌توان نوشت:

:is(h1, h2, h3) {
 color:red;
 }

شبه کلاس ()where

شبه کلاس ()where همیشه specificity صفر ایجاد می‌کند. این ویژگی می‌تواند زمانی مفید باشد که بخواهیم یک style پایه تعریف کنیم که به‌راحتی توسط ruleهای دیگر override شود.

برای مثال اگر داشته باشیم:

:where(h1, h2, h3) {
 margin-bottom: 1rem; 
}

 

شبه کلاس ()has

این pseudo-class اجازه می‌دهد یک عنصر را بر اساس وجود یک عنصر مرتبط درون آن یا رابطه‌ی مشخصی در ساختار انتخاب کنیم.

برای مثال:

 

<div class="card">

<h3>محصول اول</h3>

</div>
<div class="card">

<h3>محصول دوم</h3>

<img src="product.jpg" alt="عکس محصول">
</div>

 

.card:has(img) { 
border-color: blue;
 background: yellow;
 }

در این مثال، cardهایی انتخاب می‌شوند که شامل یک img هستند.

شبه کلاس ()has

شبه کلاس ()has

بخش یازدهم: شبه‌کلاس‌های وضعیت سفارشی

شبه کلاس ()state

برای انتخاب وضعیت سفارشی یک Custom Element استفاده می‌شود و بیشتر در Web Components کاربرد دارد.

برای مثال:

my-element:state(active) { 
border: 2px solid green;
 }

بخش دوازدهم: شبه‌کلاس‌های صفحات و چاپ

شبه کلاس های first،left و right

این pseudo-classها در زمینه‌های خاص مربوط به صفحه‌بندی و چاپ کاربرد دارند.

برای مثال:

@page :first {
 margin-top: 0; 
}

شبه کلاس first برای صفحه اول، و شبه کلاس هاسleft و right برای صفحات چپ و راست در قواعد مربوط به @page استفاده می‌شوند.

شبه کلاس blank

شبه کلاس blank برای هدف قرار دادن صفحه‌ای استفاده می‌شود که در زمینه صفحه‌بندی و چاپ، محتوای قابل نمایش ندارد.

برای مثال:

@page :blank {
 margin: 0;
 }

بخش سیزدهم شبه‌کلاس‌های مربوط به View Transition

View Transition API امکان ایجاد انتقال‌های بصری بین وضعیت‌های مختلف یک صفحه یا رابط کاربری را فراهم می‌کند. CSS نیز شبه‌کلاس‌هایی برای کنترل برخی وضعیت‌های مربوط به این transitionها دارد.

شبه کلاس active-view-transition

شبه کلاس active-view-transition زمانی قابل استفاده است که یک View Transition در حال اجرا باشد.

برای مثال:

::view-transition-group(*) {
 animation-duration: 0.5s;
 }

شبه کلاس ()active-view-transition-type

شبه کلاس ()active-view-transition-type نسخه تابعی این قابلیت است و برای هدف قرار دادن View Transitionهایی با type مشخص استفاده می‌شود.

برای مثال:

html:active-view-transition-type(slide)::view-transition-old(root) {

animation-name: slide-out;
}

در این مثال، rule مربوط به transitionهایی اعمال می‌شود که type آن‌ها slide باشد.

بخش چهاردهم:شبه‌کلاس‌های جدید و تخصصی CSS

در کنار شبه‌کلاس‌های رایج CSS، مجموعه‌ای از شبه‌کلاس‌های جدید و تخصصی نیز در حال توسعه یا پیاده‌سازی هستند. برخی از این قابلیت‌ها هنوز پشتیبانی گسترده‌ای در مرورگرها ندارند؛ بنابراین استفاده از آن‌ها باید با توجه به وضعیت استاندارد و پشتیبانی مرورگرها انجام شود.

شبه‌کلاس xr-overlay

شبه‌کلاس xr-overlay برای انتخاب عنصر overlay مربوط به DOM در یک جلسه واقعیت افزوده یا واقعیت مجازی immersive استفاده می‌شود.

مثال:

:xr-overlay { 
background: rgba(0, 0, 0, 0.7);
 color: white;
 }

در محیطی که یک WebXR immersive session از DOM overlay پشتیبانی می‌کند، این selector می‌تواند برای اعمال style به عنصر overlay مورد استفاده قرار گیرد.

شبه‌کلاس target-before

شبه‌کلاس target-before برای انتخاب scroll markerهایی که قبل از scroll marker فعال قرار گرفته‌اند استفاده می‌شود.

MDN این قابلیت را Experimental و با پشتیبانی محدود معرفی می‌کند.

مثال:

::scroll-marker:target-before { 
opacity: 0.5;
 }

در این مثال، scroll markerهایی که قبل از marker فعال قرار گرفته‌اند، با opacity کمتر نمایش داده می‌شوند.

نکته: شبه کلاس target-before به‌طور معمول روی عناصر HTML عادی استفاده نمی‌شود و برای scroll-markerهایی کاربرد دارد که در یک scroll-marker group قرار گرفته‌اند.

شبه‌کلاس target-current

شبه‌کلاس target-current برای انتخاب scroll marker فعال استفاده می‌شود؛ یعنی marker مربوط به محتوایی که در حال حاضر موقعیت فعال scroll را دارد.

مثال:

::scroll-marker:target-current {
 transform: scale(1.2);
 }

در این مثال، scroll marker فعال کمی بزرگ‌تر نمایش داده می‌شود.

شبه‌کلاس target-after

شبه‌کلاس target-after برای انتخاب scroll markerهایی که بعد از scroll marker فعال قرار گرفته‌اند استفاده می‌شود.

مثال:

::scroll-marker:target-after {
 opacity: 0.6;
 }

در این مثال، markerهایی که بعد از marker فعال قرار دارند، با opacity کمتر نمایش داده می‌شوند.

شبه‌کلاس interest-source

این شبه‌کلاس عنصر آغازکننده تعامل یا همان interest invoker را زمانی انتخاب می‌کند که کاربر نسبت به آن عنصر علاقه یا interaction موردنظر را نشان داده باشد.

مثال:

<button interestfor="tooltip">

راهنما

</button>
<div id="tooltip" popover="hint">

اطلاعات بیشتر

</div>

 

:interest-source {
 outline: 2px solid blue;
 }

در این مثال، هنگامی که عنصر دکمه به‌عنوان interest source فعال شود، می‌توان با شبه کلاس interest-source ظاهر آن را تغییر داد.

شبه‌کلاس interest-target

شبه‌کلاس interest-target مکمل شبه کلاسinterest-source است و برای انتخاب عنصر مقصد مرتبط با interest استفاده می‌شود.

مثال

HTML:

<button interestfor="tooltip">

راهنما

</button>
<div id="tooltip" popover="hint">

اطلاعات بیشتر درباره این گزینه

</div>

 

:interest-target { 
border: 2px solid blue; 
}

در این مثال، زمانی که interest مربوط به عنصر مقصد فعال باشد، می‌توان با شبه کلاس interest-target ظاهر آن را تغییر داد.

جمع‌بندی

شبه‌کلاس‌ها از ابزارهای کلیدی CSS به شمار می‌روند که امکان انتخاب عناصر را بر اساس وضعیت، موقعیت یا شرایط خاص فراهم می‌سازند. این قابلیت‌ها از حالت‌های پرکاربردی همچون شبه کلاس های hover و focus تا گزینه‌های پیشرفته‌تری مانند شبه کلاس های has()و is() را در بر می‌گیرند و هریک در جایگاه مناسب خود کاربرد دارند.

هدف از فراگیری شبه‌کلاس‌ها، حفظ تمامی موارد موجود نیست؛ بلکه درک صحیح کارکرد هر یک و به‌کارگیری آن‌ها برای نگارش CSS دقیق‌تر، خوانا‌تر و قابل نگهداری‌تر است. همچنین با توجه به توسعه مستمر CSS، بررسی میزان پشتیبانی مرورگرها از شبه‌کلاس‌های جدید پیش از استفاده ضروری است.

منابع

1. Mozilla Contributors. Pseudo-classes – CSS. MDN Web Docs. Retrieved from:

https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/Pseudo-classes

2. Mozilla Contributors. CSS selectors guide. MDN Web Docs. Retrieved from:

https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Selectors

3. Mozilla Contributors. UI pseudo-classes and forms. MDN Web Docs. Retrieved from:

https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Forms/UI_pseudo-classes

4. Mozilla Contributors. Styling links in CSS. MDN Web Docs. Retrieved from:

https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Text_styling/Styling_links

5. Mozilla Contributors. Using the :target pseudo-class in selectors. MDN Web Docs. Retrieved from: https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Selectors/Using_%3Atarget

6. World Wide Web Consortium (W3C). Selectors Level 4 (W3C Recommendation / Draft). Retrieved from: https://www.w3.org/TR/selectors-4/

7. World Wide Web Consortium (W3C). Selectors Level 5 (W3C Working Draft). Retrieved from: https://www.w3.org/TR/selectors-5/

13. World Wide Web Consortium (W3C). HTML Invoker Commands & Interest Group Spec (CSS Interest Pseudo-classes). Retrieved from: https://open-ui.org/components/invokers.explainer/

14. World Wide Web Consortium (W3C). CSS Overflow Module Level 5 (Scroll-marker pseudo-classes). Retrieved from: https://www.w3.org/TR/css-overflow-5/

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *