История одной кнопки или b-form-button.css и b-form-button.js (Елена...

200
РИТ -2012, Москва, 2 апреля 2012 года Елена Глухова Варвара Степанова b-form-button.css и b-form-button.js История одной кнопки #БЭМ Tuesday, April 3, 12

Upload: ontico

Post on 15-Dec-2014

1.523 views

Category:

Documents


5 download

DESCRIPTION

 

TRANSCRIPT

Page 1: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

РИТ-2012, Москва, 2 апреля 2012 года

Елена ГлуховаВарвара Степанова

b-form-button.css и b-form-button.jsИстория одной кнопки

#БЭМ

Tuesday, April 3, 12

Page 2: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

2

Tuesday, April 3, 12

Page 3: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

3

Цветовая адаптация

Tuesday, April 3, 12

Page 4: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

4

Tuesday, April 3, 12

Page 5: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Что и Зачем?

Tuesday, April 3, 12

Page 6: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Все сервисы6

Tuesday, April 3, 12

Page 7: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Все сервисы6

Все браузеры

Tuesday, April 3, 12

Page 8: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Все сервисы6

Все браузерыВсе операционные системы

Tuesday, April 3, 12

Page 9: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Браузеры7

Tuesday, April 3, 12

Page 10: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

8

Цветовая адаптация

Tuesday, April 3, 12

Page 11: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

8

Цветовая адаптация

Tuesday, April 3, 12

Page 12: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

9

Все состояния

Tuesday, April 3, 12

Page 13: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

9

Все состояния

Tuesday, April 3, 12

Page 14: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

9

Все состояния

Tuesday, April 3, 12

Page 15: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

9

Все состояния

Tuesday, April 3, 12

Page 16: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

9

Все состояния

Tuesday, April 3, 12

Page 17: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Скачать Яндекс.Навигатор

Кнопка в тексте10

Tuesday, April 3, 12

Page 18: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Темы11

Tuesday, April 3, 12

Page 19: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Анатомия

Tuesday, April 3, 12

Page 20: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Элемент формы13

Tuesday, April 3, 12

Page 21: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button”> ... <input class=”b-form-button__input” type=”submit” value=””/></span>

<span> <input type=”submit”/></span>

или

<span> <input type=”button”/></span>

14

Tuesday, April 3, 12

Page 22: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Скачать Яндекс.Навигатор

Ссылка15

Tuesday, April 3, 12

Page 23: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<a href=”ya.ru”> ...</a>

<!-- без <input/> внутри -->

16

Tuesday, April 3, 12

Page 24: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Верстаем по БЭМ!

Tuesday, April 3, 12

Page 25: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

bit.ly/vXZRjx

Что такое БЭМ?18

Tuesday, April 3, 12

Page 26: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

bit.ly/HfIAHc

Репозиторий с кнопкой на 19

Tuesday, April 3, 12

Page 27: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button”> ...</span>

Кнопка это блок20

Tuesday, April 3, 12

Page 28: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button/ b-form-button.css

Блок на файловой системе21

Tuesday, April 3, 12

Page 29: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Элемент формы22

Tuesday, April 3, 12

Page 30: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button”> ... <input class=”b-form-button__input” type=”submit” value=””/></span>

<span class=”b-form-button”> ... <input class=”b-form-button__input” type=”submit” value=””/></span>

Элемент input23

Tuesday, April 3, 12

Page 31: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button/ b-form-button.css __input/ b-form-button__input.css

24

Tuesday, April 3, 12

Page 32: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

.b-form-button__input{ opacity: 0; .../* визуально прячем инпут и натягиваем его поверх всей кнопки*/}

25

Tuesday, April 3, 12

Page 33: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

26

Tuesday, April 3, 12

Page 34: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Идея в картинках27

Tuesday, April 3, 12

Page 35: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

27

Tuesday, April 3, 12

Page 36: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

27

Tuesday, April 3, 12

Page 37: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

27

Tuesday, April 3, 12

Page 38: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

27

Tuesday, April 3, 12

Page 39: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

27

Tuesday, April 3, 12

Page 40: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

27

Tuesday, April 3, 12

Page 41: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

27

Tuesday, April 3, 12

Page 42: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Режем на кусочки28

Tuesday, April 3, 12

Page 43: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Левая часть29

Tuesday, April 3, 12

Page 44: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button”> <span class=”b-form-button__left”> </span> ...</span>

30

Tuesday, April 3, 12

Page 45: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

.b-form-button__left{ ...

background: no-repeat 0 2px; }

31

Tuesday, April 3, 12

Page 46: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Правая часть32

Tuesday, April 3, 12

Page 47: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

.b-form-button{ ... /* background-image задаётся в _theme */ background-repeat: no-repeat; background-position: 100% -55px;}

33

Tuesday, April 3, 12

Page 48: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Середина34

Tuesday, April 3, 12

Page 49: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button”> ... <span class=”b-form-button__content”> Универсальная кнопка </span> ...</span>

35

Tuesday, April 3, 12

Page 50: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

.b-form-button__content{ .../* background-image задаётся в _theme */ background: repeat-x 0 -112px;}

36

Tuesday, April 3, 12

Page 51: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Размер имеет значение37

Tuesday, April 3, 12

Page 52: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button b-form-button_size_m”> ...</span>

Размер — это модификатор38

Tuesday, April 3, 12

Page 53: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button/ b-form-button.css _size/ b-form-button_size_s.css b-form-button_size_m.css b-form-button_size_l.css b-form-button_size_xl.css

39

Tuesday, April 3, 12

Page 54: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

.b-form-button_size_m { height: 26px;}

.b-form-button_size_m .b-form-button__content { font-size: 13px; padding: 0 10px;

line-height: 25px;}

40

Tuesday, April 3, 12

Page 55: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button b-form-button_size_m b-form-button_theme_grey-m”> ...</span>

Тема — это модификатор41

Tuesday, April 3, 12

Page 56: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button/ _theme/ b-form-button_theme_grey-m.css b-form-button_theme_grey-m.png b-form-button_theme_grey-l.css b-form-button_theme_grey-l.png ...

42

Tuesday, April 3, 12

Page 57: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

.b-form-button_theme_grey-m,

.b-form-button_theme_grey-m .b-form-button__left,

.b-form-button_theme_grey-m .b-form-button__content{ color: #000; background-image: url(b-form-button_theme_grey-m.png);}

43

Tuesday, April 3, 12

Page 58: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Новая тема44

Tuesday, April 3, 12

Page 59: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button b-form-button_size_m b-form-button_theme_grey-m

Состояния — это модификаторы45

Tuesday, April 3, 12

Page 60: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button b-form-button_size_m b-form-button_theme_grey-m b-form-button_focused_yes b-form-button_hovered_yes”>

Состояния — это модификаторы45

Tuesday, April 3, 12

Page 61: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button b-form-button_size_m b-form-button_theme_grey-m b-form-button_focused_yes b-form-button_hovered_yes”> ...

Важно: Состояния переключает JavaScript

Состояния — это модификаторы45

Tuesday, April 3, 12

Page 62: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Несколько состояний одновременно46

Tuesday, April 3, 12

Page 63: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

В фокусе46

Tuesday, April 3, 12

Page 64: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

47

В фокусе и наведенная

Tuesday, April 3, 12

Page 65: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

.b-form-button_focused_yes{ background-position: 100% -570px;}

.b-form-button_focused_yes .b-form-button__left{ background-position: 0 -513px;}

...

48

Tuesday, April 3, 12

Page 66: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button/ _theme/ _size/ _hovered/ _focused/ _pressed/ _disabled/ ...

49

Tuesday, April 3, 12

Page 67: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Нажатая50

_pressed_yesTuesday, April 3, 12

Page 68: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button ...”> ... <span class=”b-form-button__content”> <span class=”b-form-button__text”> Универсальная кнопка </span> </span> ...</span>

51

Tuesday, April 3, 12

Page 69: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

.b-form-button_pressed_yes{ background-position: 100% -399px;}

...

.b-form-button_pressed_yes .b-form-button__text{ padding-top: 1px;}

52

Tuesday, April 3, 12

Page 70: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Результат53

Tuesday, April 3, 12

Page 71: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button.js

Tuesday, April 3, 12

Page 72: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Требования к функциональностиРазличные состояния кнопки

— фокус и наведение мыши

— нажатость

— неактивность

55

Tuesday, April 3, 12

Page 73: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Как браузерный контрол56

Tuesday, April 3, 12

Page 74: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Как браузерный контрол

— управление с клавиатуры

56

Tuesday, April 3, 12

Page 75: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Как браузерный контрол

— управление с клавиатуры— события

56

Tuesday, April 3, 12

Page 76: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Как браузерный контрол

— управление с клавиатуры— события— неактивная

56

Tuesday, April 3, 12

Page 77: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button/ ... b-form-button.css

57

Tuesday, April 3, 12

Page 78: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button/ ... b-form-button.css b-form-button.js

57

Tuesday, April 3, 12

Page 79: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

bit.ly/HbUcZT

Документация к блоку i-bem58

Tuesday, April 3, 12

Page 80: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

bit.ly/HKyEWa

bit.ly/nkQbWF

Мастер-классы про JavaScript59

Tuesday, April 3, 12

Page 81: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Особенный JavaScript

Tuesday, April 3, 12

Page 82: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Особенный JavaScript61

Tuesday, April 3, 12

Page 83: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Особенный JavaScriptООП-представление— class & instance

61

Tuesday, April 3, 12

Page 84: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Особенный JavaScriptООП-представление— class & instance

Предметная область БЭМ—оперируем БЭМ-сущностями— не работаем с CSS-классами и DOM-деревом

61

Tuesday, April 3, 12

Page 85: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Особенный JavaScript62

Tuesday, April 3, 12

Page 86: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Особенный JavaScriptБлок — это— BEM-объект– DOM node

62

Tuesday, April 3, 12

Page 87: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Особенный JavaScriptБлок — это— BEM-объект– DOM node

Хелперы— для работы с модификаторами

— для работы со структурой блока

— для работы с событиями

62

Tuesday, April 3, 12

Page 88: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Декларативный стиль

Tuesday, April 3, 12

Page 89: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button.js64

Tuesday, April 3, 12

Page 90: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', {

/* Динамические свойства и методы */

},{

b-form-button.js64

Tuesday, April 3, 12

Page 91: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', {

/* Динамические свойства и методы */

},{

/* Статические свойства и методы */

})

