تخطَّ إلى المحتوى

@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; }
}

⚡ جرّب بنفسك

عدّل الكود واضغط «تحديث» لترى النتيجة فورًا — التجربة أفضل معلّم.

🎨 محرّر HTML/CSS
<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