.block__el__el
.b-block
.block--mod
…
<UL><LI><A><SPAN></SPAN></A></LI></UL>
<UL class="menu"><LI class="menu__item"><A class="menu__link"><SPAN class="menu__text"></SPAN></A></LI></UL>
В комментах html написаны тезисы доклада и комментарии к слайдам требующим пояснений.
Презентация: bit.ly/bem-in-the-wild
Презентация:
bit.ly/bem-css-right
Видео доклада: youtube.com/watch?v=kBgHdSOj33A
Презентация содержит больше слайдов и примеров, чем оригинальное видео.
— Мы используем БЭМ, но не FullStack, а #b_ в CSS.
— Нет, не как в Яндексе.
— Как?
— Ну как Гарри Робертс писал…
— Как именно, он разное писал?
— Fuck.
Each time we have to understand what exactly BEM we are talking about. Both with customer and internally in the team.
Верстаем надпись «Привет», input и кнопку.
({block : 'page',title : 'hello',head : [{ elem : 'css', url : 'hello.min.css' }],scripts : [{ elem : 'js', url : 'hello.min.js' }],mods : { theme : 'islands' },content : [{block : 'hello',
content : [{block : 'hello',content : [{elem : 'greeting',content : 'Привет, %пользователь%!'},{block : 'input',mods : {theme : 'islands', size : 'm'},name : 'name',placeholder : 'Имя пользователя'},
{block : 'button',mods : {theme : 'islands', size : 'm',type : 'submit'},text : 'Нажать'}]}]})
Тепер надо написать BEMHTML.
block('hello')(js()(true),tag()('form'));
Известный пример использования методологии БЭМ сторонним разработчиком - Артёмом Сапегиным.
.logo {color: saddlebrown;}.page_about .logo {color: ghostwhite;}social-button i {}<div class="social-button"><i></i></div>.scrollablea.fake.is-expanded.js-select.header.header-i
Диалект БЭМ, с более строгими правилами для максимальной надежности верстки, придуманный Вадимом Макишвили для Яндекс.Карт.
Нет миксов.
Нет модификаторов.
Есть состояния:
<div class="popup _orientation_top"></div><button class="button _pressed _focused"></div>.button._pressed {}
Продвинутое использование префиксов и суффиксов от Гарри Робертса. Попытка описать взаимосвязь между независимыми блоками с точки зрения SMACSS и OOCSS.
<div class="o-media@md c-user c-user--premium"><img src="" class="o-media__img@md c-user__photo" /><p class="o-media__body@md c-user__bio">...</p></div>
БЭМ в котором можно писать как хочешь. Хоть с элементами элементов.
.block__element__subelement
Теперь я использую БЁМ — это примерно как БЭМ, только вы можете писать его как хотите, а не как укажет партия или церковь. Ура!
b-,l-,g-,i-,h-,m-,c- и js-,
|
qa-,o-,c-(другой :),u-,t-,s-,is-,has-…
|
Многим нравится зарубежный формат модификаторов, через --, он читабельней.
<a class="block-name__element-name--state_active">
А через camelCase – ещё читабельней!
<a class="blockName__elementName--state_active">
Некоторые идут ещё дальше и заменяют __ на -. camelCase единственный гарантирует что вы поймете где блок, а где элемент.
<a class="blockName-elementName--state_active">
Зарубежом их назвали „Individual modifiers: a shorter syntax“. У нас перевели как «Обособленные модификаторы: сокращенный синтаксис». Яндекс в официальной документации называет их «Стиль No-namespace».
<div class="blockName__elem -key_value">.blockName {&__elem {&.-key_value {}}}
$('.js-fancybox').fancybox();
Это миксование css-блока и js-блока на одной dom-ноде.
Канонический БЭМ считает, что они не нужны, т.к. js-функционал нет смысла отделять от блока.
Гарри Робертс и не-Яндекс разработчики их активно используют и пропагандируют: т.к. разделение позволяет легко копировать css-блок без связанного с ним JS.
Библиотека блоков от Google, css-реализации их Material Design придуманного для Android.
<!-- Accent-colored raised button with ripple --><button class="mdl-button mdl-js-button>mdl-button--raised>mdl-js-ripple-effect>mdl-button--accent">Button</button>
.accordion.accordion-item.accordion-item-selected.nav_bar.nav_bar-link.nav_bar-link-clicked
Препроцессор BEM для HTML через Grunt/Gulp
<div block="b-animals"><div elem="cat" mod="size:big, color:red"></div></div>
Препроцессор BEM для HTML через PostHTML.
Синтаксис почти такой же, но с отличиями!
<div block="MadTeaParty"><div elem="march-hare" mods="type:mad">March Hare</div><div elem="march-hare" mods="mad">March Hare</div></div>
Please use "mods" for the attribute modifiers instead of "mod" and a space as a separator of modifiers instead of a comma.
Написание BEM в Jade.
+b.block1+e.element1 Foo+b.block2+e('a')(href="#bar").element Bar+e.element2 Baz
БЭМ дает лишь базовый набор правил, конкретную реализацию и синтаксис вы выбираете сами.
Как автор MCSS, рекоммендую теперь уже использовать именно БЭМ. С тех пор он стал менее строгим, и более понятным. MCSS может пригодится только на очень большом, монолитном проекте.
Most common misspelling is “SMACCS”.
I should just rename it to BEM.
b- и что такое независимый блок