اتفاقية تسمية 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 تتضح.
📖 ملخص
- BEM هو واحدة من أفضل اتفاقيات تسمية CSS
- من خلال بنية Block و Element و Modifier، تصبح فئات CSS ذاتية التفسير وبدون تعارضات وقابلة للصيانة
- BEM لا يتطلب مُحددات متداخلة — كل فئة مستقلة، تتجنب حروب التفصيل
- أياً كانت الاتفاقية التي تختارها، اتساق الفريق هو الأهم
📝 تمارين
- أنشئ مكوّن "تعليق مستخدم" باستخدام تسمية BEM: صورة رمزية، اسم مستخدم، وقت، نص تعليق، زر إعجاب.
- أعد كتابة هذا CSS بنمط BEM:
CSS
.profile { ... }
.profile .photo { ... }
.profile .info { ... }
.profile .info .name { ... }
.profile .actions .btn { ... }
- فكّر في تقديم تسمية BEM في مشروعك — تدرب على مodule صغير في صفحة واحدة.