b-form-button.js64

Tuesday, April 3, 12

Page 92: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

На языке состояний

Tuesday, April 3, 12

Page 93: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

На языке модификаторов

Tuesday, April 3, 12

Page 94: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

67

Tuesday, April 3, 12

Page 95: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

68

Tuesday, April 3, 12

Page 96: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

69

Tuesday, April 3, 12

Page 97: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

70

JavaScript

Tuesday, April 3, 12

Page 98: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', {

onSetMod : {

'mod' : function() { // Реакция на установку // модификатора }

}

71

Tuesday, April 3, 12

Page 99: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', {

onSetMod : { 'mod' : { 'val' : function() { // Реакция на установку // значения модификатора } } }

72

Tuesday, April 3, 12

Page 100: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

focused

Tuesday, April 3, 12

Page 101: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

В фокусе74

<input type=”submit”/>

Tuesday, April 3, 12

Page 102: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

focused: ‘yes’75

Tuesday, April 3, 12

Page 103: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

focused: ‘yes’— Связь с браузерным контролом

input — в фокусе

75

Tuesday, April 3, 12

Page 104: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

focused: ‘yes’— Связь с браузерным контролом

input — в фокусе— Неактивная кнопка — без фокуса

75

Tuesday, April 3, 12

Page 105: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {

76

Tuesday, April 3, 12

Page 106: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {

'focused' : {

'yes' : function() {

76

Tuesday, April 3, 12

Page 107: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {

'focused' : {

'yes' : function() {

if(this.hasMod('disabled', 'yes')) return false; }

}

76

Tuesday, April 3, 12

Page 108: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

/** * @protected * @param {Object} [elem] вложенный элемент * @param {String} modName имя модификатора * @param {String} [modVal] значение модификатора * @returns {Boolean} */

hasMod : function( elem, modName, modVal)

77

Tuesday, April 3, 12

Page 109: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {

'focused' : {

'yes' : function() {

... this .bindTo('keydown', this._onKeyDown)

78

Tuesday, April 3, 12

Page 110: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

/** * @protected * @param {jQuery|String} [elem] элемент * @param {String} event имя события * @param {Function} fn функция-обработчик, будет выполнена в контексте блока * @returns {BEM} */

bindTo : function(elem, event, fn)

79

Tuesday, April 3, 12

Page 111: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

В фокусе80

<input type=”submit”/>

Tuesday, April 3, 12

Page 112: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {

'focused' : {

'yes' : function() {

... this .bindTo('keydown', this._onKeyDown) .elem('input').focus();

81

Tuesday, April 3, 12

Page 113: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

/** * @protected * @param {String} names имя (или через пробел имена) вложенных элементов * @param {String} [modName] имя модификатора * @param {String} [modVal] значение модификатора * @returns {jQuery} DOM-элементы */

elem : function( names, modName, modVal)

82

Tuesday, April 3, 12

Page 114: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {

'focused' : { 'yes': ...,

'' : function() {

this .unbindFrom('keydown') .elem('input').blur();

83

Tuesday, April 3, 12

Page 115: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

disabled

Tuesday, April 3, 12

Page 116: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Неактивная85

<input type=”submit”/>

Tuesday, April 3, 12

Page 117: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

disabled: ‘yes’86

Tuesday, April 3, 12

Page 118: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

disabled: ‘yes’— Отсутствие реакции

86

Tuesday, April 3, 12

Page 119: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

disabled: ‘yes’— Отсутствие реакции— Связь с браузерным контролом

input — disabled

86

Tuesday, April 3, 12

Page 120: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {

'disabled' : function() {

var disable = modVal == 'yes'; this.elem('input').attr('disabled', disable);

87

Tuesday, April 3, 12

Page 121: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

88

Tuesday, April 3, 12

Page 122: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {88

Tuesday, April 3, 12

Page 123: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {

'disabled' : function() {

...

this._href && (disable? this.domElem.removeAttr('href') : this.domElem.attr('href', this._href));

88

Tuesday, April 3, 12

Page 124: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {

'disabled' : function() {

...

this._href && (disable? this.domElem.removeAttr('href') : this.domElem.attr('href', this._href));

disable && this.domElem.keyup();

88

Tuesday, April 3, 12

Page 125: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

89

this.domElem

Tuesday, April 3, 12

Page 126: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

89

this.domElem

Tuesday, April 3, 12

Page 127: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', {

onSetMod : { ... },

isDisabled : function() {

return this.hasMod('disabled', 'yes');

}

})

90

Tuesday, April 3, 12

Page 128: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

pressed и hovered

Tuesday, April 3, 12

Page 129: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Наведенная и нажатая92

Tuesday, April 3, 12

Page 130: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

hovered и pressed93

Tuesday, April 3, 12

Page 131: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

hovered и pressed— С событиями

93

Tuesday, April 3, 12

Page 132: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

hovered и pressed— С событиями— Не для неактивной кнопки

93

Tuesday, April 3, 12

Page 133: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {

'pressed' : function() {

this.isDisabled() || this.trigger(modVal == 'yes'? 'press' : 'release');

94

Tuesday, April 3, 12

Page 134: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

/** * @protected * @param {String} e имя события * @param {Object} [data] дополнительные данные * @returns {BEM} */

trigger : function(e, data)

95

Tuesday, April 3, 12

Page 135: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

96

Tuesday, April 3, 12

Page 136: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {

'hovered' : {

'' : function() {

this.delMod('pressed');

}

97

Tuesday, April 3, 12

Page 137: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

/** * @protected * @param {Object} [elem] вложенный элемент * @param {String} modName имя модификатора * @returns {BEM} */

delMod : function(elem, modName)

98

Tuesday, April 3, 12

Page 138: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { onSetMod : {

'*' : function(modName) {

if(this.isDisabled() && 'hovered pressed'.indexOf(modName) > -1) return false;

}

99

Tuesday, April 3, 12

Page 139: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

live

Tuesday, April 3, 12

Page 140: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

live-события

Tuesday, April 3, 12

Page 141: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

bit.ly/6B9eyk

jQuery.live()102

Tuesday, April 3, 12

Page 142: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Event delegation103

Tuesday, April 3, 12

Page 143: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Event delegation103

Tuesday, April 3, 12

Page 144: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Event delegation103

Tuesday, April 3, 12

Page 145: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Event delegation103

handler

Tuesday, April 3, 12

Page 146: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Event delegation104

Tuesday, April 3, 12

Page 147: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Event delegation104

handler

Tuesday, April 3, 12

Page 148: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

105

Tuesday, April 3, 12

Page 149: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

105

Tuesday, April 3, 12

Page 150: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

106

Tuesday, April 3, 12

Page 151: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

106

Tuesday, April 3, 12

Page 152: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

live-инициализация

Tuesday, April 3, 12

Page 153: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { ... },

{ live: function() { /* методы инициализации */

}

}

108

Tuesday, April 3, 12

Page 154: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { ... },

{ live: function() { this .liveBindTo('leftclick', function(e) { this._onClick(e); }) }}

109

Tuesday, April 3, 12

Page 155: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

/** * @static * @protected * @param {String|Object} [to] описание * @param {String} event имя события * @param {Function} callback обработчик */

liveBindTo : function(to, event, callback, invokeOnInit)

110

Tuesday, April 3, 12

Page 156: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

BEM.DOM.decl('b-form-button', { ... },{ live: function() { this .liveBindTo( 'mouseover mouseout ... focusin ...', function(e) { var mod = eventsToMods[e.type]; this.setMod(mod.name, mod.val || ''); }

111

Tuesday, April 3, 12

Page 157: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

var eventsToMods = {

'mouseover' : { name : 'hovered', val : 'yes' }, 'mouseout' : { name : 'hovered' }, 'mousedown' : { name : 'pressed', val : 'yes' }, 'mouseup' : { name : 'pressed' }, 'focusin' : { name : 'focused', val : 'yes' }, 'focusout' : { name : 'focused' }

};

112

Tuesday, April 3, 12

Page 158: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

113

Tuesday, April 3, 12

Page 159: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

bit.ly/HfIAHc

Репозиторий с кнопкой на 114

Tuesday, April 3, 12

Page 160: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Реализация CSS3

Tuesday, April 3, 12

Page 161: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

116

Все меняется

Tuesday, April 3, 12

Page 162: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

116

Tuesday, April 3, 12

Page 163: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

116

Tuesday, April 3, 12

Page 164: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

116

Tuesday, April 3, 12

Page 165: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button/ _type/

Модификатор _type117

Tuesday, April 3, 12

Page 166: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button/ _type/

Модификатор _type117

b-form-button/ _type/ b-form-button_type_complex.css

Tuesday, April 3, 12

Page 167: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button/ _type/

Модификатор _type117

b-form-button/ _type/ b-form-button_type_complex.css

b-form-button/ _type/ b-form-button_type_complex.css b-form-button_type_normal.css

Tuesday, April 3, 12

Page 168: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

.b-form-button_type_complex.b-form-button_hovered_yes{ background-position: ...}

$block_type_complex.$block_hovered_yes .$block__left{ background-position: ...}...

b-form-button_type_complex.css118

Tuesday, April 3, 12

Page 169: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

.b-form-button{ position: relative;

display: inline-block;

outline: 0; cursor: default; ...

b-form-button.css119

Tuesday, April 3, 12

Page 170: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Меньше разметки120

Tuesday, April 3, 12

Page 171: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button b-form-button_type_normal”>

</span>

120

Tuesday, April 3, 12

Page 172: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button b-form-button_type_normal”>

</span>

<span class=”b-form-button b-form-button_type_normal”>

<span class=”b-form-button__text”> Кнопка на css3 </span>

</span>

120

Tuesday, April 3, 12

Page 173: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

<span class=”b-form-button b-form-button_type_normal”>

</span>

<span class=”b-form-button b-form-button_type_normal”>

<span class=”b-form-button__text”> Кнопка на css3 </span>

</span>

<span class=”b-form-button b-form-button_type_normal”>

<span class=”b-form-button__text”> Кнопка на css3 </span>

<input class=”b-form-button__input”/></span>

120

Tuesday, April 3, 12

Page 174: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button_type_normal.css121

Tuesday, April 3, 12

Page 175: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

.b-form-button_type_normal{ border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; ...}

.b-form-button_type_normal.b-form-button_disabled_yes{ opacity: 0.35;}

121

Tuesday, April 3, 12

Page 176: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button/ _theme/ b-form-button_theme_normal-grey.css ...

Тема для css3122

Tuesday, April 3, 12

Page 177: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

123

Tuesday, April 3, 12

Page 178: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

b-form-button_theme_normal-grey.css124

Tuesday, April 3, 12

Page 179: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

.b-form-button_theme_normal-grey{ color: #000;

border-color: rgba(192,192,192,0.5) rgba(192,192,192,0.3) rgba(49,49,49,0.45);

background: linear-gradient(top, rgba(255,255,255,0.9) 10%,rgba(216,216,216,0.66) 75%,rgba(193,193,193,0.66) 92%,rgba(168,168,168,0.66) 100%); background: -moz-linear-gradient(top, rgba(255,255,255,0.9) 10%, rgba(216,216,216,0.66) 75%, rgba(193,193,193,0.66) 92%, rgba(168,168,168,0.66) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(10%,rgba(255,255,255,0.9)), color-stop(75%,rgba(216,216,216,0.66)), color-stop(92%,rgba(193,193,193,0.66)), color-stop(100%,rgba(168,168,168,0.66))); background: -webkit-linear-gradient(top, rgba(255,255,255,0.9) 10%,rgba(216,216,216,0.66) 75%,rgba(193,193,193,0.66) 92%,rgba(168,168,168,0.66) 100%); background: -o-linear-gradient(top, rgba(255,255,255,0.9) 10%,rgba(216,216,216,0.66) 75%,rgba(193,193,193,0.66) 92%,rgba(168,168,168,0.66) 100%); background: -ms-linear-gradient(top, rgba(255,255,255,0.9) 10%,rgba(216,216,216,0.66) 75%,rgba(193,193,193,0.66) 92%,rgba(168,168,168,0.66) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e6ffffff', endColorstr='#a8d6d6d6',GradientType=0 ); /* IE6-9 */}

body .b-form-button_theme_normal-grey.b-form-button_hovered_yes{ border-top-style: solid;

background: linear-gradient(top, rgba(255,255,255,0.9) 10%,rgba(206,206,206,0.61) 59%,rgba(193,193,193,0.66) 87%,rgba(198,198,198,0.66) 88%,rgba(255,255,255,1) 100%); background: -moz-linear-gradient(top, rgba(255,255,255,0.9) 10%, rgba(206,206,206,0.61) 59%, rgba(193,193,193,0.66) 87%, rgba(198,198,198,0.66) 94%, rgba(255,255,255,1) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(10%,rgba(255,255,255,0.9)), color-stop(59%,rgba(206,206,206,0.61)), color-stop(87%,rgba(193,193,193,0.66)), color-stop(88%,rgba(198,198,198,0.66)), color-stop(100%,rgba(255,255,255,1))); background: -webkit-linear-gradient(top, rgba(255,255,255,0.9) 10%,rgba(206,206,206,0.61) 59%,rgba(193,193,193,0.66) 87%,rgba(198,198,198,0.66) 94%,rgba(255,255,255,1) 100%); background: -o-linear-gradient(top, rgba(255,255,255,0.9) 10%,rgba(206,206,206,0.61) 59%,rgba(193,193,193,0.66) 87%,rgba(198,198,198,0.66) 94%,rgba(255,255,255,1) 100%); background: -ms-linear-gradient(top, rgba(255,255,255,0.9) 10%,rgba(206,206,206,0.61) 59%,rgba(193,193,193,0.66) 87%,rgba(198,198,198,0.66) 94%,rgba(255,255,255,1) 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e6f7f7f7', endColorstr='#a8d4d4d4',GradientType=0 ); /* IE6-9 */}

.b-form-button_theme_normal-grey.b-form-button_focused_yes{ box-shadow: 0 0 0.1em #ffd438, 0 0 0.13em #ffd438, 0 0 0.2em #ffd438, 0 0 0.3em #ffd438; -moz-box-shadow: 0 0 0.1em #ffd438, 0 0 0.13em #ffd438; -webkit-box-shadow: 0 0 0.25em #ffd438, 0 0 0.25em #ffd438;}

...

124

Tuesday, April 3, 12

Page 180: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Что не так?

Tuesday, April 3, 12

Page 181: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Что не так?!126

Tuesday, April 3, 12

Page 182: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

126

Tuesday, April 3, 12

Page 183: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

— не пиксель в пиксель

126

Tuesday, April 3, 12

Page 184: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

— не пиксель в пиксель

— новая тема

126

Tuesday, April 3, 12

Page 185: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Новая тема127

Tuesday, April 3, 12

Page 186: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Что сделали128

Tuesday, April 3, 12

Page 187: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Что сделали— сверстали в картинках

128

Tuesday, April 3, 12

Page 188: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Что сделали— сверстали в картинках

— написали JavaScript

128

Tuesday, April 3, 12

Page 189: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Что сделали— сверстали в картинках

— написали JavaScript

— сверстали на CSS3

128

Tuesday, April 3, 12

Page 190: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Выводы

Tuesday, April 3, 12

Page 191: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

CSS3130

Tuesday, April 3, 12

Page 192: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

CSS3— масштабируемость

130

Tuesday, April 3, 12

Page 193: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

CSS3— масштабируемость

— меньше разметки

130

Tuesday, April 3, 12

Page 194: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

CSS3— масштабируемость

— меньше разметки

— минус запрос

130

Tuesday, April 3, 12

Page 195: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

PNG131

Tuesday, April 3, 12

Page 196: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

PNG— пиксель в пиксель

131

Tuesday, April 3, 12

Page 197: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

PNG— пиксель в пиксель

— создание тем

131

Tuesday, April 3, 12

Page 198: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

PNG— пиксель в пиксель

— создание тем

— рендеринг

131

Tuesday, April 3, 12

Page 199: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

132

Three years remainingTuesday, April 3, 12

Page 200: История одной кнопки или b-form-button.css и b-form-button.js (Елена Глухова, Варвара Степанова)

Варвара Степанова[email protected]

Елена Глухова[email protected]

Tuesday, April 3, 12