SlideShare a Scribd company logo
Сайт с нуля на полном
стеке БЭМ-технологий
Жека Константинов, Дима Белицкий,
Слава Аристов
BEMup в Москве, 17 мая 2014
3
Презентацию можно открыть и у себя
3
bit.ly/bemup-msk-workshop
4
Жека Константинов
4
sipayrt@yandex-team.ru
@sipayrt
github.com/sipayrt
разработчик интерфейсов в
группе разработки БЭМ в
Яндексе
Дима Белицкий
5
dmtry@yandex-team.ru
@dabelitsky
github.com/dab
Разработчик интерфейсов в
Яндексе
6
Слава Аристов
6
einstain@yandex-team.ru
@aristov7
github.com/aristov
разработчик интерфейсов в
группе разработки БЭМ в
Яндексе
О чем поговорим?
7
Методология и написание CSS по БЭМ
О чем поговорим?
8
Методология и написание CSS по БЭМ
Шаблонизация и обмен данными
О чем поговорим?
9
Методолгия и написание CSS по БЭМ
Шаблонизация и обмен данными
JavaScript + BEM
О чем поговорим?
10
Методолгия и написание CSS по БЭМ
Шаблонизация и обмен данными
JavaScript + BEM
Все — на примере демо-проекта
Демо-проект
Да что это вообще такое?!
12
Агрегатор социальных сетей
По запросу будут выводиться последние новости
Будем использовать API твиттера, инстаграма, я.фоток
и я.блога
13
CSS + БЭМ
БЭМ — что это?
БЭМ — что это?
16
Блок — независимый интерфейсный компонент
БЭМ — что это?
17
Блок — независимый интерфейсный компонент
Элемент — составная часть блока, не имеющая смысла
вне контекста этого блока
БЭМ — что это?
18
Блок — независимый интерфейсный компонент
Элемент — составная часть блока, не имеющая
смысла вне контекста этого блока
Модификатор — это свойство блока или элемента ,
задающее изменения в их внешнем виде или
поведении
БЭМ — что это?
19
Методология БЭМ на bem.info bit.ly/1hMHNB2
Доклад Вовы Гриненко про методологию БЭМ и БЭМ-платформу
bit.ly/1hMCKk5
Реиспользование
кода
21
#menu li!
{!
font-size: 16px;!
}
Реиспользование кода
22
Реиспользование кода
<ul id="menu">!
!!!!<li>Поиск</li>!
!!!!<li>!
!!!!!!!!<a href="…">Карты</a>!
!!!!</li>!
</ul>
23
Реиспользование кода
<ul class="b-menu">!
!!!!<li class="item">Поиск</li>!
!!!!<li class="item">!
!!!!!!!!<a href="…" class="link">Карты</a>!
!!!!</li>!
</ul>
Каскады
25
.b-header .link!
{!
background: no-repeat url(b-logo.svg);!
}!
!
Каскады
26
Каскады
27
.b-header .link!
{!
background: no-repeat url(b-logo.svg);!
}!
!
.b-header .b-social .link!
{!
color: green;!
}!
Каскады
28
Каскады
29
/* Было */!
.b-header .link!
{!
background: url(…);!
}!
!
.b-header .b-social .link!
{!
color: #fff;!
}!
Каскады
30
/* Было */!
.b-header .link!
{!
background: url(…);!
}!
!
.b-header .b-social .link!
{!
color: #fff;!
}!
Каскады
/* Стало */!
.header__link!
{!
background: url(…);!
}!
!
.social__link!
{!
color: #fff;!
}
31
Проведем аналогию
32
<audio controls src="ne-bilo-razriva.wav"></audio>
Проведем аналогию
33
Проведем аналогию
34
Проведем аналогию
35
Проведем аналогию
36
Проведем аналогию
37
Модификаторы
38
.cat_theme_red!
{!
background: #dc9d42;!
}!
Модификаторы
39
.cat_theme_red!
{!
background: #dc9d42;!
}!
!
.cat_walking!
{!
animation-duration: 300s;!
}!
!
Модификаторы
40
.cat_theme_red!
{!
background: #dc9d42;!
}!
!
.cat_walking!
{!
animation-duration: 300s;!
}!
!
.cat__tail_direction_top!
{!
top: -200px;!
}!
Модификаторы
41
Модификаторы
Общепортальная
библиотека Лего
Общепортальная библиотека Лего
43
44
blocks/!
! ! button.css!
!button.js!
! ! input.css!
! ! input.js!
! ! input.html!
! ! logo.css!
! ! logo.js!
! ! logo.png
Файловая структура Лего
45
blocks/!
! header/!
! logo/!
! button/!
!! __icon/!
! ! ! ! ! button__icon.bemhtml!
! ! ! ! ! button__icon.css!
! ! ! ! ! button__icon.png!
_size/!
! ! button_size_s.css!
!! ! button_size_m.css!
!! button.css!
!! button.js
Файловая структура Лего
46
blocks/!
! header/!
! logo/!
! button/!
!! __icon/!
! ! ! ! ! button__icon.bemhtml!
! ! ! ! ! button__icon.css!
! ! ! ! ! button__icon.png!
_size/!
! ! button_size_s.css!
!! ! button_size_m.css!
!! button.css!
!! button.js
Файловая структура Лего
47
blocks/!
! header/!
! logo/!
! button/!
!! __icon/!
! ! ! ! ! button__icon.bemhtml!
! ! ! ! ! button__icon.css!
! ! ! ! ! button__icon.png!
_size/!
! ! button_size_s.css!
!! ! button_size_m.css!
!! button.css!
!! button.js
Файловая структура Лего
48
blocks/!
! header/!
! logo/!
! button/!
!! __icon/!
! ! ! ! ! button__icon.bemhtml!
! ! ! ! ! button__icon.css!
! ! ! ! ! button__icon.png!
_size/!
! ! button_size_s.css!
!! ! button_size_m.css!
!! button.css!
!! button.js
Файловая структура Лего
49
@import url(../../lego/button/button.css);!
@import url(../../lego/button/__icon/button__icon.css);!
@import url(../../lego/button/_size/button_size.css);!
!
Файловая структура Лего
50
@import url(../../lego/button/button.css);!
@import url(../../lego/button/_size/button_size.css);!
!
Файловая структура Лего
Файловая структура по БЭМ
51
Раздел на bem.info bit.ly/1eAsQBo
52
Уровни переопределения
53
Уровни переопределения
54
!
!
!
bem-components!
!!!!desktop.blocks/!
!!!!!!!!form/!
!!!!!!!!!!!!form.css
Уровни переопределения
55
!
!
bem-components/!
!!!!desktop.blocks/!
!!!!!!!!form/!
!!!!!!!!!!!!form.css!
sssr/!
!!!!desktop.blocks/!
!!!!!!!!form/!
!!!!!!!!!!!!form.css
Уровни переопределения
56
@import url(../../bem-components/desktop.blocks/form/form.css);!
@import url(../../desktop.blocks/form/form.css);!
!
Уровни переопределения
57
/* ../../bem-components/desktop.blocks/form/form.css begin */!
.form!
{!
background: #fff;!
}!
/* ../../bem-components/desktop.blocks/form/form.css end */!
!
/* ../../desktop.blocks/form/form.css begin */!
.form!
{!
background: иной;!
}!
/* ../../desktop.blocks/form/form.css end */!
Уровни переопределения
58
Платформы
59
/* common.blocks */!
.button!
{!
display: inline-block;!
}!
!
/* desktop.blocks */!
.button!
{!
background-color: green;!
}!
!
/* touch.blocks */!
.button!
{!
-webkit-touch-callout: none;!
}
Платформы
Вся история БЭМ
60
История БЭМ на bem.info bit.ly/1eAsQBo
Доклад Витали Харисова про историю БЭМ bit.ly/1m8ijzQ
Инструменты
62
@import url(../../common/block/global/_type/global_reset.css);!
@import url(../../common/block/l-head/l-head.css);!
@import url(../../common/block/header/__logo/header__logo.css);!
@import url(../../common/block/header/_type/header_type_yandex.css);!
@import url(../../common/block/header/__tabs/header__tabs.css);!
@import url(../../common/block/b-dropdown/b-dropdown.css);!
@import url(../../common/block/b-dropdown/__text/b-dropdown__text.css);!
@import url(../../common/block/b-link/b-link.css);!
@import url(../../common/block/dropdown/__arrow/dropdown__arrow.css);!
@import url(../../common/block/header/__search/header__search.css);!
@import url(../../common/block/b-search/b-search.css);!
@import url(../../common/block/b-search/__input/b-search__input.css);!
@import url(../../common/block/b-search/__sample/b-search__sample.css);!
@import url(../../common/block/b-search/__precise/b-search__precise.css);!
@import url(../../common/block/b-search/__button/b-search__button.css);!
@import url(../../common/block/header/__userinfo/header__userinfo.css);!
Инструменты
63
Инструменты
64
Инструменты
65
bem-tools/enb
borschik
CSSO + SVGO
BEMHTML
Инструменты
66
Инструменты на bem.info/tools
Доклад Вовы Гриненко про инструменты фронтендера
bit.ly/1qL91tg
Инструменты
Let’s code
CSS
BEMHTML + BEMTREE
Немного истории
Декларативная
шаблонизация
71
Декларативность и CSS
71
Декларативность и CSS
условие {тело шаблона}
71
Декларативность и CSS
условие {тело шаблона}
.menu__item { display: inline-block; }
XSLT
Преимущества XSLT
73
Преимущества XSLT
73
декларативная шаблонизация
Преимущества XSLT
73
декларативная шаблонизация
меньше копи-паста
Преимущества XSLT
73
декларативная шаблонизация
меньше копи-паста
легче командная работа
Подробнее про XSLT
74
bit.ly/vegedxslt
Проблемы XSLT
75
Проблемы XSLT
75
медленный
Проблемы XSLT
75
медленный
нет развития
Проблемы XSLT
75
медленный
нет развития
мало специалистов
Проблемы XSLT
75
медленный
нет развития
мало специалистов
не знает про БЭМ
BEMHTML
76
BEMHTML
76
работает на JavaScript
BEMHTML
76
работает на JavaScript
знает о предметной области BEM
BEMHTML
76
работает на JavaScript
знает о предметной области BEM
быстрый
JavaScript и BEMHTML
77
JavaScript и BEMHTML
77
специализированный язык (DSL), расширяющий
JavaScript
JavaScript и BEMHTML
77
специализированный язык (DSL), расширяющий
JavaScript
можно использовать любые JavaScript конструкции
JavaScript и BEMHTML
77
специализированный язык (DSL), расширяющий
JavaScript
можно использовать любые JavaScript конструкции
компилируется в оптимизированный JavaScript
JavaScript и BEMHTML
77
специализированный язык (DSL), расширяющий
JavaScript
можно использовать любые JavaScript конструкции
компилируется в оптимизированный JavaScript
исполняется на клиенте и сервере
BEMHTML Руководство
78
BEMHTML Руководство
78
bit.ly/bemhtmlref
79
Декларативность
79
Декларативность
условие {тело шаблона}
79
Декларативность
условие {тело шаблона}
.menu__item { display: inline-block; }
79
Декларативность
условие {тело шаблона}
.menu__item { display: inline-block; }
block('menu').elem('item')(

tag()('li')

)
БЭМ-дерево → HTML
80
BEMJSON → BEMHTML → HTML
81
BEMJSON
82
входные данные
BEMHTML
83
декларативный шаблон
HTML
84
результат
85
Параллели
DOM-дерево
!
инлайн стили
style = “display: inline-block;
background-color: silver;”
!
!
!
классы
БЭМ-дерево
!
теги в BEMJSON
{
block: 'menu'
elem: 'item',
tag: ‘li'
}
BEMHTML шаблоны
Шаблон BEMHTML.
86
Шаблон BEMHTML.
86
Мода — шаг генерации фрагмента HTML элемента 

