:where()
تجميع بلا أولوية — where :where()
:where() يجمّع محدّدات مثل :is() تمامًا، لكن نتيجته دائمًا بأولوية صفر — سهل التجاوز لاحقًا.
:where() توأم :is() في الصياغة والسلوك: قائمة محدّدات متسامحة تُختصر بسطر واحد. الفرق الوحيد لكنه جوهري: مهما كانت قوة المحدّدات بداخله، الأولوية الناتجة تساوي صفرًا دائمًا.
هذا يجعله الخيار المثالي عند كتابة أنماط أساسية يُفترض أن يسهل على أي مطوّر لاحق تجاوزها بمحدّد بسيط: مكتبات مكوّنات، إعادة ضبط (Reset)، ثيمات افتراضية. لو استُخدم :is() في هذه الحالات، قد تُفاجَأ بأنماط بسيطة لاحقة تعجز عن كسر قاعدة كانت تبدو غير مهمّة، لأن أولويتها الفعلية أعلى مما تبدو من شكل الكود.
الصياغة
:where(header, nav, footer) a {
color: gray; /* أولوية = 0، سهلة التجاوز */
}
footer a { color: blue; } /* تتغلّب عليها بمحدّد بسيط جدًا */⚡ جرّب بنفسك
عدّل الكود واضغط «تحديث» لترى النتيجة فورًا — التجربة أفضل معلّم.
<style>
:where(.card, .panel) p { color: #64748b; }
.special p { color: #7c5cff; font-weight: bold; }
</style>
<div class="card special"><p>هذا النص بنفسجي رغم أن :where() جاءت أولًا — لأن أولويتها صفر.</p></div>أهم القيم
| القيمة | الوظيفة |
|---|---|
| :where(a, b, c) | نفس مطابقة :is() لكن بأولوية صفر ثابتة |
| سهولة التجاوز | أي محدّد لاحق مهما بسط يتغلّب عليها |
| الاستخدام النموذجي | أنماط أساسية/مكتبات يُراد لها أن تُكسَر بسهولة |
💡 نصائح عملية
- اجعل أنماط الـ Reset والمكتبات الأساسية بداخل :where() ليسهل على مستهلكيها تخصيصها
- إن لم تتذكّر الفرق: :is() = أقوى وسيط، :where() = صفر دائمًا
⚠️ أخطاء شائعة
- استخدامه ثم التفاجؤ بأن قاعدة أخرى بسيطة كسرَتها بسهولة — هذا هو الهدف منه، وليس خطأً
- الخلط بينه وبين :is() في مشروع فيه تعارضات أولوية غامضة
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CSS الكامل بالعربي.
📚 للتعمق التقني الكامل بالإنجليزية: MDN Web Docs