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

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

⚡ جرّب بنفسك

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

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