FA-TOOLS — Header Component

ترفندهای استفاده از Pseudo-class های پیشرفته CSS برای تعامل بهتر با کاربر

سلام رفیق برنامه‌نویس! تا حالا شده بخوای با CSS یه چیز خفن بسازی که تعامل کاربر با سایتت رو حسابی بهبود بده، اما فکر کردی فقط جاوااسکریپت از پسش برمیاد؟ اشتباه می‌کنی! Pseudo-class ها، مخصوصاً اون پیشرفته‌هاشون، اینجا مثل یه شوالیه با زره براق نجات‌دهنده ظاهر می‌شن. باهاشون می‌تونی بدون نوشتن حتی یک خط جاوااسکریپت، یه عالمه افکت‌های پویا، انتخاب‌های هوشمندانه و تعاملات روون بسازی. پس اگه دنبال یه ابزار حرفه‌ای برای بهبود تجربه کاربری هستی، این مقاله رو تا آخر بخون و اگه سوالی داشتی، هر وقت خواستی می‌تونی با شماره 09202232789 تماس بگیری تا گپ بزنیم.

🚀 نقشه راه: چطور تعامل کاربر رو متحول کنیم؟

1. پایه و اساس:

درک کامل مفهوم Pseudo-class و تفاوتش با Pseudo-element.

2. غواصی عمیق:

آشنایی با Pseudo-class های پیشرفته مثل :nth-child()، :not()، :has().

3. سناریوهای واقعی:

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

4. رفع مشکلات:

راهکارهای عملی برای چالش‌های رایج و عیب‌یابی.

Pseudo-class ها چی هستند؟ (یه مرور خودمونی)

خب، قبل از اینکه بریم سراغ بخش‌های هیجان‌انگیز، بهتره یه یادآوری کوچیک داشته باشیم. Pseudo-class ها یه راهکار فوق‌العاده توی CSS هستن که بهت اجازه میدن المنت‌ها رو بر اساس حالت خاص یا موقعیتشون توی درخت DOM انتخاب کنی. مثلاً، وقتی کاربر ماوس رو روی یه دکمه میاره (حالت :hover)، یا وقتی یه لینک بازدید شده (حالت :visited). اینا Pseudo-class های پایه‌ای هستن که همه‌مون باهاشون سروکار داشتیم. اما داستان به اینجا ختم نمیشه! دنیای Pseudo-class ها خیلی وسیع‌تر و قدرتمندتر از این حرفاست. این ترفندها بهت کمک می‌کنن تا یه وب‌سایت پویاتر و جذاب‌تر بسازی، بدون اینکه نیاز به کدنویسی جاوااسکریپت زیاد داشته باشی و این خودش یه امتیاز بزرگ حساب میشه.

شیرجه به عمق: Pseudo-class های پیشرفته CSS برای تعامل

بریم سراغ اونایی که کمتر باهاشون کار کردی ولی کلی کار راه بندازن. این Pseudo-class ها، قدرت انتخاب المنت‌ها رو توی موقعیت‌های پیچیده‌تر بهت میدن و یه لایه جدید از تعامل رو به طراحی‌ت اضافه می‌کنن.

:nth-child() و :nth-of-type() – نظم‌دهنده لیست‌ها و جداول

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

  • :nth-child(odd) و :nth-child(even): انتخاب آیتم‌های فرد یا زوج.
  • :nth-child(3n): انتخاب هر سومین آیتم.
  • :nth-child(3n+1): انتخاب اولین، چهارمین، هفتمین و… آیتم.
  • :nth-last-child(n): انتخاب از آخر به اول.

فرق :nth-child() با :nth-of-type() چیه؟ اولی موقعیت رو بدون در نظر گرفتن نوع تگ می‌شمره، اما دومی فقط بین تگ‌های هم‌نوعش حساب و کتاب می‌کنه. برای مثال، اگه یه div و بعدش دو تا p داشته باشی، p:nth-child(2) هیچ‌چیزی رو انتخاب نمی‌کنه چون div فرزند اوله، نه p. اما p:nth-of-type(1) اولین p رو انتخاب می‌کنه.

کپی


/* مثال برای :nth-child() */
ul li:nth-child(odd) {
    background-color: #f0f8ff; /* رنگ پس‌زمینه برای آیتم‌های فرد */
    color: #333;
}

