Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс...

57
Я.Субботник, Киев, 28 мая 2011 года разработчик интерфейсов Денис Бугарчев Внедрение идей БЭМ на не-Яндекс проект

Upload: yandex

Post on 16-Jun-2015

1.025 views

Category:

Technology


2 download

DESCRIPTION

28 мая 2011, Я.Субботник в Киеве Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект" О докладе: В докладе идет речь о внедрении используемой в Яндексе системы верстки на любой проект. Доводы «за» и рассказы о многочисленных плюсах перехода на БЭМ-верстку прилагаются. Как не потерять контроль над написанным кодом через полгода? Как организовать работу нескольких верстальщиков при сохранении единства кода? Действительно ли нужно каждый раз верстать похожие блоки заново? Если вы хоть раз задавались подобными вопросами, то есть хорошая новость. Судя по всему, вам очень поможет используемая в Яндексе система верстки абсолютно независимыми блоками. Именно о внедрении и практическом использовании этой системы на ваших сайтах и пойдет речь в этом докладе.

TRANSCRIPT

Page 1: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Я.Субботник, Киев, 28 мая 2011 года

разработчик интерфейсов Денис Бугарчев

Внедрение идей БЭМ на не-Яндекс проект

Page 2: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Разделяй и властвуй

2

Page 3: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Не «ЧТО такое БЭМ», а:

• Зачем он нужен именно вам?

• Как его внедрить?

• Какие плюсы он дает, чтобы уговорить руководителя

3

Page 4: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Who is Mr. БЭМ?

4

Page 5: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Блок Элемент Модификатор

<b-theory>

5

Page 6: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Блок

Вся страница состоит из блоков

6

Page 7: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Блок

Вся страница состоит из блоков

Блоки содержатся внутри друг друга

7

Page 8: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Блок

Вся страница состоит из блоков

Блоки содержатся внутри друг друга

Могут нести любой смысл: разметка, крупные блоки, мелкие однотипные элементы и т.д.

8

Page 9: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

<div class=“page”>

<div class=“header”>…</div>

<div class=“content”>

<div class=“r-column”>…</div>

<div class=“l-column”>…</div>

</div>

<div class=“footer”>…</div>

</div>

9

Page 10: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

<div class=“l-two-column”>

</div>

10

Page 11: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Элемент

Не существует отдельно от блока

11

Page 12: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Элемент

Не существует отдельно от блока

Может быть опциональным

12

Page 13: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Элемент

Не существует отдельно от блока

Может быть опциональным

Содержит собственно реализацию верстки

13

Page 14: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

<div class=“l-two-column”> <div class=“l-two-column__header”>…</div> <div class=“l-two-column__ content”> <div class=“l-two-column__ r-column”>…</div> <div class=“l-two-column__ l-column”>…</div> </div> <div class=“l-two-column__ footer”>…</div> </div>

14

Page 15: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Модификатор

Может быть и у блока, и у элемента

15

Page 16: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Модификатор

Может быть и у блока, и у элемента

Используется для изменения отображения или поведения

16

Page 17: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

<div class=“l-two-column l-two-column_ratio_32”> <div class=“l-two-column__header”>…</div> <div class=“l-two-column__ content”> <div class=“l-two-column__ r-column”>…</div> <div class=“l-two-column__ l-column”>…</div> </div> <div class=“l-two-column__ footer”>…</div> </div>

17

Page 18: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Полезные ссылки

https://github.com/bem

http://clubs.ya.ru/bem/

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

http://bit.ly/b-video

</b-theory> 18

Page 19: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Выбор блоков

Блоки должны быть достаточно крупными, чтобы с ними удобно было работать

19

Page 20: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Выбор блоков

Блоки должны быть достаточно крупными, чтобы с ними удобно было работать

Блоки должны быть достаточно мелкими, чтобы не дублировать код

20

Page 21: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Выбор блоков

Блоки должны быть достаточно крупными, чтобы с ними удобно было работать

Блоки должны быть достаточно мелкими, чтобы не дублировать код

От крупного к мелкому

21

Page 22: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Назад к жизненным проблемам

22

Page 23: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Проблема

Срочная задача на незнакомой странице: нужен Человек Обладающий Особыми Знаниями

23

Page 24: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Проблема

Вася на Мальдивах

24

Page 25: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

25

Page 26: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Проблема

Вася на Мальдивах

Код напоминает спагетти, и вызывает легкое презрение к его автору

26

Page 27: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Проблема

Вася на Мальдивах

