@supports
استعلامات الميزات @supports
@supports يطبّق أنماطًا فقط إذا كان متصفح المستخدم يدعم خاصية أو محدّدًا معيّنًا — طبقة أمان تدريجية بلا مكتبات كشف خارجية.
بدل الاعتماد على مكتبة جافاسكريبت لكشف الميزات، @supports يفعل ذلك بـ CSS خالص. @supports (display: grid) { ... } يطبّق القواعد بداخله فقط إن كان المتصفح يفهم القيمة فعليًا، فتكتب بديلًا آمنًا خارج الاستعلام لمن لا يدعمها — تحسين تدريجي (Progressive Enhancement) نظيف.
الدالة الأحدث selector() تفعل الشيء نفسه للمحدّدات: @supports selector(:has(a)) { ... } تتحقّق من دعم :has() قبل الاعتماد عليه. تدعم الشروط أيضًا الروابط المنطقية and وor وnot لبناء شروط مركّبة.
الصياغة
.box { display: block; }
@supports (display: grid) {
.box { display: grid; }
}
@supports selector(:has(a)) {
.nav:has(a.active) { border-bottom: 2px solid #7c5cff; }
}⚡ جرّب بنفسك
عدّل الكود واضغط «تحديث» لترى النتيجة فورًا — التجربة أفضل معلّم.
<style>
.box { background: #e5e7eb; padding: 12px; border-radius: 8px; }
@supports (display: grid) { .box { background: #ddd6fe; } }
@supports not (display: grid) { .box::after { content: ' (لا يدعم Grid)'; } }
</style>
<div class="box">هذا الصندوق بلون مختلف لأن متصفحك يدعم Grid.</div>أهم القيم
| القيمة | الوظيفة |
|---|---|
| @supports (prop: value) | يتحقّق من دعم خاصية بقيمة محدّدة |
| selector(...) | يتحقّق من دعم محدّد معيّن قبل استخدامه |
| and / or / not | روابط منطقية لدمج أكثر من شرط |
💡 نصائح عملية
- اكتب النمط الأساسي البسيط أولًا خارج الاستعلام، ثم حسّنه بداخل @supports — لا العكس
- استخدم selector() قبل الاعتماد على محدّدات حديثة مثل :has() في مشاريع تدعم متصفحات أقدم
⚠️ أخطاء شائعة
- الاعتماد على @supports وحده لخاصية مدعومة عالميًا منذ سنوات — لا داعي له
- نسيان أن الشرط يتحقق من دعم القيمة كاملة (property: value) لا الخاصية فقط
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CSS الكامل بالعربي.
📚 للتعمق التقني الكامل بالإنجليزية: MDN Web Docs