Кир Белевич "Миксы во вселенной БЭМ"

48
Я.Субботник, Москва, 8 сентября 2012 года Руководитель группы мобильных поисковых интерфейсов Кир Белевич Миксы во вселенной БЭМ

Upload: yandex

Post on 11-Jul-2015

1.738 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Кир Белевич "Миксы во вселенной БЭМ"

Я.Субботник,  Москва,  8  сентября  2012  года

Руководитель  группы  мобильных  поисковых  интерфейсов

Кир  Белевич

Миксы  во  вселенной  БЭМ

Page 2: Кир Белевич "Миксы во вселенной БЭМ"

2

Миксы  это...

Page 3: Кир Белевич "Миксы во вселенной БЭМ"

3

Миксы  это...

смешивание  BEM-­‐сущностей  на  одном  DOM-­‐узле

Page 4: Кир Белевич "Миксы во вселенной БЭМ"

Что  это  значит?

4

Page 5: Кир Белевич "Миксы во вселенной БЭМ"

Можно  смешивать:— несколько  блоков

b-­‐boy  +  b-­‐girl

5

Page 6: Кир Белевич "Миксы во вселенной БЭМ"

Можно  смешивать:— несколько  блоков

b-­‐boy  +  b-­‐girl

— блок  и  элемент  этого  же  блока

b-­‐girl  +  b-­‐girl__heart

6

Page 7: Кир Белевич "Миксы во вселенной БЭМ"

Можно  смешивать:— несколько  блоков

b-­‐boy  +  b-­‐girl

— блок  и  элемент  этого  же  блока

b-­‐girl  +  b-­‐girl__heart

— блок  и  элемент  другого  блока

b-­‐boy  +  b-­‐girl__heart

7

Page 8: Кир Белевич "Миксы во вселенной БЭМ"

Можно  смешивать:— элементы  разных  блоков

b-­‐boy__heart  +  b-­‐girl__heart

8

Page 9: Кир Белевич "Миксы во вселенной БЭМ"

Можно  смешивать:— элементы  разных  блоков

b-­‐boy__heart  +  b-­‐girl__heart

— блок  с  модификатором  и  другой  блок

b-­‐girl  +  b-­‐girl_type_hot  +  b-­‐boy

9

Page 10: Кир Белевич "Миксы во вселенной БЭМ"

Можно  смешивать:— элементы  разных  блоков

b-­‐boy__heart  +  b-­‐girl__heart

— блок  с  модификатором  и  другой  блок

b-­‐girl  +  b-­‐girl_type_hot  +  b-­‐boy

— модификаторы  разных  блоков

b-­‐boy  +  b-­‐boy_type_hot  +  b-­‐girl  +  b-­‐girl_type_hot

10

Page 11: Кир Белевич "Миксы во вселенной БЭМ"

Зачем?

11

Page 12: Кир Белевич "Миксы во вселенной БЭМ"

Зачем?1.  Создание  одного  блока  на  основе  другого

12

Page 13: Кир Белевич "Миксы во вселенной БЭМ"

— повторное  использование  уже  написанных  шаблонов,  стилей  и  скриптов

— избавление  от  копипаста

13

Page 14: Кир Белевич "Миксы во вселенной БЭМ"

— повторное  использование  уже  написанных  шаблонов,  стилей  и  скриптов

— избавление  от  копипаста

— прозрачная  и  наглядная  файловая  структура

14

Page 15: Кир Белевич "Миксы во вселенной БЭМ"

— повторное  использование  уже  написанных  шаблонов,  стилей  и  скриптов

— избавление  от  копипаста

— прозрачная  и  наглядная  файловая  структура

— отдельная  полноценная  сущность

15

Page 16: Кир Белевич "Миксы во вселенной БЭМ"

BEMJSON

16

{block: "b-menu",mods: { layout: "horiz" },mix: [{ block: "b-my-category-list"}],content: [{ elem: "item", … },{ elem: "item", … }

]}

Page 17: Кир Белевич "Миксы во вселенной БЭМ"

HTML

17

<ul class=" b-menu b-menu_layout_horiz b-my-category-list"> <li class="b-menu__item">…</li> <li class="b-menu__item">…</li> …</ul>

Page 18: Кир Белевич "Миксы во вселенной БЭМ"

CSS

18

.b-my-category-list{background: linear-gradient(…);

}

Page 19: Кир Белевич "Миксы во вселенной БЭМ"

CSS

19

.b-my-category-list{background: linear-gradient(…);

}

.b-my-category-list .b-menu__item{padding: 10px;

}

Page 20: Кир Белевич "Миксы во вселенной БЭМ"

JS:  i-­‐bem.js

20

BEM.DOM.decl("b-my-category-list", {

});

this.findBlockOn([elem], block);

this.findBlocksOn([elem], block);

