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

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

Jul 11, 2015

Download

Documents

Yandex
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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

Кир  Белевич