.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
Презентация содержит больше слайдов и примеров, чем оригинальное видео.
Верстаем надпись «Привет», 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>
.scrollable
a.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
БЭМ дает лишь базовый набор правил, конкретную реализацию и синтаксис вы выбираете сами.
b-
и что такое независимый блок