Пишем БЭМ правильно

Igor Zenich, iDeus.

Пишем БЭМ правильно

iDeus

Зачем ещё один доклад про BEM?!

Что он несёт?!.

Pepelsbey

Ошибки

CSS подмножество BEM

Ya.ru

2007 год

Виталий
Харисов

Виталий Харисов

@mursya меня бы убила

Непонятость BEM

Но как писать код вручную?

Как назначаются стили для типографики? Не будешь же назначать каждому тегу какой-то класс?

Artur Kornakov, @fliptheweb

Я не буду говорить о bem-tools

Не буду говорить о

Frontender

Суть #b_

.block

Главное - понятие независимого блока

Независимый блок (НБ или просто блок) это самодостаточный элемент страницы, который при перемещении в другое место на странице или на другую страницу не теряет своей самодостаточности.

BEM.Клуб на Я.рушке, Независимый блок

Формальное определение

Правила независимости блока:
  1. для описания элемента используется class, но не id
  2. каждый блок имеет префикс
  3. в таблице стилей нет классов вне блоков
BEM.Клуб на Я.рушке, История создания BEM (часть первая)

.block__element

Я тоже раньше так писал

			.form-buy-results__to-city__slider__tab__column_buy
		

Так делать нельзя

Как надо?

<div class='block'>
    <div class='block__elem1'>
        <div class='block__elem2'></div>
    </div>
    <div class='block__elem3'></div>
</div>
		

А в CSS

.block {}
.block__elem1 {}
.block__elem2 {}
.block__elem3 {}
		

Делать новый блок

<div class='block'>
    <div class='block__elem1'>
        <div class='block2'></div>
    </div>
</div>
		

Не пишите странные имена

.block {}
.block__elem1 {}
.blockelem1__elem2 {}
		

Будут проблемы при переносе

Бейте на блоки!

DOM-дерево

<ul>
  <li>
    <a>
      <span></span>
    </a>
  </li>
</ul>
		

BEM-дерево

<ul class="menu">
  <li class="menu__item">
    <a class="menu__link">
      <span class="menu__text"></span>
    </a>
  </li>
</ul>
		

Модификация

6 видов

  1. Модификатором
    • модификатором блока
    • модификатором элемента
  2. Контекстом (т.е. каскадом от блока выше)
  3. Уровнем переопределения (добавлением-перезаписью файла стилей)
  4. Миксованием (добавлением классов других блоков)
    • включая глобальный класс

Статья на Frontender Magazine

https://github.com/FrontenderMagazine/bem-css-methodology-complete-guide/blob/master/rus.md

Делай модификатор!

А для элементов - делай каскад от модификатора.

Модификаторы для элементов, можно?

BEM допускает ошибки

Ошибки

1. block__el__el

Например слайдер - это отдельный блок, а его содержимое - другой блок

2. Межблочный каскад

и высокая специфичность

Я написал про это статью

http://delka.name/blog/2013/04/bem-otkroveniya-prinyavshih-veru/

3. Стили вне блоков

<ul class="menu checkoutForm big myfuckingclass-bold">
		

Диалекты BEM и JS-блоки.

Вот это вот всё на 5 минут:

Префиксы

Сокращенные модификаторы

А также альтернативный синтаксис и camelCase.

.block-name__elem_key_value
.blockName__elem.-key_value
		

JS-блоки

$('.js-mark>fancybox').fancybox();
		

Это всё BEM

Примеры гайдлайнов по BEM

getbem-com

Сладкое!

Sass

Пример переверстки по BEM

Так как же выводить текст из БД?

.b-text h2 {}
.b-text p {}
.b-text img {}
.b-text ul li {}
		

Собираем вопросы

https://docs.google.com/document/d/1KD9tNdArCv1U1NvFX7rYPvUdbpPGVkuPZ2723KW5p4Y/edit

Спасибо!

Igor Zenich, iDeus

Презентация: delka.github.io/talks/wsd/2014/bem/

Powered by Shower