this.liveInitOnBlockInit(blockName,

Page 21: Кир Белевич "Миксы во вселенной БЭМ"

Файловая  структура

21

b-menu├── __item├── _layout├── b-menu.bemhtml├── b-menu.css└── b-menu.js

b-my-category-list├── __item├── _type├── b-my-category-list.css└── b-my-category-list.js

Page 22: Кир Белевич "Миксы во вселенной БЭМ"

22

Page 23: Кир Белевич "Миксы во вселенной БЭМ"

Можно  круче

23

Page 24: Кир Белевич "Миксы во вселенной БЭМ"

BEMJSON

24

{block: "b-my-category-list",content: [{ elem: "item", … },{ elem: "item", … },…

]}

Page 25: Кир Белевич "Миксы во вселенной БЭМ"

BEMHTML

25

block b-my-category-list, default: { applyCtx({ block: 'b-menu', mods: { layout: 'horiz' }, mix: { block: this.block }, content: this.ctx.content })}

Page 26: Кир Белевич "Миксы во вселенной БЭМ"

Зачем?2.  Расширение  функциональности  одного  блока  с  помощью  другого

26

Page 27: Кир Белевич "Миксы во вселенной БЭМ"

Например,  нажатое  состояние

27

Page 28: Кир Белевич "Миксы во вселенной БЭМ"

HTML

28

<button class=" b-form-button i-pressed-controller">BANG!</button>

<button class=" b-form-button i-pressed-controller i-pressed-controller_pressed_yes">BANG!</button>

Page 29: Кир Белевич "Миксы во вселенной БЭМ"

CSS

29

.b-form-button.i-pressed-controller_pressed_yes{ background-color: red;}

Page 30: Кир Белевич "Миксы во вселенной БЭМ"

Зачем?3.  Связь  между  абсолютно-­‐независимыми  блоками

30

Page 31: Кир Белевич "Миксы во вселенной БЭМ"

31

b-­‐boy

Page 32: Кир Белевич "Миксы во вселенной БЭМ"

32

b-­‐boyb-­‐girl

Page 33: Кир Белевич "Миксы во вселенной БЭМ"

33

Page 34: Кир Белевич "Миксы во вселенной БЭМ"

34

i-­‐love-­‐controller

Page 35: Кир Белевич "Миксы во вселенной БЭМ"

{block: "b-my-world",

}

Page 36: Кир Белевич "Миксы во вселенной БЭМ"

{block: "b-my-world",mix: [{ block: "i-love-controller" }],

}

Page 37: Кир Белевич "Миксы во вселенной БЭМ"

{block: "b-my-world",mix: [{ block: "i-love-controller" }],content: [ {

block: "b-boy",

},

]}

Page 38: Кир Белевич "Миксы во вселенной БЭМ"

{block: "b-my-world",mix: [{ block: "i-love-controller" }],content: [ {

block: "b-boy",mix: [{

block: "i-love-controller",elem: "boy"

}]},

]}

Page 39: Кир Белевич "Миксы во вселенной БЭМ"

{block: "b-my-world",mix: [{ block: "i-love-controller" }],content: [ {

block: "b-boy",mix: [{

block: "i-love-controller",elem: "boy"

}]},{

block: "b-girl",mix: [{

block: "i-love-controller",elem: "girl"

}] }]

}

Page 40: Кир Белевич "Миксы во вселенной БЭМ"

JS:  i-­‐bem.js

40

BEM.DOM.decl('i-love-controller', {

var boy = this.findBlockOn('boy', 'b-boy'), girl = this.findBlockOn('girl', 'b-girl');

});

Page 41: Кир Белевич "Миксы во вселенной БЭМ"

JS:  i-­‐bem.js

41

BEM.DOM.decl('i-love-controller', {

var boy = this.findBlockOn('boy', 'b-boy'), girl = this.findBlockOn('girl', 'b-girl'); girl.on('loveRequest', function(e, data) { boy.callPhone(data.phone); });

});

Page 42: Кир Белевич "Миксы во вселенной БЭМ"

А?  Чё?

42

Page 43: Кир Белевич "Миксы во вселенной БЭМ"

Итого— один  блок  на  основе  другого

             —  повторное  использование  шаблонов,  стилей  и  скриптов

             —  избавление  от  копипаста

             —  прозрачная  и  наглядная  файловая  структура

43

Page 44: Кир Белевич "Миксы во вселенной БЭМ"

Итого— один  блок  на  основе  другого

             —  повторное  использование  шаблонов,  стилей  и  скриптов

             —  избавление  от  копипаста

             —  прозрачная  и  наглядная  файловая  структура

— расширение  функционала  одного  блока  другим

44

Page 45: Кир Белевич "Миксы во вселенной БЭМ"

Итого— один  блок  на  основе  другого

             —  повторное  использование  шаблонов,  стилей  и  скриптов

             —  избавление  от  копипаста

             —  прозрачная  и  наглядная  файловая  структура

— расширение  функционала  одного  блока  другим

— связь  абсолютно-­‐независимых  блоков

45

Page 46: Кир Белевич "Миксы во вселенной БЭМ"

46

ОБОЖАЮ  ИСПОЛЬЗОВАТЬ  

МИКСЫ…

Page 48: Кир Белевич "Миксы во вселенной БЭМ"

Руководитель  группы  мобильных  поисковых  интерфейсов

deepsweet@yandex-­‐team.ru

@deepsweet

Кир  Белевич