ul li:nth-child(even) {
    background-color: #e0f2f7; /* رنگ پس‌زمینه برای آیتم‌های زوج */
    color: #333;
}

/* مثال برای :nth-last-child() */
div p:nth-last-child(1) { /* آخرین پاراگراف در div را انتخاب می‌کند */
    border-bottom: 2px solid #e74c3c;
    padding-bottom: 5px;
}
    

:not() – استثناها را مدیریت کن!

Pseudo-class :not() بهت اجازه میده المنت‌هایی رو انتخاب کنی که یک Selector خاص رو ندارن. این یعنی “هر چیزی به جز این!” و واقعاً توی کنترل دقیق استایل‌ها و جلوگیری از تداخل کمک می‌کنه.

  • انتخاب همه لینک‌ها به جز یکی: مثلاً می‌خوای همه لینک‌ها آبی باشن، به جز اونایی که کلاس .special دارن.
  • استایل‌دهی به فرم‌ها: انتخاب همه فیلدهای ورودی به جز دکمه‌های Submit.
  • منوهای ناوبری: استایل دادن به تمام آیتم‌های لیست به جز آیتم آخری (برای حذف Border-right).
کپی


/* همه دکمه‌ها به جز دکمه با کلاس .primary */
button:not(.primary) {
    background-color: #ccc;
    color: #333;
    border: 1px solid #999;
}

/* همه آیتم‌های لیست به جز آیتم‌های غیرفعال (disabled) */
li:not(:disabled) {
    opacity: 1;
    cursor: pointer;
}
    

:has() – والدها هم اهمیت دارند! (یه کشف جدید و قدرتمند)

این یکی واقعاً یه گام بزرگه توی دنیای CSS! :has() بهت اجازه میده المنت‌ها رو بر اساس اینکه فرزند یا نوه خاصی دارن یا نه انتخاب کنی. این یعنی چی؟ یعنی برای اولین بار می‌تونی یه المنت والد رو بر اساس محتوای فرزندش استایل بدی! قبلاً این کار فقط با جاوااسکریپت ممکن بود.

  • کارت‌های محصول: اگه کارتی عکس محصول رو نداره، پس‌زمینه‌ش رو خاکستری کن.
  • لیست‌های پیام: اگه یه پیام، دکمه “حذف” داره، یه آیکون هشدار به والدش اضافه کن.
  • عناصر فرم: اگه یه فیلد ورودی معتبر نیست، والدش رو قرمز کن.

البته حواست باشه، :has() نسبتاً جدیده و ممکنه توی همه مرورگرها پشتیبانی نشه. همیشه قبل از استفاده، سازگاری مرورگرها رو چک کن.

کپی


/* اگر div فرزندی از نوع img داشت */
div:has(img) {
    border: 2px solid #2ecc71;
    padding: 10px;
}

/* اگر فرم شامل input نامعتبر بود */
form:has(input:invalid) {
    background-color: #ffe6e6; /* پس‌زمینه فرم را هشداردهنده می‌کند */
}
    

:focus-within و :focus-visible – تعاملات فرمی هوشمند و دسترس‌پذیر

این دو تا برای فرم‌ها و افزایش دسترس‌پذیری فوق‌العاده‌ان:

  • :focus-within: وقتی یک المنت (مثلاً یک div والد) شامل یک المنت دیگه باشه که در حال focus هست، انتخاب میشه. این برای هایلایت کردن کل گروه فیلدهای یک فرم عالیه، وقتی کاربر داره توش تایپ می‌کنه.
  • :focus-visible: این Pseudo-class وقتی المنت در حالت focus هست و مرورگر تصمیم می‌گیره که این focus باید به صورت بصری به کاربر نشان داده بشه، فعال میشه. این به بهبود دسترس‌پذیری کمک می‌کنه و فقط زمانی که کاربر با کیبورد پیمایش می‌کنه، هایلایت focus رو نشون میده، نه وقتی با ماوس کلیک می‌کنه.
کپی


/* هایلایت کردن کل بخش فرم وقتی یک فیلد فعال است */
.form-group:focus-within {
    box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.5);
    border-color: #3498db;
}

/* سفارشی‌سازی focus برای کیبورد */
button:focus-visible {
    outline: 2px solid #2ecc71;
    outline-offset: 2px;
}
    

:target – جادوی لینک‌های داخلی بدون جاوااسکریپت!

