ݺߣ

ݺߣShare a Scribd company logo
БЭМ в дикой природе
.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=/slideshow/index-55660182/55660182/"" 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- 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

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

  • 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.
  • 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
  • 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=/slideshow/index-55660182/55660182/"" 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- 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