SlideShare a Scribd company logo
1 of 77
Download to read offline
БЭМ в дикой природе
.block__el__el
.b-block
.block--mod
…
DOM-дерево
<UL>
<LI>
<A>
<SPAN></SPAN>
</A>
</LI>
</UL>
01.
02.
03.
04.
05.
06.
07.
БЭМ-дерево
<UL class=" menu ">
<LI class=" menu__item ">
<A class=" menu__link ">
<SPAN class=" menu__text "></SPAN>
</A>
</LI>
</UL>
01.
02.
03.
04.
05.
06.
07.
В исходниках этой презентации
спрятались подсказки!
В комментах html написаны тезисы доклада и комментарии к
слайдам требующим пояснений.
Презентация: bit.ly/bem-in-the-wild
5
bit.ly/
bem-in-the-wild
ещё один доклад про БЭМ…
Ну сколько
уже можно, а?…
В прошлом году мы обсуждали
ручную вёрстку по БЭМ…
Презентация:
bit.ly/bem-css-right
Видео доклада:
youtube.com/
watch?v=kBgHdSOj33A
Презентация содержит больше слайдов и примеров, чем
оригинальное видео.
9
Что значит
«по-БЭМ»?
— Мы используем БЭМ, но не FullStack, а #b_ в CSS.
— Нет, не как в Яндексе.
— Как?
— Ну как Гарри Робертс писал…
— Как именно, он разное писал?
— Fuck.
“
11
Each time we have to understand what exactly BEM we are talking
about. Both with customer and internally in the team.
Даже внутри специализированной рассылки слова
"они перешли на БЭМ!" могут означать что угодно.
2:45 PM - 20 Nov 2015
AAndrndreey Melikhoy Melikhovv
@amel_true
Follow
11 RETWEET 11 FAVORITE
ReplyRetweetFavorite
“
12
Непонятость
БЭМ
Проблема с
документацией
Яндекс-БЭМ
(Full Stack BEM)
Виталий Харисов
Сергей Бережной
Пример кода Яндекс-БЭМ
Верстаем надпись «Привет», input и кнопку.
21
Пример кода Яндекс-БЭМ
({
block : 'page',
title : 'hello',
head : [
{ elem : 'css', url : 'hello.min.css' }
],
scripts : [{ elem : 'js', url : 'hello.min.js' }],
mods : { theme : 'islands' },
content : [
{
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
22
Верстаем-верстаем, это BEMJSON
content : [
{
block : 'hello',
content : [{
elem : 'greeting',
content : 'Привет, %пользователь%!'
},{
block : 'input',
mods : {theme : 'islands', size : 'm'},
name : 'name',
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
23
Осталось кнопочку добавить…
{
block : 'button',
mods : {theme : 'islands', size : 'm',
type : 'submit'},
text : 'Нажать'
}
]
}
]
})
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
24
Это ещё не всё.
Тепер надо написать BEMHTML.
block('hello')(
js()(true),
tag()('form')
);
01.
02.
03.
04.
25
Кстати CSS и JS тоже надо писать
БЭМ пугал когда он вышел. Там была простыня
текста в документации на не очень прямом
английском про философию.
10:06 - 6 августа 2015
РРазрабоазработчиктчик
@jsunderhood
Читать
11 ТВИТ В ИЗБРАННОМ
ОтветитьРетвитнутьВ избранное
Что я имел ввиду - авторы БЭМ не смогли его
продать. В том числе из-за сложной и не очень
удобной документации, ИМХО.
10:06 - 6 августа 2015
РРазрабоазработчиктчик
@jsunderhood
Читать
11 РЕТВИТОВ 44 ТВИТОВ В ИЗБРАННОМ
ОтветитьРетвитнутьВ избранное
27
Даже разработчики Google Material Design не смогли с
первого раза правильно написать имена классов по БЭМ
:)
Диалекты БЭМ
БЭМ это фреймворк для создания фреймворков.
14:50 - 12 июля 2015 Ukraine, Ukraine
Vitaly HarisoVitaly Harisovv
@harisov
Читать
33 РЕТВИТОВ 11 ТВИТОВ В ИЗБРАННОМ
ОтветитьРетвитнутьВ избранное
OPOR
Артем Сапегин
OPOR
Известный пример использования методологии БЭМ сторонним
разработчиком - Артёмом Сапегиным.
.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
01.
02.
03.
04.
05.
06.
07.
08.
32
BEViS
Вадим Макишвили
BEViS
Диалект БЭМ, с более строгими правилами для максимальной
надежности верстки, придуманный Вадимом Макишвили для
Яндекс.Карт.
Нет миксов.
Нет модификаторов.
Есть состояния:
<div class="popup _orientation_top"></div>
<button class="button _pressed _focused"></div>
.button._pressed {}
01.
02.
03.
35
BEMIT
Гарри Робертс и Николас Галлахер
BEMIT: пространства имен
Продвинутое использование префиксов и суффиксов от Гарри
Робертса. Попытка описать взаимосвязь между независимыми
блоками с точки зрения 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>
01.
02.
03.
04.
38
БЁМ
Роман Комаров
БЁМ: шутка всерьез
БЭМ в котором можно писать как хочешь. Хоть с элементами
элементов.
.block__element__subelement
Теперь я использую БЁМ — это примерно как БЭМ, только вы
можете писать его как хотите, а не как укажет партия или
церковь. Ура!
Роман Комаров
“
41
Префиксы
Префиксы
b- ,
l- ,
g- ,
i- ,
h- ,
m- ,
c- и js- ,
qa- ,
o- ,
c- (другой :),
u- ,
t- ,
s- ,
is- ,
has- …
43
Синтаксис
Стиль Гарри Робертса
Многим нравится зарубежный формат модификаторов, через -- ,
он читабельней.
<a class="block-name__element-name --state_active ">
45
Стиль camelCase
А через camelCase – ещё читабельней!
<a class=" blockName__elementName --state_active">
46
Стиль без подчеркиваний
Некоторые идут ещё дальше и заменяют __ на - . camelCase
единственный гарантирует что вы поймете где блок, а где
элемент.
<a class=" blockName-elementName --state_active">
47
Сокращенные
модификаторы
Сокращенные модификаторы
Зарубежом их назвали „Individual modifiers: a shorter syntax“. У
нас перевели как «Обособленные модификаторы: сокращенный
синтаксис». Яндекс в официальной документации называет их
«Стиль No-namespace».
<div class="blockName__elem -key_value ">
.blockName {
&__elem {
& .-key_value {
}
01.
02.
03.
04.
05.
49
JS-блоки
JS-блоки
$(' .js- fancybox').fancybox();
Это миксование css-блока и js-блока на одной dom-ноде.
Канонический БЭМ считает, что они не нужны, т.к. js-функционал
нет смысла отделять от блока. Гарри Робертс и не-Яндекс
разработчики их активно используют и пропагандируют: т.к.
разделение позволяет легко копировать css-блок без связанного с
ним JS.
51
Google MDL
Google MDL
Библиотека блоков от 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>
01.
02.
03.
04.
05.
06.
07.
53
Госдеп
U.S. Goverment: 18F BEM
.accordion
.accordion-item
.accordion-item-selected
.nav_bar
.nav_bar-link
.nav_bar-link-clicked
01.
02.
03.
04.
05.
06.
07.
55
BEML /
posthtml-bem /
BEMto
BEML
Препроцессор BEM для HTML через Grunt/Gulp
<div block="b-animals">
<div elem="cat" mod="size:big, color:red"></div>
</div>
01.
02.
03.
57
posthtml-bem
Препроцессор 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.
01.
02.
03.
04.
58
BEMto
Написание BEM в Jade.
+b.block1
+e.element1 Foo
+b.block2
+e('a')(href="#bar").element Bar
+e.element2 Baz
01.
02.
03.
04.
05.
59
Вы можете создавать свои
гайдлайны
БЭМ дает лишь базовый набор правил, конкретную реализацию и
синтаксис вы выбираете сами.
• Harry Roberts
• iDeus
• Artem Sapegin
• CodeRiver (Yuriy Artyukh, cssing.org.ua)
• AzaGroup
60
bem.info
getbem.com
Это всё БЭМ
Методология и
реализации
Реализации БЭМ:
• OPOR
• BEViS
• BEMIT
• БЁМ
• 18F BEM
• Harry Roberts BEM
• iDeus BEM
• Coderiver BEM
• AzaBEM
65
BEM is like Agile
Роберт Харитонов
MCSS → BEM
Как автор MCSS, рекоммендую теперь уже использовать
именно БЭМ. С тех пор он стал менее строгим, и более
понятным. MCSS может пригодится только на очень большом,
монолитном проекте.
Роберт Харитонов
“
68
Джонатан Снук
SMACSS → BEM
Most common misspelling is “SMACCS”.
I should just rename it to BEM.
Jonathan Snook
“
70
ru.bem.info/
forum/
Slack WSD
/bem
Пробуйте!
%Company%
BEM
Читать дальше
• Cоветы от ведущих БЭМ-разработчиков: ошибки и best practices
• BEM Quick Start Guide — БЭМ: UnOfficial Team
• Мажорный релиз новой документации — БЭМ: Яндекс Team
• Full BEM Stack в HTML — Владимир Гриненко
• Классификация ошибок BEM CSS (со стр. 50) — Александр
Корецкий @n2j7
• Material Design Lite CSS — Google
• i-bem.js
• варианты использования префиксов от Гарри Робертса
• BEMIT — Harry Roberts
75
…и дальше
• что такое блок, префикс b- и что такое независимый блок
• контекстные блоки (темы) (раздел «Внутри контекстного блока»)
• layout-блоки и холдер-блоки
• как позиционировать БЭМ-блоки относительно друг друга
• абстрактные блоки (раздел „i-, от include“) и их реализация в
Sass через %extend-only-selector+extend или лучше через
mixin+include
• уровни переопределения (раздел «Модификация файлами») и
структура блоков на файловой системе
• глобальные модификаторы
76
Спасибо!
Igor Zenich
EPAM
• delka.name
• twitter.com/delaz
• igor@delka.name
Презентация: bit.ly/bem-in-the-wild
77

More Related Content

What's hot

basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкRoman Dvornov
 
Вёрстка по методологии БЭМ
Вёрстка по методологии БЭМВёрстка по методологии БЭМ
Вёрстка по методологии БЭМversusbassz
 
A вы верите в систематизацию
A вы верите в систематизацию A вы верите в систематизацию
A вы верите в систематизацию Irina Levina
 
Denis Bugarchev
Denis BugarchevDenis Bugarchev
Denis Bugarchevyaevents
 
Как построить DOM
Как построить DOMКак построить DOM
Как построить DOMRoman Dvornov
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
JavaScript в терминах БЭМ / Владимир Варанкин (Яндекс)
JavaScript в терминах БЭМ / Владимир Варанкин (Яндекс)JavaScript в терминах БЭМ / Владимир Варанкин (Яндекс)
JavaScript в терминах БЭМ / Владимир Варанкин (Яндекс)Ontico
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныRoman Dvornov
 
Виталий Харисов "Настоящее и будущее БЭМ"
Виталий Харисов "Настоящее и будущее БЭМ"Виталий Харисов "Настоящее и будущее БЭМ"
Виталий Харисов "Настоящее и будущее БЭМ"Yandex
 
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И... Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...Тарасов Константин
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургAlexey Ivanov
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 
Sozdanie saita v_ mc_mediadw3_steps
Sozdanie saita v_ mc_mediadw3_stepsSozdanie saita v_ mc_mediadw3_steps
Sozdanie saita v_ mc_mediadw3_stepsStiv-redter
 

What's hot (17)

basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворк
 
Вёрстка по методологии БЭМ
Вёрстка по методологии БЭМВёрстка по методологии БЭМ
Вёрстка по методологии БЭМ
 
A вы верите в систематизацию
A вы верите в систематизацию A вы верите в систематизацию
A вы верите в систематизацию
 
Denis Bugarchev
Denis BugarchevDenis Bugarchev
Denis Bugarchev
 
Как построить DOM
Как построить DOMКак построить DOM
Как построить DOM
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
JavaScript в терминах БЭМ / Владимир Варанкин (Яндекс)
JavaScript в терминах БЭМ / Владимир Варанкин (Яндекс)JavaScript в терминах БЭМ / Владимир Варанкин (Яндекс)
JavaScript в терминах БЭМ / Владимир Варанкин (Яндекс)
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
БЭМ
БЭМБЭМ
БЭМ
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Виталий Харисов "Настоящее и будущее БЭМ"
Виталий Харисов "Настоящее и будущее БЭМ"Виталий Харисов "Настоящее и будущее БЭМ"
Виталий Харисов "Настоящее и будущее БЭМ"
 
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И... Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
Sozdanie saita v_ mc_mediadw3_steps
Sozdanie saita v_ mc_mediadw3_stepsSozdanie saita v_ mc_mediadw3_steps
Sozdanie saita v_ mc_mediadw3_steps
 

Similar to БЭМ в дикой природе

Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Yandex
 
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...Yandex
 
Alex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlexander Baumgertner
 
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компанийАлександр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компанийYandex
 
WebCamp, Front-end Developers Day Игорь Зенич "Пишем БЭМ правильно"
WebCamp, Front-end Developers Day Игорь Зенич "Пишем БЭМ правильно"WebCamp, Front-end Developers Day Игорь Зенич "Пишем БЭМ правильно"
WebCamp, Front-end Developers Day Игорь Зенич "Пишем БЭМ правильно"GeeksLab Odessa
 
Презентация к докладу про БЭМ by Mikhail Troshev
Презентация к докладу про БЭМ  by Mikhail TroshevПрезентация к докладу про БЭМ  by Mikhail Troshev
Презентация к докладу про БЭМ by Mikhail Troshev1 1
 
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Yandex
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"Roman Dvornov
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Yandex
 
Components now! (in russian)
Components now! (in russian)Components now! (in russian)
Components now! (in russian)Mikhail Davydov
 
Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)Ontico
 
BEM — block, element, modification conception
BEM — block, element, modification conceptionBEM — block, element, modification conception
BEM — block, element, modification conceptionVadim Patsev
 
Сергей Бережной "Внедрение БЭМ в существующие системы"
Сергей Бережной "Внедрение БЭМ в существующие системы"Сергей Бережной "Внедрение БЭМ в существующие системы"
Сергей Бережной "Внедрение БЭМ в существующие системы"Yandex
 
bem-components — от методологии до full stack платформы
bem-components — от методологии до full stack платформыbem-components — от методологии до full stack платформы
bem-components — от методологии до full stack платформыYandex
 
BEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда
BEM на корпоративном веб-ресурсе — отказоустойчивость фронтендаBEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда
BEM на корпоративном веб-ресурсе — отказоустойчивость фронтендаDALEE digital agency
 
BEM for corporate sites — failover frontend
BEM for corporate sites — failover frontendBEM for corporate sites — failover frontend
BEM for corporate sites — failover frontendAlex Yaroshevich
 
Node JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решенияNode JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решенияAlexander Kucherenko
 
Сергей Бережной — bem-core v1.0.0
Сергей Бережной — bem-core v1.0.0Сергей Бережной — bem-core v1.0.0
Сергей Бережной — bem-core v1.0.0Yandex
 
Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"
Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"
Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"Yandex
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryTatyanazaxarova
 

Similar to БЭМ в дикой природе (20)

Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
 
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
 
Alex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projects
 
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компанийАлександр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
 
WebCamp, Front-end Developers Day Игорь Зенич "Пишем БЭМ правильно"
WebCamp, Front-end Developers Day Игорь Зенич "Пишем БЭМ правильно"WebCamp, Front-end Developers Day Игорь Зенич "Пишем БЭМ правильно"
WebCamp, Front-end Developers Day Игорь Зенич "Пишем БЭМ правильно"
 
Презентация к докладу про БЭМ by Mikhail Troshev
Презентация к докладу про БЭМ  by Mikhail TroshevПрезентация к докладу про БЭМ  by Mikhail Troshev
Презентация к докладу про БЭМ by Mikhail Troshev
 
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
 
Components now! (in russian)
Components now! (in russian)Components now! (in russian)
Components now! (in russian)
 
Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)
 
BEM — block, element, modification conception
BEM — block, element, modification conceptionBEM — block, element, modification conception
BEM — block, element, modification conception
 
Сергей Бережной "Внедрение БЭМ в существующие системы"
Сергей Бережной "Внедрение БЭМ в существующие системы"Сергей Бережной "Внедрение БЭМ в существующие системы"
Сергей Бережной "Внедрение БЭМ в существующие системы"
 
bem-components — от методологии до full stack платформы
bem-components — от методологии до full stack платформыbem-components — от методологии до full stack платформы
bem-components — от методологии до full stack платформы
 
BEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда
BEM на корпоративном веб-ресурсе — отказоустойчивость фронтендаBEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда
BEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда
 
BEM for corporate sites — failover frontend
BEM for corporate sites — failover frontendBEM for corporate sites — failover frontend
BEM for corporate sites — failover frontend
 
Node JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решенияNode JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решения
 
Сергей Бережной — bem-core v1.0.0
Сергей Бережной — bem-core v1.0.0Сергей Бережной — bem-core v1.0.0
Сергей Бережной — bem-core v1.0.0
 
Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"
Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"
Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
 

БЭМ в дикой природе

  • 1. БЭМ в дикой природе .block__el__el .b-block .block--mod …
  • 3. БЭМ-дерево <UL class=" menu "> <LI class=" menu__item "> <A class=" menu__link "> <SPAN class=" menu__text "></SPAN> </A> </LI> </UL> 01. 02. 03. 04. 05. 06. 07.
  • 4.
  • 5. В исходниках этой презентации спрятались подсказки! В комментах html написаны тезисы доклада и комментарии к слайдам требующим пояснений. Презентация: bit.ly/bem-in-the-wild 5
  • 7. ещё один доклад про БЭМ…
  • 9. В прошлом году мы обсуждали ручную вёрстку по БЭМ… Презентация: bit.ly/bem-css-right Видео доклада: youtube.com/ watch?v=kBgHdSOj33A Презентация содержит больше слайдов и примеров, чем оригинальное видео. 9
  • 11. — Мы используем БЭМ, но не FullStack, а #b_ в CSS. — Нет, не как в Яндексе. — Как? — Ну как Гарри Робертс писал… — Как именно, он разное писал? — Fuck. “ 11
  • 12. Each time we have to understand what exactly BEM we are talking about. Both with customer and internally in the team. Даже внутри специализированной рассылки слова "они перешли на БЭМ!" могут означать что угодно. 2:45 PM - 20 Nov 2015 AAndrndreey Melikhoy Melikhovv @amel_true Follow 11 RETWEET 11 FAVORITE ReplyRetweetFavorite “ 12
  • 14.
  • 16.
  • 17.
  • 21. Пример кода Яндекс-БЭМ Верстаем надпись «Привет», input и кнопку. 21
  • 22. Пример кода Яндекс-БЭМ ({ block : 'page', title : 'hello', head : [ { elem : 'css', url : 'hello.min.css' } ], scripts : [{ elem : 'js', url : 'hello.min.js' }], mods : { theme : 'islands' }, content : [ { 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 22
  • 23. Верстаем-верстаем, это BEMJSON content : [ { block : 'hello', content : [{ elem : 'greeting', content : 'Привет, %пользователь%!' },{ block : 'input', mods : {theme : 'islands', size : 'm'}, name : 'name', 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 23
  • 24. Осталось кнопочку добавить… { block : 'button', mods : {theme : 'islands', size : 'm', type : 'submit'}, text : 'Нажать' } ] } ] }) 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 24
  • 25. Это ещё не всё. Тепер надо написать BEMHTML. block('hello')( js()(true), tag()('form') ); 01. 02. 03. 04. 25
  • 26. Кстати CSS и JS тоже надо писать
  • 27. БЭМ пугал когда он вышел. Там была простыня текста в документации на не очень прямом английском про философию. 10:06 - 6 августа 2015 РРазрабоазработчиктчик @jsunderhood Читать 11 ТВИТ В ИЗБРАННОМ ОтветитьРетвитнутьВ избранное Что я имел ввиду - авторы БЭМ не смогли его продать. В том числе из-за сложной и не очень удобной документации, ИМХО. 10:06 - 6 августа 2015 РРазрабоазработчиктчик @jsunderhood Читать 11 РЕТВИТОВ 44 ТВИТОВ В ИЗБРАННОМ ОтветитьРетвитнутьВ избранное 27
  • 28. Даже разработчики Google Material Design не смогли с первого раза правильно написать имена классов по БЭМ :)
  • 29. Диалекты БЭМ БЭМ это фреймворк для создания фреймворков. 14:50 - 12 июля 2015 Ukraine, Ukraine Vitaly HarisoVitaly Harisovv @harisov Читать 33 РЕТВИТОВ 11 ТВИТОВ В ИЗБРАННОМ ОтветитьРетвитнутьВ избранное
  • 30. OPOR
  • 32. OPOR Известный пример использования методологии БЭМ сторонним разработчиком - Артёмом Сапегиным. .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 01. 02. 03. 04. 05. 06. 07. 08. 32
  • 33. BEViS
  • 35. BEViS Диалект БЭМ, с более строгими правилами для максимальной надежности верстки, придуманный Вадимом Макишвили для Яндекс.Карт. Нет миксов. Нет модификаторов. Есть состояния: <div class="popup _orientation_top"></div> <button class="button _pressed _focused"></div> .button._pressed {} 01. 02. 03. 35
  • 36. BEMIT
  • 37. Гарри Робертс и Николас Галлахер
  • 38. BEMIT: пространства имен Продвинутое использование префиксов и суффиксов от Гарри Робертса. Попытка описать взаимосвязь между независимыми блоками с точки зрения 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> 01. 02. 03. 04. 38
  • 41. БЁМ: шутка всерьез БЭМ в котором можно писать как хочешь. Хоть с элементами элементов. .block__element__subelement Теперь я использую БЁМ — это примерно как БЭМ, только вы можете писать его как хотите, а не как укажет партия или церковь. Ура! Роман Комаров “ 41
  • 43. Префиксы b- , l- , g- , i- , h- , m- , c- и js- , qa- , o- , c- (другой :), u- , t- , s- , is- , has- … 43
  • 45. Стиль Гарри Робертса Многим нравится зарубежный формат модификаторов, через -- , он читабельней. <a class="block-name__element-name --state_active "> 45
  • 46. Стиль camelCase А через camelCase – ещё читабельней! <a class=" blockName__elementName --state_active"> 46
  • 47. Стиль без подчеркиваний Некоторые идут ещё дальше и заменяют __ на - . camelCase единственный гарантирует что вы поймете где блок, а где элемент. <a class=" blockName-elementName --state_active"> 47
  • 49. Сокращенные модификаторы Зарубежом их назвали „Individual modifiers: a shorter syntax“. У нас перевели как «Обособленные модификаторы: сокращенный синтаксис». Яндекс в официальной документации называет их «Стиль No-namespace». <div class="blockName__elem -key_value "> .blockName { &__elem { & .-key_value { } 01. 02. 03. 04. 05. 49
  • 51. JS-блоки $(' .js- fancybox').fancybox(); Это миксование css-блока и js-блока на одной dom-ноде. Канонический БЭМ считает, что они не нужны, т.к. js-функционал нет смысла отделять от блока. Гарри Робертс и не-Яндекс разработчики их активно используют и пропагандируют: т.к. разделение позволяет легко копировать css-блок без связанного с ним JS. 51
  • 53. Google MDL Библиотека блоков от 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> 01. 02. 03. 04. 05. 06. 07. 53
  • 55. U.S. Goverment: 18F BEM .accordion .accordion-item .accordion-item-selected .nav_bar .nav_bar-link .nav_bar-link-clicked 01. 02. 03. 04. 05. 06. 07. 55
  • 57. BEML Препроцессор BEM для HTML через Grunt/Gulp <div block="b-animals"> <div elem="cat" mod="size:big, color:red"></div> </div> 01. 02. 03. 57
  • 58. posthtml-bem Препроцессор 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. 01. 02. 03. 04. 58
  • 59. BEMto Написание BEM в Jade. +b.block1 +e.element1 Foo +b.block2 +e('a')(href="#bar").element Bar +e.element2 Baz 01. 02. 03. 04. 05. 59
  • 60. Вы можете создавать свои гайдлайны БЭМ дает лишь базовый набор правил, конкретную реализацию и синтаксис вы выбираете сами. • Harry Roberts • iDeus • Artem Sapegin • CodeRiver (Yuriy Artyukh, cssing.org.ua) • AzaGroup 60
  • 65. Реализации БЭМ: • OPOR • BEViS • BEMIT • БЁМ • 18F BEM • Harry Roberts BEM • iDeus BEM • Coderiver BEM • AzaBEM 65
  • 66. BEM is like Agile
  • 68. MCSS → BEM Как автор MCSS, рекоммендую теперь уже использовать именно БЭМ. С тех пор он стал менее строгим, и более понятным. MCSS может пригодится только на очень большом, монолитном проекте. Роберт Харитонов “ 68
  • 70. SMACSS → BEM Most common misspelling is “SMACCS”. I should just rename it to BEM. Jonathan Snook “ 70
  • 75. Читать дальше • Cоветы от ведущих БЭМ-разработчиков: ошибки и best practices • BEM Quick Start Guide — БЭМ: UnOfficial Team • Мажорный релиз новой документации — БЭМ: Яндекс Team • Full BEM Stack в HTML — Владимир Гриненко • Классификация ошибок BEM CSS (со стр. 50) — Александр Корецкий @n2j7 • Material Design Lite CSS — Google • i-bem.js • варианты использования префиксов от Гарри Робертса • BEMIT — Harry Roberts 75
  • 76. …и дальше • что такое блок, префикс b- и что такое независимый блок • контекстные блоки (темы) (раздел «Внутри контекстного блока») • layout-блоки и холдер-блоки • как позиционировать БЭМ-блоки относительно друг друга • абстрактные блоки (раздел „i-, от include“) и их реализация в Sass через %extend-only-selector+extend или лучше через mixin+include • уровни переопределения (раздел «Модификация файлами») и структура блоков на файловой системе • глобальные модификаторы 76
  • 77. Спасибо! Igor Zenich EPAM • delka.name • twitter.com/delaz • igor@delka.name Презентация: bit.ly/bem-in-the-wild 77