اولویت قوانین (Specificity)
درک کامل Specificity در CSS — کدام قانون برنده میشود و چرا
اولویت (Specificity) چیست؟
وقتی چند قانون CSS به یک عنصر اعمال میشود، CSS باید تصمیم بگیرد کدام برنده است. این تصمیم بر اساس سیستمی به نام Specificity (اولویت) گرفته میشود.
سلسلهمراتب اولویت
| اولویت | نوع | مثال | امتیاز |
|---|---|---|---|
| ۱ (بالاترین) | !important | color: red !important | ۱۰۰۰۰ |
| ۲ (بسیار بالا) | Inline style | style="..." | ۱۰۰۰ |
| ۳ (بالا) | ID | #header | ۱۰۰ |
| ۴ (متوسط) | Class/Attribute/Pseudo-class | .btn, [type], :hover | ۱۰ |
| ۵ (پایین) | Element/Pseudo-element | p, ::before | ۱ |
| ۶ (پایینترین) | Universal | * | ۰ |
محاسبه امتیاز
* → 0,0,0,0
p → 0,0,0,1
p.intro → 0,0,1,1
div p.intro → 0,0,1,2
#header → 0,1,0,0
#header .nav → 0,1,1,0
#header a:hover → 0,1,1,1
مثالهای عملی
/* کدام برنده است؟ */
p { color: black; } /* 0,0,0,1 */
p.text { color: blue; } /* 0,0,1,1 — برنده ✅ */
#content p { color: green; } /* 0,1,0,1 — برنده ✅ */
قوانین مساوی
اگر دو قانون امتیاز برابر داشته باشند، آخری برنده است:
.btn { color: red; }
.btn { color: blue; } /* برنده — آخر است */
افزودن اولویت عمدی
/* افزایش بدون ID */
.my-class.my-class { } /* دو بار کلاس = ۲۰ امتیاز */
/* با :is() یا :where() */
:is(.btn, #main) { } /* بالاترین امتیاز */
ترتیب منابع CSS
| ترتیب | منبع |
|---|---|
| ۱ | استایل پیشفرض مرورگر |
| ۲ | استایل کاربر |
| ۳ | استایل توسعهدهنده |
| ۴ | Inline style |
| ۵ | !important |
بهترین شیوهها
- از کلاس بهجای ID استفاده کنید — اولویت پایینتر و منعطفتر
- از
!importantپرهیز کنید — فقط مواقع ضروری - انتخابگرهای ساده و کوتاه بنویسید
- DevTools را برای بررسی اولویت استفاده کنید
- از BEM یا روشهای نامگذاری برای کنترل اولویت استفاده کنید
نکات مهم
- DevTools امتیاز هر انتخابگر را نشان میدهد
!importantبالاترین اولویت را دارد — از آن زیاد استفاده نکنید- انتخابگرهای تودرتو اولویت بالاتر میسازند
- Inline style اولویت بالاتر از فایل CSS دارد
این مبحث بخشی از دوره آموزش کامل CSS است.