با :target می‌تونی المنت‌هایی رو استایل بدی که آیدی‌شون توی URL مرورگر (بعد از #) وجود داره. این برای ساخت تب‌های ساده، آکاردئون‌ها یا هایلایت کردن بخشی از صفحه که کاربر بهش لینک داده، عالیه و نیازی به جاوااسکریپت نداره.

  • ساخت تب‌های CSS: با کلیک روی لینک، محتوای تب مورد نظر نمایش داده میشه.
  • هایلایت کردن بخش‌های مقاله: وقتی کاربر به یه بخش خاص از مقاله لینک میده (مثلاً /article#section-id)، اون بخش به طور موقت هایلایت میشه.
کپی


/* وقتی کاربر به این بخش لینک می‌دهد، هایلایت می‌شود */
.section:target {
    background-color: #ecf0f1;
    border-left: 5px solid #2ecc71;
    padding: 15px;
    transition: background-color 0.3s ease;
}

/* مثال برای ساخت تب */
.tab-content {
    display: none;
}
.tab-content:target {
    display: block;
}
    

:dir() و :lang() – چندزبانگی و جهت‌دهی متن هوشمند

اگه سایت چندزبانه داری یا نیاز به کنترل جهت متن بر اساس زبان داری، اینا به کارت میان:

  • :dir(ltr) و :dir(rtl): المنت‌هایی رو انتخاب می‌کنه که جهت متنشون چپ به راست (Left-to-Right) یا راست به چپ (Right-to-Left) باشه. این خیلی کمک می‌کنه تا بدون نیاز به کلاس‌های اضافی، استایل‌های مناسب برای هر جهت رو اعمال کنی.
  • :lang(fa) و :lang(en): المنت‌هایی رو انتخاب می‌کنه که زبانشون با مقدار مشخص شده مطابقت داره. برای ترجمه و بومی‌سازی استایل‌ها عالیه. مثلاً فونت‌ها یا فاصله بین خطوط برای زبان‌های مختلف.
کپی


/* تنظیم فونت برای محتوای فارسی */
:lang(fa) p {
    font-family: 'Vazirmatn', 'Arial', sans-serif;
    line-height: 2;
}

/* تنظیم چینش و تراز متن برای زبان‌های راست به چپ */
p:dir(rtl) {
    text-align: right;
    margin-right: 0;
    margin-left: 20px;
}
    

سناریوهای کاربردی: تعامل بهتر با کاربر با Pseudo-class ها

حالا که با چند تا از Pseudo-class های پیشرفته آشنا شدی، بیا ببینیم چطور می‌تونیم باهاشون یه تجربه کاربری جذاب‌تر بسازیم.

ساخت لیست‌های پویا با رنگ‌آمیزی متناوب

این رایج‌ترین کاربرد :nth-child() یا :nth-of-type() هست. می‌تونی به راحتی با چند خط کد، به لیست‌ها یا ردیف‌های جدولت ظاهر حرفه‌ای بدی.

کپی


/* برای لیست‌ها */
ul li:nth-child(odd) {
    background-color: #f8f8f8;
}
ul li:nth-child(even) {
    background-color: #eef;
}

/* برای ردیف‌های جدول */
table tr:nth-child(even) {
    background-color: #f2f2f2;
}
    

سفارشی‌سازی فرم‌ها برای بازخورد بهتر

با :valid، :invalid، :required و :placeholder-shown می‌تونی بازخورد بصری خیلی خوبی به کاربر بدی بدون اینکه جاوااسکریپت بنویسی.

کپی


/* فیلد معتبر */
input:valid {
    border-color: #2ecc71;
    box-shadow: 0 0 5px rgba(46, 204, 113, 0.3);
}

/* فیلد نامعتبر */
input:invalid {
    border-color: #e74c3c;
    box-shadow: 0 0 5px rgba(231, 76, 60, 0.3);
}

/* فیلدهای الزامی که هنوز پر نشده‌اند */
input:required:placeholder-shown {
    border-color: #f39c12;
}

/* هایلایت کردن کل گروه فرم هنگام فوکوس */
.input-group:focus-within {
    background-color: #fcfcfc;
    border-left: 4px solid #3498db;
    padding: 10px;
}
    

ایجاد افکت‌های هاور و انتخاب حرفه‌ای

Pseudo-class های ساده مثل :hover، :active، :checked رو با بقیه ترکیب کن تا افکت‌های خاص و جذاب بسازی.

کپی


/* دکمه‌ای که هنگام هاور متن داخلی‌اش تغییر می‌کند */
.button-with-text::before {
    content: "کلیک کن";
}
.button-with-text:hover::before {
    content: "شگفت‌انگیز!";
    color: #f1c40f;
}

/* آیتم لیست انتخابی (رادیو باتن/چک باکس پنهان شده) */
input[type="radio"]:checked + label {
    background-color: #2ecc71;
    color: white;
    border-color: #27ae60;
}
    

مقایسه Pseudo-class های رایج برای تعامل

Pseudo-class کاربرد اصلی در تعامل
:hover تغییر استایل المنت هنگام قرار گرفتن ماوس روی آن (افکت‌های جذاب بصری)
:focus استایل‌دهی به المنت‌های ورودی (مانند فیلدها و دکمه‌ها) هنگام انتخاب توسط کاربر
:active استایل‌دهی به المنت هنگام کلیک یا لمس (برای دکمه‌ها و لینک‌ها)
:checked انتخاب المنت‌های چک‌شده (مانند Radio Button و Checkbox)
:enabled / :disabled استایل‌دهی به المنت‌های فعال یا غیرفعال (مخصوصاً در فرم‌ها)
:read-only / :read-write استایل‌دهی به فیلدهای فقط خواندنی یا قابل ویرایش

استراتژی‌های بهینه‌سازی و نکات حرفه‌ای برای Pseudo-class ها

استفاده از Pseudo-class ها، هر چند قدرتمنده، اما نیاز به یک سری ظرافت‌ها داره تا هم پرفورمنس سایتت رو حفظ کنی و هم به مشکلات غیرمنتظره نخوری.

سازگاری مرورگرها رو جدی بگیر

بعضی از Pseudo-class های پیشرفته مثل :has() یا :focus-visible جدیدتر هستن و ممکنه توی مرورگرهای قدیمی پشتیبانی نشن. همیشه از ابزارهایی مثل Can I use… برای چک کردن سازگاری استفاده کن. اگه نیاز به پشتیبانی گسترده داری، راهکارهای جایگزین (Fallback) رو با جاوااسکریپت یا کلاس‌های CSS قدیمی‌تر در نظر بگیر.

دقت به Specificity

وقتی از Pseudo-class های پیچیده استفاده می‌کنی، حواست به Specificy یا همون قدرت انتخاب‌کننده CSS باشه. یه Selector با Pseudo-class، قدرت بالاتری نسبت به یه Selector ساده داره. ممکنه استایل‌هایی که انتظار داری اعمال بشن، به خاطر تداخل با استایل‌های دیگه override بشن. اگه گیج شدی، همیشه از ابزارهای DevTools مرورگرت برای دیباگ کردن استفاده کن.

ترکیب Pseudo-class ها برای قدرت بیشتر

قدرت واقعی Pseudo-class ها وقتی مشخص میشه که اون‌ها رو با هم ترکیب کنی. مثلاً :not(:last-child) یا a:hover:not(.disabled). این ترکیب‌ها بهت اجازه میدن المنت‌ها رو با دقت بسیار بالا و بر اساس چندین شرط انتخاب و استایل‌دهی کنی.

کپی


/* همه آیتم‌های لیست به جز آیتم آخر که وقتی ماوس روی آنهاست */
li:not(:last-child):hover {
    background-color: #f7f7f7;
    border-bottom: 1px solid #ddd;
}
    

عیب‌یابی سریع: مشکلات رایج با Pseudo-class ها و راه حلشان

خب، همه چی همیشه آسون نیست و ممکنه با Pseudo-class ها هم به مشکل بخوری. اینجا چند تا از مشکلات رایج و راه حل‌های خودمونی‌شون رو برات آوردم.

مشکل 1: Pseudo-class من کار نمی‌کنه!

علت احتمالی:

  • Specificy: یه Selector دیگه قدرت بیشتری داره و استایل شما رو override کرده.
  • پشتیبانی مرورگر: Pseudo-class مورد نظر توی مرورگر کاربر پشتیبانی نمیشه (مخصوصاً برای :has() و :focus-visible).
  • اشتباه تایپی: یه حرف یا یه دونقطه اضافی یا کم توی نام Pseudo-class.

راه حل:

  • با DevTools مرورگرت (کلید F12) استایل‌ها رو بررسی کن و ببین کدوم استایل اعمال شده و چرا.
  • از Can I use… برای چک کردن سازگاری مرورگر استفاده کن.
  • کدت رو با دقت چک کن و از درست بودن املای Pseudo-class مطمئن شو.

مشکل 2: :nth-child() اون چیزی که میخوام رو انتخاب نمی‌کنه.

علت احتمالی:

  • شاید به جای :nth-child() نیاز به :nth-of-type() داری. یادت باشه، :nth-child() همه المنت‌های فرزند رو می‌شماره، نه فقط اونایی که از نوع مشخص تو هستن.
  • اشتباه توی فرمول (an+b).

راه حل:

  • ساختار DOM المنت‌های مورد نظرت رو بررسی کن. اگه المنت‌های غیرهم‌نوع بینشون هستن، از :nth-of-type() استفاده کن.
  • فرمولت رو با دقت دوباره بنویس. می‌تونی از ابزارهای آنلاین تست :nth-child() برای تایید استفاده کنی.

مشکل 3: افکت :hover روی دستگاه‌های لمسی کار نمی‌کنه.

علت احتمالی:

  • دستگاه‌های لمسی مفهوم “هاور” رو ندارن. وقتی کاربر یه المنت رو لمس می‌کنه، معمولاً همون حالت :active یا :focus رو می‌گیرن.

راه حل:

  • برای دستگاه‌های لمسی، به جای :hover، از :active یا :focus استفاده کن.
  • از Media Query ها برای اعمال استایل‌های خاص به دستگاه‌های لمسی استفاده کن. مثلاً:
    کپی

    
    @media (hover: none) and (pointer: coarse) {
        /* استایل‌های خاص برای دستگاه‌های لمسی */
        .my-element:active {
            /* استایل‌های مورد نظر */
        }
    }
                        

نتیجه‌گیری: قدرت Pseudo-class ها در دستان تو!

رفیق، دیدی که Pseudo-class های پیشرفته چقدر می‌تونن توی طراحی وب کارتو راه بندازن؟ از نظم دادن به لیست‌ها و جداول گرفته تا ساخت فرم‌های هوشمند و تعاملات بدون جاوااسکریپت، این ترفندها ابزارهای قدرتمندی هستن که اگه درست ازشون استفاده کنی، کیفیت سایتت رو حسابی بالا می‌برن. فراموش نکن که همیشه به سازگاری مرورگرها، Specificy و ترکیب‌های هوشمندانه Pseudo-class ها دقت کنی. با تمرین و تجربه، تو هم می‌تونی استاد این ابزارهای فوق‌العاده بشی و تجربه کاربری بی‌نظیری رو برای مخاطباتت رقم بزنی. به قول معروف، جزئیات کوچک تفاوت‌های بزرگ ایجاد می‌کنند.

سوالات متداول (FAQ) درباره Pseudo-class ها

Pseudo-class چیست و چه تفاوتی با Pseudo-element دارد؟

Pseudo-class برای استایل‌دهی به یک المنت در حالت خاصی (مانند :hover یا :focus) استفاده می‌شود، در حالی که Pseudo-element برای استایل‌دهی به بخش خاصی از یک المنت (مانند ::before یا ::after) به کار می‌رود.

آیا استفاده زیاد از Pseudo-class ها روی عملکرد سایت تاثیر منفی دارد؟

معمولاً خیر. Pseudo-class ها بخشی از موتور رندرینگ مرورگر هستند و به طور کلی بهینه عمل می‌کنند. اما استفاده از Selector های بسیار پیچیده (به خصوص ترکیب‌های زیاد) می‌تواند تاثیر ناچیزی روی پرفورمنس داشته باشد، که در بیشتر موارد قابل چشم‌پوشی است. مهم‌ترین نکته، اطمینان از سازگاری مرورگرها است.

Pseudo-class :has() چه کاربرد منحصر به فردی دارد؟

:has() به شما این امکان را می‌دهد که یک المنت والد را بر اساس وجود یا عدم وجود فرزند خاصی در داخل آن استایل دهید. این قابلیت قبل از این تنها با جاوااسکریپت ممکن بود و برای ساخت کامپوننت‌های تعاملی و پویا بدون نیاز به JS بسیار قدرتمند است.

چطور می‌توانم Pseudo-class ها را برای واکنش‌گرایی (Responsive Design) استفاده کنم؟

Pseudo-class ها به خودی خود به طور مستقیم مسئول واکنش‌گرایی نیستند، اما می‌توانید آن‌ها را با Media Query ها ترکیب کنید. مثلاً، یک استایل :hover متفاوت برای دسکتاپ و یک استایل :active برای موبایل تعریف کنید تا تجربه کاربری در دستگاه‌های مختلف بهینه باشد.

{
“@context”: “https://schema.org”,
“@type”: “Article”,
“headline”: “ترفندهای استفاده از Pseudo-class های پیشرفته CSS برای تعامل بهتر با کاربر”,
“image”: [
“https://example.com/pseudo-class-main-image.jpg”
],
“author”: {
“@type”: “Person”,
“name”: “FA-Tools Team”
},
“publisher”: {
“@type”: “Organization”,
“name”: “FA-Tools”,
“logo”: {
“@type”: “ImageObject”,
“url”: “https://fa-tools.ir/logo.png”
}
},
“datePublished”: “2023-10-27T09:00:00+08:00”,
“dateModified”: “2023-10-27T09:00:00+08:00”,
“description”: “با یادگیری Pseudo-class های پیشرفته CSS، تعامل کاربر با وب‌سایت خود را متحول کنید. این مقاله ترفندها، سناریوهای کاربردی و راهکارهای عیب‌یابی را بدون نیاز به جاوااسکریپت آموزش می‌دهد.”,
“mainEntityOfPage”: {
“@type”: “WebPage”,
“@id”: “https://fa-tools.ir/blog/advanced-pseudo-classes/”
},
“keywords”: [“Pseudo-class”, “CSS”, “تعامل کاربر”, “طراحی وب”, “:has()”, “:nth-child()”, “:focus-within”, “توسعه فرانت‌اند”, “CSS پیشرفته”],
“articleBody”: “…”
}

{
“@context”: “https://schema.org”,
“@type”: “FAQPage”,
“mainEntity”: [
{
“@type”: “Question”,
“name”: “Pseudo-class چیست و چه تفاوتی با Pseudo-element دارد؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Pseudo-class برای استایل‌دهی به یک المنت در حالت خاصی (مانند :hover یا :focus) استفاده می‌شود، در حالی که Pseudo-element برای استایل‌دهی به بخش خاصی از یک المنت (مانند ::before یا ::after) به کار می‌رود.”
}
},
{
“@type”: “Question”,
“name”: “آیا استفاده زیاد از Pseudo-class ها روی عملکرد سایت تاثیر منفی دارد؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “معمولاً خیر. Pseudo-class ها بخشی از موتور رندرینگ مرورگر هستند و به طور کلی بهینه عمل می‌کنند. اما استفاده از Selector های بسیار پیچیده (به خصوص ترکیب‌های زیاد) می‌تواند تاثیر ناچیزی روی پرفورمنس داشته باشد، که در بیشتر موارد قابل چشم‌پوشی است. مهم‌ترین نکته، اطمینان از سازگاری مرورگرها است.”
}
},
{
“@type”: “Question”,
“name”: “Pseudo-class :has() چه کاربرد منحصر به فردی دارد؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “:has() به شما این امکان را می‌دهد که یک المنت والد را بر اساس وجود یا عدم وجود فرزند خاصی در داخل آن استایل دهید. این قابلیت قبل از این تنها با جاوااسکریپت ممکن بود و برای ساخت کامپوننت‌های تعاملی و پویا بدون نیاز به JS بسیار قدرتمند است.”
}
},
{
“@type”: “Question”,
“name”: “چطور می‌توانم Pseudo-class ها را برای واکنش‌گرایی (Responsive Design) استفاده کنم؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Pseudo-class ها به خودی خود به طور مستقیم مسئول واکنش‌گرایی نیستند، اما می‌توانید آن‌ها را با Media Query ها ترکیب کنید. مثلاً، یک استایل :hover متفاوت برای دسکتاپ و یک استایل :active برای موبایل تعریف کنید تا تجربه کاربری در دستگاه‌های مختلف بهینه باشد.”
}
}
]
}

Table of Contents

آخرین نوشته‌ها