يجب ألا يكون BEM موجودًا


مرحبًا.

يجب ألا يكون 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

Source: https://habr.com/ru/post/ar422537/


All Articles