(тега, атрибута, класса и т.п.)
Шаблон BEMHTML.
86
Мода — шаг генерации фрагмента HTML элемента 

(тега, атрибута, класса и т.п.)
Предикат — набор условий
Шаблон BEMHTML.
86
Мода — шаг генерации фрагмента HTML элемента 

(тега, атрибута, класса и т.п.)
Предикат — набор условий
Подпредикаты — единичные (элементарные)
условия
Шаблон BEMHTML.
86
Мода — шаг генерации фрагмента HTML элемента 

(тега, атрибута, класса и т.п.)
Предикат — набор условий
Подпредикаты — единичные (элементарные)
условия
this.ctx — доступная структура данных
Шаблон BEMHTML. Моды
87
Шаблон BEMHTML. Моды
88
Шаблон BEMHTML. Моды
88
default — набор и порядок прохождения остальных мод
Шаблон BEMHTML. Моды
88
default — набор и порядок прохождения остальных мод
tag — генерация HTML тэга
Шаблон BEMHTML. Моды
88
default — набор и порядок прохождения остальных мод
tag — генерация HTML тэга
js — наличие js и параметры
Шаблон BEMHTML. Моды
88
default — набор и порядок прохождения остальных мод
tag — генерация HTML тэга
js — наличие js и параметры
bem — генерация классов БЭМ-сущности
Шаблон BEMHTML. Моды
88
default — набор и порядок прохождения остальных мод
tag — генерация HTML тэга
js — наличие js и параметры
bem — генерация классов БЭМ-сущности
cls — кастомные классы
Шаблон BEMHTML. Моды
88
default — набор и порядок прохождения остальных мод
tag — генерация HTML тэга
js — наличие js и параметры
bem — генерация классов БЭМ-сущности
cls — кастомные классы
mix — несколько БЭМ-блоков на одной DOM-ноде
Шаблон BEMHTML. Моды
88
default — набор и порядок прохождения остальных мод
tag — генерация HTML тэга
js — наличие js и параметры
bem — генерация классов БЭМ-сущности
cls — кастомные классы
mix — несколько БЭМ-блоков на одной DOM-ноде
jsAttrs — имя HTML-атрибута для параметров клиентского js
Шаблон BEMHTML. Моды
88
default — набор и порядок прохождения остальных мод
tag — генерация HTML тэга
js — наличие js и параметры
bem — генерация классов БЭМ-сущности
cls — кастомные классы
mix — несколько БЭМ-блоков на одной DOM-ноде
jsAttrs — имя HTML-атрибута для параметров клиентского js
attrs — позволяет задать имена и значения произвольных HTML-атрибутов
Шаблон BEMHTML. Моды
88
default — набор и порядок прохождения остальных мод
tag — генерация HTML тэга
js — наличие js и параметры
bem — генерация классов БЭМ-сущности
cls — кастомные классы
mix — несколько БЭМ-блоков на одной DOM-ноде
jsAttrs — имя HTML-атрибута для параметров клиентского js
attrs — позволяет задать имена и значения произвольных HTML-атрибутов
content — содержимое HTML-элемента
Шаблон BEMHTML
89
Шаблон BEMHTML
89
match(подпредикат1, подпредикат2,
подпредикат3)(тело);
Шаблон BEMHTML
89
match(подпредикат1, подпредикат2,
подпредикат3)(тело);
match(подпредикат 1).match(подпредикат 2)
(тело1)