Код напоминает спагетти и вызывает легкое презрение к его автору

ПАНИКА! ПАНИКА! Мы все умрем!!1

27

Page 28: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Если бы Вася любил БЭМ

Точно знали, где лежит нужный CSS просто заглянув в код страницы

28

Page 29: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Если бы Вася любил БЭМ

Точно знали, где лежит нужный CSS просто заглянув в код страницы

Знали, как внести изменения

29

Page 30: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Если бы Вася любил БЭМ

Точно знали, где лежит нужный CSS просто заглянув в код страницы

Знали, как внести изменения

Уверены, что изменения ничего не сломают

30

Page 31: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Подробнее по пунктам

31

Page 32: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Где?

blocks/

b-footer/

b-header/

b-image-preview/

b-pseudolink/

l-two-column/

32

Page 33: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Где?

blocks/

b-image-preview/

b-image-preview.css

b-image-preview.ie.css

b-image-preview.png

b-image-preview.html

b-footer/

33

Page 34: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Где?

blocks/

b-image-preview/

_size/

b-image-preview_size_small.css

34

Page 35: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Как?

Если это баг, исправить в общем файле

Если изменение, добавить модификатор

Отсутствие наследования гарантирует, что ничего не сломается

35

Page 36: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Что дальше?

Есть структура на диске, схема добавления новых блоков и изменений в существующие.

Надо собрать все разрозненные файлы в один CSS

36

Page 37: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Что дальше?

• Сборка CSS файлов

• Минимизация СSS

• Обфускация классов

37

Page 38: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Сборка CSS файлов

Все зависимости сделаны через @import

Заменяем @import на содержимое файла

38

Page 39: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Сборка CSS файлов

Все зависимости сделаны через @import

Заменяем @import на содержимое файла

Ключевой момент: выбор масштаба

от единого набора блоков на весь сайт

до отдельного набора на каждую страницу

39

Page 40: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Сборка CSS файлов

Все зависимости сделаны через @import

Заменяем @import на содержимое файла

Ключевой момент: выбор масштаба

от единого набора блоков на весь сайт

до отдельного набора на каждую страницу

Немного о создании ссылки на CSS: xslt и php

40

Page 41: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Минимизация СSS

Есть много готовых решений

YUI Compressor

CSSTidy

http://bit.ly/css-min

41

Page 42: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Обфускация классов

Методы сокращения веса HTML-кода:

• GZIP

• Замена имен классов

42

Page 43: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Полный цикл

Понятная структура в разработке

Автоматический процесс выкладки

Минимизированный код для пользователя

43

Page 44: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Нужно ли это вам?

«О, это хорошо для Яндекса, зачем

это моему сайту?»

44

Page 45: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Нужно ли это вам?

Порталам: выверенная и одинаковая верстка общих частей абсолютно разных проектов

45

Page 46: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Нужно ли это вам?

Крупным сайтам: прозрачный код, разделение работы между несколькими людьми, переиспользование кода

46

Page 47: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Нужно ли это вам?

Веб-студиям: готовая библиотека решений (уголки с тенями, элементы форм, псевдоссылки и т.д.)

47

Page 48: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Как это сделает вашу жизнь лучше?

48

Page 49: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Что это даст?

Разработчику

• Ясная структура кода

• Легкое внесение изменений (редизайн)

49

Page 50: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Что это даст?

Разработчику

• Ясная структура кода

• Легкое внесение изменений (редизайн)

• Переиспользование кода

50

Page 51: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Что это даст?

Разработчику

• Ясная структура кода

• Легкое внесение изменений (редизайн)

• Переиспользование кода

Как следствие, повышение скорости разработки. И кстати, качества.

51

Page 52: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Что это даст?

Руководителю

• Скорость разработки

52

Page 53: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Что это даст?

Руководителю

• Скорость разработки

• Меньше зависимость от тайных знаний

53

Page 54: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Что это даст?

Руководителю

• Скорость разработки

• Меньше зависимость от тайных знаний

• Легкое обучение новых людей

54

Page 55: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Что это даст?

Руководителю

• Скорость разработки

• Меньше зависимость от тайных знаний

• Легкое обучение новых людей

Как следствие, сроки соблюдаются, стрессов нет, волосы сухие и шелковистые.

55

Page 56: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

Вопросы?

56

Page 57: Денис Бугарчев "Внедрение идей БЭМ на не-Яндекс проект"

разработчик интерфейсов

[email protected]

Денис Бугарчев