اتفاقية تسمية BEM CSS

ما هو BEM؟

BEM يرمز إلى Block وElement وModifier — اتفاقية تسمية تجعل فئات CSS ذاتية التفسير وبدون تعارضات.

البنية

.block { }
.block__element { }
.block--modifier { }
.block__element--modifier { }

مثال

HTML
<style>
.card { }
.card__title { font-size: 18px; }
.card__content { padding: 15px; }
.card--highlighted { border: 2px solid gold; }
</style>
<div class="card card--highlighted">
  <h3 class="card__title">عنوان</h3>
  <div class="card__content">محتوى</div>
</div>
▶ جرّب الكود

لماذا BEM؟

الفائدة الوصف
ذاتي التوثيق أسماء الفئات تشرح ما تُنمّطه
بدون تعارضات أسماء فريدة تمنع تعارضات النمط
بدون حروب تفصيل مُحددات مسطحة، لا حاجة للتداخل
صيانة سهلة غيّر فئة واحدة without التأثير على أخرى

❓ أسئلة شائعة

س أسماء فئات BEM طويلة جداً — ماذا أفعل؟
ج الأسماء الطويلة هي مقايضة تصميم BEM — أسماء أفضل من تعارضات النمط. يمكنك استخدام تسمية أقصر (مثل `card-t` بدلاً من `card__title`)، لكن حافظ عليها متسقة في جميع أنحاء المشروع. تداخل Sass يمكن أن يُقلل التكرار بشكل كبير.
س هل يمكن خلط `--` و`__` في BEM؟
ج نعم. `block__element--modifier` هو المعيار، يعني "عنصر من كتلة في حالة محددة." مثلاً، `card__title--highlight` يعني "عنوان البطاقة في حالة مميزة." لا تعكس الترتيب مثل `block--modifier__element` — الترتيب مهم.
س هل BEM مناسب للمشاريع الصغيرة؟
ج للمشاريع الصغيرة بعدة صفحات فقط، BEM مبالغ فيه. أسماء فئات بسيطة (`.title`، `.btn`) تكفي. لكن عندما يتجاوز المشروع 10 صفحات أو يحتوي على عدة مطورين، قيمة BEM تتضح.

📖 ملخص

📝 تمارين

  1. أنشئ مكوّن "تعليق مستخدم" باستخدام تسمية BEM: صورة رمزية، اسم مستخدم، وقت، نص تعليق، زر إعجاب.
  2. أعد كتابة هذا CSS بنمط BEM:
CSS
.profile { ... }
.profile .photo { ... }
.profile .info { ... }
.profile .info .name { ... }
.profile .actions .btn { ... }
  1. فكّر في تقديم تسمية BEM في مشروعك — تدرب على مodule صغير في صفحة واحدة.
100%