@layer
طبقات الـ Cascade @layer
@layer يرتّب مجموعات الأنماط بترتيب صريح مستقل عن الأولوية — يحسم صراعات دمج مكتبة خارجية مع أنماطك.
مشكلة كلاسيكية: تستورد مكتبة CSS (Reset، مكوّنات جاهزة)، ثم تحتاج كتابة أنماطك فوقها — لكن الأولوية (Specificity) تجعل الأمر معركة محدّدات معقّدة أو !important. @layer يحلّها بترتيب واضح: الطبقة المُعلَنة أخيرًا تفوز دائمًا، بصرف النظر عن قوة المحدّد بداخلها.
القاعدة المقابلة المهمّة: الأنماط المكتوبة خارج أي طبقة تتغلّب دائمًا على كل الطبقات، وكأنها أقوى طبقة ضمنية. أما مع !important فالترتيب ينعكس تمامًا: طبقة أُعلنت أولًا تفوز بقواعدها المهمّة على طبقة أُعلنت لاحقًا. عرّف ترتيب طبقاتك مبكرًا بسطر واحد: @layer reset, base, components, utilities؛ ثم املأ كل طبقة بترتيب ما تريد.
الصياغة
@layer reset, base, components, utilities;
@layer reset { * { margin: 0; padding: 0; } }
@layer components { .btn { padding: 8px 16px; } }
@layer utilities { .text-center { text-align: center; } }⚡ جرّب بنفسك
عدّل الكود واضغط «تحديث» لترى النتيجة فورًا — التجربة أفضل معلّم.
<style>
@layer base, override;
@layer override { .text { color: #7c5cff; } }
@layer base { #box .text { color: #dc2626; } }
</style>
<div id="box"><p class="text">بنفسجي رغم أن محدّد #box .text أقوى — الطبقة override أُعلنت بعد base.</p></div>أهم القيم
| القيمة | الوظيفة |
|---|---|
| @layer name { ... } | يُنشئ طبقة مسمّاة ويملؤها بقواعد |
| @layer a, b, c; | يحدّد ترتيب الطبقات مسبقًا بلا قواعد |
| أنماط بلا طبقة | تتغلّب دومًا على كل الطبقات المُعلنة |
💡 نصائح عملية
- أعلن ترتيب كل طبقاتك بسطر واحد في بداية الملف الرئيسي قبل استيراد أي شيء
- ضع مكتبات الطرف الثالث بطبقة مبكرة وأنماطك الخاصة بطبقة متأخرة — تكتب بأبسط محدّد وتفوز
⚠️ أخطاء شائعة
- نسيان أن الأنماط خارج أي طبقة تتغلّب على كل الطبقات — قد تكسر تنظيمك بالخطأ
- الخلط بين ترتيب الطبقات (يحكم بينها) والأولوية العادية (تحكم داخل نفس الطبقة فقط)
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CSS الكامل بالعربي.
📚 للتعمق التقني الكامل بالإنجليزية: MDN Web Docs