مرحبًا.
يجب ألا يكون BEM موجودًا. هناك عدد كبير من الأسباب لعدم استخدام هذه المنهجية ، ولكن بسبب سهولة استخدامها وعدم فهم عمل CSS و HTML ، انتشرت المنهجية على نطاق واسع بين مطوري الواجهة الأمامية في جميع أنحاء العالم ، في معظم الحالات بين مطوري CIS. يستخدم BEM الآن في كل من المشاريع الكبيرة باللغة الروسية (ياندكس ، هابر) ، وفي بعض الأطر ( 
رد الفعل-MD ). ستمر هذه المقالة بتحليل مفصل لإيجابيات وسلبيات هذا النهج التنموي. سيتم أخذ جميع أمثلة التخطيط من موقع 
BEM الرسمي.

الاختصار BEM هو كتلة / عنصر / معدل. يمكن تقسيم أي تخطيط أو تصميم بشكل مرئي إلى كتل ، على سبيل المثال - 
الشريط الجانبي للموقع. قد تحتوي كل كتلة على عنصر واحد أو أكثر. يمكن أن تحتوي العناصر على معدِّلات الحالة (نشطة ، معطلة) ، وفئات إضافية لتغيير الحدود والعرض ولون الخلفية وما إلى ذلك.
إن فكرة تقسيم التخطيط إلى كتل ليست جديدة ، ما يقدمه لنا BEM هو إطالة أسماء الفئات ، وجعل العناصر تعتمد دائمًا على اسم الكتلة ، وتعيين أي فئة على مستوى العالم. إنه يساعد حرفيا في أي مكان ويؤدي إلى عواقب حزينة في تخطيط المشاريع. فيما يلي المشكلات الخاصة بالعنصر باستخدام BEM:
html غير قابل للقراءة
هذا تخطيط من موقع 
BEM الرسمي. تجعل أسماء فئة CSS المطولة والتي تشبه php أي تخطيط غير قابل للقراءة تمامًا يتخللها السمات:
<ul class="article-rewind article-rewind_type_static article-rewind_lang_ru">
    <li class="article-rewind__next">
        <div class="article-rewind__next-text"> </div>
        <a class="article-rewind__next-link" href=""> </a>
   </li>
</ul>
, SCSS, :
<ul class="article-rewind type-static lang-ru">
    <li class="next">
        <div class="text"> </div>
        <a class="link" href=""> </a>
   </li>
</ul>
.article-rewind {
  margin:      0;
  padding:     0;
  list-style:  none;
  &.type-static {
    position:  relative;
    display:   flex;
  }
  &.lang-en {}
  &.lang-ru {}
  &.lang-uk {}
  & > .next {
    position:      relative;
    flex-grow:     1;
    align-self:    center;
    margin-right:  88px;
    text-align:    right;
    .text {
      font-size:   16px;
      position:    absolute;
      right:       0;
      margin-top: -32px;
    }
    .link {
      font-size:   40px;
      line-height: 46px;
    }
  }
}
BEM — , — . , CSS , , 
button active, disabled, error, , . — CSS :
    <h1 class="article__heading_level_1 article__heading_level_1_active"></h1>
SCSS, :
    <h1 class="heading active"></h1>
.article {
  h1.heading {
    font-size:   50px;
    line-height: 64px;
    float:       left;
    &.active {
      color:     #ccc;
    }
  }
}
— -
, . , . , 
promo-section_color_white — , 
.promo-section. . , :
  <div class="promo-section promo-section_color_white"></div>
html, - , :
  <div class="promo-section background-white"></div>
.promo-section {
  position: relative;
  padding:  0 0 70px;
}
.background-white {
  background-color: white;
}
:
CSS id
, mixin'a html- :
  <h1 class="article__heading article__heading_level_1"></h1>
  <h2 class="article__heading article__heading_level_2"></h2>
  <h3 class="article__heading article__heading_level_2"></h3>
h1,h2 , «article__heading_level_1».
  <h1 class="heading"></h1>
  <h2 class="heading"></h2>
  <h3 class="heading"></h3>
@for $index from 1 through 6 {
  h#{$index}.heading {
    font-size: (42px / $index);
  }
}
/* mixin output */
h1.heading {font-size: 42px;}
h2.heading {font-size: 21px;}
h3.heading {font-size: 14px;}
h4.heading {font-size: 10.5px;}
h5.heading {font-size: 8.4px;}
h6.heading {font-size: 7px;}
, , , , , .. , .
— .
? BEM'a header'e , body. , , - .
. , CSS, . , .
:
hackernoon.com/bem-should-not-exist-6414005765d6