match(подпредикат 1).match(подпредикат 3)
(тело2)
Шаблон BEMHTML
89
match(подпредикат1, подпредикат2,
подпредикат3)(тело);
match(подпредикат 1).match(подпредикат 2)
(тело1)

match(подпредикат 1).match(подпредикат 3)
(тело2)
match(подпредикат1)(

match(подпредикат2)(тело1),

match(подпредикат3)(тело2)

)
Шаблон BEMHTML
90
Шаблон BEMHTML
90
match(подпредикат1, подпредикат2)(тело)
Шаблон BEMHTML
90
match(подпредикат1, подпредикат2)(тело)
match(this.block === 'link', 

this._mode === 'tag', 

this.ctx.url

)('a');
Шаблон BEMHTML
90
match(подпредикат1, подпредикат2)(тело)
match(this.block === 'link', 

this._mode === 'tag', 

this.ctx.url

)('a');
match(this.block === 'link')

.match(this._mode === 'tag')

.match(this.ctx.url)('a');
Представление БЭМ-сущностей
91
Представление БЭМ-сущностей
91
{ block: 'b-menu' }
Представление БЭМ-сущностей
91
{ block: 'b-menu' }
{ elem: 'item' }
Представление БЭМ-сущностей
91
{ block: 'b-menu' }
{ elem: 'item' }
{ 

block: 'b-link', 

mods: { pseudo: 'yes', color: 'green' }

}
Представление БЭМ-сущностей
91
{ block: 'b-menu' }
{ elem: 'item' }
{ 

block: 'b-link', 

mods: { pseudo: 'yes', color: 'green' }

}
{

elem: 'item',

elemMods: { selected: 'yes' }

}
Представление БЭМ-сущностей
91
{ block: 'b-menu' }
{ elem: 'item' }
{ 

block: 'b-link', 

mods: { pseudo: 'yes', color: 'green' }

}
{

elem: 'item',

elemMods: { selected: 'yes' }

}
{ 

block: 'b-link', 

mix: [ { block: 'b-serp-item', elem: 'link' } ]

}
Представление HTML
92
Представление HTML
92
{ block: 'my-block', tag: 'img' }
Представление HTML
92
{ block: 'my-block', tag: 'img' }
{ block: 'my-block', tag: 'img', attrs: { src:
‘…', alt: '' }}
Представление HTML
92
{ block: 'my-block', tag: 'img' }
{ block: 'my-block', tag: 'img', attrs: { src:
‘…', alt: '' }}
{ block: 'my-block', cls: 'additional-class' }
Представление HTML
92
{ block: 'my-block', tag: 'img' }
{ block: 'my-block', tag: 'img', attrs: { src:
‘…', alt: '' }}
{ block: 'my-block', cls: 'additional-class' }
{ block: ‘page', tag: ‘html', bem: false }
Представление HTML
92
{ block: 'my-block', tag: 'img' }
{ block: 'my-block', tag: 'img', attrs: { src:
‘…', alt: '' }}
{ block: 'my-block', cls: 'additional-class' }
{ block: ‘page', tag: ‘html', bem: false }
{ block: ‘my-block', js: true }
Порядок выполнения шаблонов
93
Базовые шаблоны
Порядок выполнения шаблонов
93
предикат { тело шаблона }
Базовые шаблоны
Порядок выполнения шаблонов
93
предикат { тело шаблона }
предикат { тело шаблона }
Базовые шаблоны
Порядок выполнения шаблонов
93
предикат { тело шаблона }
предикат { тело шаблона }
предикат { тело шаблона }
Базовые шаблоны
BEMHTML Руководство
94
BEMHTML Руководство
94
Это и многое другое на нашем сайте bit.ly/bemhtmlref
Let’s code
BEMHTML
Архитектура приложения
96
Посмотрим 

код сервера
Двухпроходная
шаблонизация
data → BEM-дерево → HTML
99
data → BEMJSON
100
Как это делали раньше
101
data → priv.js → BEMJSON
priv.js
102
чистый JavaScript
priv.js — чего хочется?
103
priv.js — чего хочется?
103
уровни переопределения
priv.js — чего хочется?
103
уровни переопределения
предметная область БЭМ
priv.js — чего хочется?
103
уровни переопределения
предметная область БЭМ
единый синтаксис с BEMHTML
BEMTREE
104
BEMTREE
104
декларативность
BEMTREE
104
декларативность
уровни переопределения
BEMTREE
104
декларативность
уровни переопределения
знает о предметной области БЭМ
BEMTREE
104
декларативность
уровни переопределения
знает о предметной области БЭМ
единый синтаксис c BEMHTML
Двухпроходная шаблонизация
105
Отличия BEMHTML и BEMTREE
106
Отличия BEMHTML и BEMTREE
106
количество доступных стандартных мод
Отличия BEMHTML и BEMTREE
106
количество доступных стандартных мод
BEMTREE — default, content
Отличия BEMHTML и BEMTREE
106
количество доступных стандартных мод
BEMTREE — default, content
несколько полей контекста, специфичных для каждого
BEMTREE
107
БЭМ-дерево
Let’s code
BEMTREE
JavaScript + БЭМ
Библиотеки
110
Библиотеки
bem-core
github.com/bem/bem-core
!
bem-components
111
Модульная система
ym
github.com/ymaps/modules
112
Модульная система
BEM
BEMHTML
$ (jQuery)
113
Модульная система
BEM
BEMHTML
$ (jQuery)
$.inherit
$.observable
114
Модульная система
BEM
BEMHTML
$ (jQuery)
$.inherit
$.observable
115
modules
116
Модульная система
117
modules.define('i-bem', ['inherit'],
function(provide, inherit) {
var BEM = inherit(/* … */)
provide(BEM)
})
Модульная система
118
modules.require(['i-bem', 'jquery'],
function(BEM, $) {
/* код, использующий модули i-bem и jquery
*/
})
Модульная система
i-bem.js
Что такое i-bem.js?
120
Что такое i-bem.js
121
Блок, помогающий делать другие блоки
Что такое i-bem.js
122
Блок, помогающий делать другие блоки
Реализация блока i-bem в технологии
JavaScript
Что такое i-bem.js
123
Блок, помогающий делать другие блоки
Реализация блока i-bem в технологии
JavaScript
jQuery для нормализации API браузера
Что дает i-bem.js?
124
Что дает i-bem.js
125
Работа с предметной областью БЭМ
Что дает i-bem.js
126
Работа с предметной областью БЭМ
Декларативный подход
Что дает i-bem.js
127
Работа с предметной областью БЭМ
Декларативный подход
Возможность доопределения
блоков
128
Где находится i-bem.js?
Где находится i-bem.js
bem-core/!
! common.blocks/!
! ! i-bem/!
! ! ! i-bem.vanilla.js!
! ! ! __dom/!
! ! ! ! i-bem__dom.js
129
Где находится i-bem.js
130
bem-core/!
! common.blocks/!
! ! i-bem/!
! ! ! i-bem.vanilla.js!
! ! ! __dom/!
! ! ! ! i-bem__dom.js
Где находится i-bem.js
131
bem-core/!
! common.blocks/!
! ! i-bem/!
! ! ! i-bem.vanilla.js!
! ! ! __dom/!
! ! ! ! i-bem__dom.js
Блоки с JS-
представлением
133
{!
! ! ! ! block: 'form'!
}
Блоки с js-представлением
134
{!
! ! ! ! block: 'form',!
! ! ! ! js: true!
}
Блоки с js-представлением
135
{!
! ! ! ! block: 'form',!
! ! ! ! js: { p1: 'v1', p2: 'v2', … }!
}
Блоки с js-представлением
136
<div class="form i-bem" !
! ! ! ! data-bem="{ form: {} }"></div>
Блоки с js-представлением
137
<div class="form i-bem" !
! ! ! ! data-bem="{ form: {} }"></div>
Блоки с js-представлением
138
<div class="form i-bem" !
! ! ! ! data-bem="{ form: {} }"></div>
Блоки с js-представлением
139
<div class="form i-bem" !
! ! ! ! data-bem="{ !
! ! ! ! ! ! ! form: {!
! ! ! ! ! ! ! ! ! ! p1: 'v1',!
! ! ! ! ! ! ! ! ! ! p2: 'v2',!
! ! ! ! ! ! ! ! ! ! …!
! ! ! ! ! ! ! } !
! ! ! ! ! }"></div>
Блоки с js-представлением
Декларация БЭМ-
сущностей
141
BEMDOM.decl('form', {!
/* методы экземпляра блока */
}, {!
/* методы класса */
});
Декларация блока
142
BEMDOM.decl({!
block: 'form', !
modName: 'type',!
modVal: 'dialog'!
}, {!
/* методы экземпляра блока */
}, {!
/* методы класса */
});
Декларация модификатора
143
BEMDOM.decl({!
block: 'form', !
elem: 'control'!
}, {!
/* методы экземпляра блока */
}, {!
/* методы класса */
});
Декларация элемента
144
BEMDOM.decl({!
block: 'form', !
elem: 'control',!
modName: 'type', !
modVal: 'input'!
}, {!
/* методы экземпляра блока */
}, {!
/* методы класса */
});
Декларация модификатора
145
BEMDOM.decl('form', {!
onSetMod: {!
! ! ! ! disabled: function(modName, modVal) {!
!
/* как реагировать на установку
модификатора */
!
! ! ! ! }!
! ! }!
});
Реакция на установку
146
BEMDOM.decl({!
block: 'dialog', !
baseBlock: 'form'!
}, {!
/* методы экземпляра блока */
}, {!
/* методы класса */
});
Наследование
147
148
BEMDOM.decl('form', {
myMethod: function() {
// экземпляр
this
// ссылка на класс
this.__self
// статический метод класса
this.__self.myStaticMethod()
// super-call
this.__base()
}
});
149
BEMDOM.decl('form', { /* … */ }, {
myStaticMethod: function() {
// класс
this
// super-call
this.__base()
}
});
Набор хелперов
Набор хелперов
151
Поиск элементов и других блоков
Набор хелперов
152
Поиск элементов и других блоков
Работа с модификаторами
Набор хелперов
153
Поиск элементов и других блоков
Работа с модификаторами
Работа с событиями
Набор хелперов
154
Поиск элементов и других блоков
Работа с модификаторами
Работа с событиями
Перестроение DOM-дерева
155
// селекторы блоков
this.findBlockInside('button')
this.findBlockOutside('page')
this.findBlockOn('dialog')
156
// селекторы блоков
this.findBlockInside('button')
this.findBlockOutside('page')
this.findBlockOn('dialog')
!
// селекторы элементов
this.findElem('control')
this.elem('control')
157
// селекторы блоков
this.findBlockInside('button')
this.findBlockOutside('page')
this.findBlockOn('dialog')
!
// селекторы элементов
this.findElem('control')
this.elem('control')
!
// работа с модификаторами
this.setMod('status', 'loading')
this.hasMod('status', 'loading')
this.getMod('status')
this.delMod('status')
Работа с событиями
158
DOM-события
Работа с событиями
159
DOM-события
BEM-события
Работа с событиями
160
DOM-события
BEM-события
Каналы
Работа с событиями
161
DOM-события
BEM-события
Каналы
162
// DOM-события
this.bindTo('submit', function() { /*…
*/ })
this.unbindFrom('submit')
Работа с событиями
163
// DOM-события
this.bindTo('submit', function() { /*…*/ })
this.unbindFrom('submit')
!
// BEM-события
this.on('update', function() { /*…*/ })
this.un('update', function() { /*…*/ })
this.emit('update')
Работа с событиями
Инициализация
165
<div class="form i-bem" !
! ! ! ! data-bem="{ 'form': {} }"></div>
Инициализация
166
<div class="form i-bem form_js_inited" !
! ! ! ! data-bem="{ 'form': {} }"></div>
Инициализация
167
<div class="form i-bem form_js_inited" !
! ! ! ! data-bem="{ 'form': {} }"></div>
Инициализация
168
BEMDOM.decl('form', {!
onSetMod: {!
! ! ! ! js: {!
! ! inited: function() {!
/* конструктор блока */
}!
! ! ! !}!
! ! }!
});
Инициализация
И много чего ещё!
169
И много чего ещё!
170
Блоки без DOM-представления
И много чего ещё!
171
Блоки без DOM-представления
Отложенная инициализация
И много чего ещё!
172
Блоки без DOM-представления
Отложенная инициализация
Делегирование событий
И много чего ещё!
173
Блоки без DOM-представления
Отложенная инициализация
Делегирование событий
Инстансы элементов
Let’s code!
JavaScript
175
Итого
176
собрали агрегатор ^_^ про БЭМ из социальных
сетей
заиспользовали полный БЭМ-стек, а именно
project-stub с bem-core и bem-components на сборке
bem-tools
внутри работают технологии i-bem.js, BEMHTML,
BEMTREE
177
info@bem.info
@bem_ru @bem_en #b_
clubs.ya.ru/bem
БЭМ!
Блок__Элемент_Модификатор
groups/
bem
Нам очень важно ваше мнение
178
Оставьте свой отзыв — bit.ly/msk-bemup-feedback
179
Жека Константинов
Дима Белицкий
Слава Аристов
sipayrt@yandex-team.ru
dmtry@yandex-team.ru
einstain@yandex-team.ru clubs.ya.ru/bem
twitter.com/bem_ru
facebook.com/groups/bem.info
bem.info

More Related Content

What's hot

Презентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начатьПрезентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начать
Dmitriy Polisadov
 
WepPerfomance,
WepPerfomance, WepPerfomance,
WepPerfomance,
Dmitriy Polisadov
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
Roman Dvornov
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
Roman Dvornov
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
IT-Portfolio
 
Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...
Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...
Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...
Yandex
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их много
Roman Dvornov
 
bem-components — от методологии до full stack платформы
bem-components — от методологии до full stack платформыbem-components — от методологии до full stack платформы
bem-components — от методологии до full stack платформы
Yandex
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
Roman Dvornov
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
Roman Dvornov
 
Opensource на .NET
Opensource на .NETOpensource на .NET
Opensource на .NET
lugnsk
 
Блоки как элементы макета сайта
Блоки как элементы макета сайтаБлоки как элементы макета сайта
Блоки как элементы макета сайта
Sergei Dubrov
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Dev2Dev
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковAlex Tumanoff
 
Презентация на тему "WEB-программирование"
Презентация на тему "WEB-программирование"Презентация на тему "WEB-программирование"
Презентация на тему "WEB-программирование"
Gotti Vartanyan
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Roman Dvornov
 
История развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеИстория развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другие
lugnsk
 
Вебинар по БЭМ: верстаем веб-страницу
Вебинар по БЭМ: верстаем веб-страницуВебинар по БЭМ: верстаем веб-страницу
Вебинар по БЭМ: верстаем веб-страницу
Yandex
 
Сайт с нуля на полном стеке БЭМ-технологий
Сайт с нуля на полном стеке БЭМ-технологийСайт с нуля на полном стеке БЭМ-технологий
Сайт с нуля на полном стеке БЭМ-технологий
Yandex
 

What's hot (20)

Презентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начатьПрезентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начать
 
WepPerfomance,
WepPerfomance, WepPerfomance,
WepPerfomance,
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...
Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...
Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их много
 
bem-components — от методологии до full stack платформы
bem-components — от методологии до full stack платформыbem-components — от методологии до full stack платформы
bem-components — от методологии до full stack платформы
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Opensource на .NET
Opensource на .NETOpensource на .NET
Opensource на .NET
 
Блоки как элементы макета сайта
Блоки как элементы макета сайтаБлоки как элементы макета сайта
Блоки как элементы макета сайта
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 
Презентация на тему "WEB-программирование"
Презентация на тему "WEB-программирование"Презентация на тему "WEB-программирование"
Презентация на тему "WEB-программирование"
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер
 
История развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеИстория развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другие
 
Вебинар по БЭМ: верстаем веб-страницу
Вебинар по БЭМ: верстаем веб-страницуВебинар по БЭМ: верстаем веб-страницу
Вебинар по БЭМ: верстаем веб-страницу
 
Сайт с нуля на полном стеке БЭМ-технологий
Сайт с нуля на полном стеке БЭМ-технологийСайт с нуля на полном стеке БЭМ-технологий
Сайт с нуля на полном стеке БЭМ-технологий
 

Similar to Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека Константинов, Дима Белицкий, Слава Аристов

БЭМ в дикой природе
БЭМ в дикой природеБЭМ в дикой природе
БЭМ в дикой природе
Ihor Zenich
 
Библиотека bem-components
Библиотека bem-componentsБиблиотека bem-components
Библиотека bem-components
Yandex
 
Документирование блоков. Раскрываем все плюсы — Инна Белая, Яндекс
Документирование блоков. Раскрываем все плюсы — Инна Белая, ЯндексДокументирование блоков. Раскрываем все плюсы — Инна Белая, Яндекс
Документирование блоков. Раскрываем все плюсы — Инна Белая, Яндекс
Yandex
 
Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"
Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"
Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"
Yandex
 
Denis Bugarchev
Denis BugarchevDenis Bugarchev
Denis Bugarchev
yaevents
 
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 frontend
Alex Yaroshevich
 
JSCS: Разработка архитектуры OpenSource-проектов
JSCS: Разработка архитектуры OpenSource-проектовJSCS: Разработка архитектуры OpenSource-проектов
JSCS: Разработка архитектуры OpenSource-проектов
Marat Dulin
 
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Yandex
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Yandex
 
Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"
Yandex
 
News and plan of BEM community
News and plan of BEM communityNews and plan of BEM community
News and plan of BEM community
Yelena Jetpyspayeva
 
Елена Джетпыспаева — Открытие. Новости и планы БЭМ-сообщества
Елена Джетпыспаева — Открытие. Новости и планы БЭМ-сообществаЕлена Джетпыспаева — Открытие. Новости и планы БЭМ-сообщества
Елена Джетпыспаева — Открытие. Новости и планы БЭМ-сообщества
Yandex
 
Прототипирование с БЭМ — Антон Виноградов, Альфа-Лаб
Прототипирование с БЭМ — Антон Виноградов, Альфа-ЛабПрототипирование с БЭМ — Антон Виноградов, Альфа-Лаб
Прототипирование с БЭМ — Антон Виноградов, Альфа-Лаб
Yandex
 
Павел Шут — БЭМ в lean startup'e
Павел Шут — БЭМ в lean startup'eПавел Шут — БЭМ в lean startup'e
Павел Шут — БЭМ в lean startup'e
Yandex
 
Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)
Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)
Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)Ontico
 
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
Badoo Development
 
WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...
WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...
WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...
GeeksLab Odessa
 
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчикаДмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
Yandex
 
Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2
Vasiliy Vanchuck
 

Similar to Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека Константинов, Дима Белицкий, Слава Аристов (20)

БЭМ в дикой природе
БЭМ в дикой природеБЭМ в дикой природе
БЭМ в дикой природе
 
Библиотека bem-components
Библиотека bem-componentsБиблиотека bem-components
Библиотека bem-components
 
Документирование блоков. Раскрываем все плюсы — Инна Белая, Яндекс
Документирование блоков. Раскрываем все плюсы — Инна Белая, ЯндексДокументирование блоков. Раскрываем все плюсы — Инна Белая, Яндекс
Документирование блоков. Раскрываем все плюсы — Инна Белая, Яндекс
 
Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"
Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"
Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"
 
Denis Bugarchev
Denis BugarchevDenis Bugarchev
Denis Bugarchev
 
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
 
JSCS: Разработка архитектуры OpenSource-проектов
JSCS: Разработка архитектуры OpenSource-проектовJSCS: Разработка архитектуры OpenSource-проектов
JSCS: Разработка архитектуры OpenSource-проектов
 
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
 
Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"
 
News and plan of BEM community
News and plan of BEM communityNews and plan of BEM community
News and plan of BEM community
 
Елена Джетпыспаева — Открытие. Новости и планы БЭМ-сообщества
Елена Джетпыспаева — Открытие. Новости и планы БЭМ-сообществаЕлена Джетпыспаева — Открытие. Новости и планы БЭМ-сообщества
Елена Джетпыспаева — Открытие. Новости и планы БЭМ-сообщества
 
Прототипирование с БЭМ — Антон Виноградов, Альфа-Лаб
Прототипирование с БЭМ — Антон Виноградов, Альфа-ЛабПрототипирование с БЭМ — Антон Виноградов, Альфа-Лаб
Прототипирование с БЭМ — Антон Виноградов, Альфа-Лаб
 
Павел Шут — БЭМ в lean startup'e
Павел Шут — БЭМ в lean startup'eПавел Шут — БЭМ в lean startup'e
Павел Шут — БЭМ в lean startup'e
 
Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)
Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)
Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)
 
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
 
WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...
WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...
WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...
 
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчикаДмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
 
Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
Yandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Yandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Yandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Yandex
 

More from Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека Константинов, Дима Белицкий, Слава Аристов