در حال بارگذاری...

!important در CSS

لندینگ را با توکن، فلکس، گرید و فوکوس تمام کردید. Optional Advanced با ابزاری شروع می‌شود که خیلی‌ها زود به آن می‌رسند: !important. می‌تواند یک اعلان را برنده کند — و می‌تواند کل استایل‌شیت را به داد و بیداد تبدیل کند. اینجا می‌فهمید چه می‌کند، برای چه آمده، و چطور آرام بمانید تا تقریباً هیچ‌وقت لازمش نشود.

جواب مستقیم

!important روی یک اعلان می‌نشیند تا در همان origin، برای همان ویژگی، از دعوای عادی specificity و ترتیب منبع جلو بزند. برای overrideهای نادر است — مثلاً یک utility که باید قانون third-party غیرقابل‌ویرایش را بشکند — نه دکمه‌ای که هر روز «CSS را وادار کن گوش بدهد». اول سلکتور روشن‌تر، ترتیب بهتر، یا یک رفکتور کوچک؛ بعد اگر واقعاً گیر بود، پرچم را بزنید.

اصلاً چرا وجود دارد؟

استایل‌شیت‌ها با هم برخورد می‌کنند. specificity و ترتیب منبع بیشتر دعواها را حل می‌کنند. !important دریچهٔ فرار است وقتی نردبان عادی کافی نیست: صفحهٔ میزبانی که دستتان نیست، قانون کتابخانه‌ای که یک‌بار باید بشکند، یا یک اسپایک دیباگ کوتاه. زبان وب این پرچم را دارد چون CSS مشترک گاهی به‌هم‌ریخته است — نه چون هر تعارض مبتدی لایق فریاد بلندتر است.

نحو

!important را بعد از مقدار و قبل از نقطه‌ویرگول بگذارید:

!important beats a stronger normal selector

css
#title {
color: #9f1239;
}

.note {
color: #0f766e !important;
}

برای <h1 id="title" class="note"> رنگ کلاسِ دارای !important برنده می‌شود — با این‌که معمولاً id از class جلوتر است. همین تمام فایده و تمام خطر است: از نردبان روزمره بیرون زده‌اید.

رابطه با cascade (رنگ جدید نیست)

!important معنی ویژگی را عوض نمی‌کند؛ فقط می‌گوید کدام اعلان برنده است. اول بپرسید: «یک طرف مهم علامت خورده؟» بعد میان اعلان‌های مهمِ همان origin، باز هم specificity و ترتیب مهم‌اند. میان اعلان‌های عادی، همان درس specificity سر جایش است.

وقتی دو تا !important به هم می‌خورند

اگر هر دو طرف فریاد بزنند، باز هم باید برنده مشخص شود. در استایل نویسنده با origin یکسان، specificity بالاتر بین اعلان‌های مهم می‌برد؛ اگر مساوی بودند، !important بعدی در فایل می‌برد.

Two !important — later equal-weight wins

css
.card {
border-color: #cbd5e1 !important;
}

.card {
border-color: #0f766e !important;
}

هر دو سلکتور یک classاند و هر دو !important دارند. رنگ حاشیهٔ دومی می‌برد. روی هم انباشتن !important CSS را سالم‌تر نمی‌کند — فقط دعوا را به اتاق بلندتر می‌برد.

یک استفادهٔ نادر و صادق

گاهی یک utility باید بر CSSای ببرد که منطقاً نمی‌توانید ویرایشش کنید (تم ویجت، بلوک embed). override را باریک نگه دارید — یک ویژگی، یک سلکتور، یک توضیح که بگوید چرا:

Narrow utility override (use sparingly)

css
/* Override third-party widget link color we cannot edit */
.widget a {
color: #0f172a !important;
}

این با پاشیدن !important روی همهٔ رنگ‌های برند «برای احتیاط» فرق دارد. دلیل را بنویسید؛ وقتی تعارض رفت، پرچم را هم بردارید.

ترجیح بدهید آرام درستش کنید

بیشتر لحظه‌های «باید !important بزنم» در واقع «سلکتورها درهم‌اند» هستند. وضوح را بالا ببرید، نه صدا را:

Refactor without !important

css
/* Tangled: fighting an id with noise */
#hero .cta {
background: #64748b;
}

.cta-primary {
background: #0f766e;
}

/* Calmer: one clear class owns the CTA look */
.cta-primary {
background: #0f766e;
color: #fff;
padding: 0.75rem 1.25rem;
border-radius: 0.5rem;
}

اگر HTML بتواند cta-primary بگیرد (یا id بی‌خودی را از جنگ استایل حذف کنید)، بدون !important برنده‌اید. این عادت مقیاس‌پذیر است؛ فریاد زدن نه.

راهنمای تصمیم

📊 Normal cascade vs !important

Situation Prefer Avoid
Two of your rules fight نردبان specificity یا ترتیب بعدی !important خودکار
Equal specificity, wrong winner قانون را پایین‌تر ببرید / سلکتور را روشن کنید هر دو طرف را مهم کنید
Third-party CSS you cannot edit یک !important باریک (با توضیح) کل ویجت را پتو کنید
Debugging which rule applies !important موقت، بعد حذف پرچم دیباگ در پروداکشن
“This color feels important to the brand” توکن و class قوی‌تر !important احساسی روی همهٔ توکن‌ها

خودتان تمرین کنید

  1. جفت id و class را بسازید: #title زرشکی، .note فیروزه‌ای با !important — روی عنصری که هر دو را دارد، فیروزه‌ای را ببینید.
  2. !important را بردارید و ببینید دوباره زرشکی برمی‌گردد (id عادی برنده است).
  3. دو قانون .card با border-color و !important بنویسید — دومی باید ببرد.
  4. یک تعارض را با ساده‌کردن class طوری درست کنید که پرچم لازم نباشد.
  5. اختیاری: بالای هر !important باقی‌مانده یک خط توضیح بگذارید که محدودیت third-party یا میزبان چیست.

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

  • !important را پیش‌فرض هر تعارض دانستن
  • خیال کردن کل «قانون» مهم است — فقط اعلان پرچم می‌گیرد
  • جنگ با کتابخانه با ده‌ها خط !important به‌جای یک override باریک
  • فراموش کردن که !important مساویِ بعدی هنوز می‌تواند شما را ببرد
  • قاطی کردن «برای برند مهم است» با کلیدواژهٔ CSS — ربطی به هم ندارند

خلاصه

  • !important باعث می‌شود اعلان از دعوای عادی specificity/ترتیب برای همان ویژگی جلو بزند
  • برای override نادر در CSS مشترک به‌هم‌ریخته آمده — نه برای هر تعارض آموزشی روزمره
  • دو قانون !important باز هم با specificity و ترتیب منبع تمام می‌شوند
  • سلکتور روشن‌تر، ترتیب بهتر، یا رفکتور را ترجیح بدهید؛ استفاده‌های واقعی را کم و توضیح‌دار نگه دارید
  • Optional Advanced بعدی: اسپرایت تصویر (image-sprites)

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
6
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

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