Download - Denis Bugarchev

Transcript
Page 1: Denis Bugarchev

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

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

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

Page 2: Denis Bugarchev

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

2

Page 3: Denis Bugarchev

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

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

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

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

3

Page 4: Denis Bugarchev

Who is Mr. БЭМ?

4

Page 5: Denis Bugarchev

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

<b-theory>

5

Page 6: Denis Bugarchev

Блок

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

6

Page 7: Denis Bugarchev

Блок

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

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

7

Page 8: Denis Bugarchev

Блок

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

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

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

8

Page 9: Denis Bugarchev

<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: Denis Bugarchev

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

</div>

10

Page 11: Denis Bugarchev

Элемент

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

11

Page 12: Denis Bugarchev

Элемент

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

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

12

Page 13: Denis Bugarchev

Элемент

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

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

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

13

Page 14: Denis Bugarchev

<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: Denis Bugarchev

Модификатор

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

15

Page 16: Denis Bugarchev

Модификатор

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

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

16

Page 17: Denis Bugarchev

<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: Denis Bugarchev

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

https://github.com/bem

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

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

http://bit.ly/b-video

</b-theory> 18

Page 19: Denis Bugarchev

Выбор блоков

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

19

Page 20: Denis Bugarchev

Выбор блоков

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

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

20

Page 21: Denis Bugarchev

Выбор блоков

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

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

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

21

Page 22: Denis Bugarchev

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

22

Page 23: Denis Bugarchev

Проблема

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

23

Page 24: Denis Bugarchev

Проблема

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

24

Page 25: Denis Bugarchev

25

Page 26: Denis Bugarchev

Проблема

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

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

26

Page 27: Denis Bugarchev

Проблема

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

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

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

27

Page 28: Denis Bugarchev

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

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

28

Page 29: Denis Bugarchev

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

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

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

29

Page 30: Denis Bugarchev

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

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

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

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

30

Page 31: Denis Bugarchev

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

31

Page 32: Denis Bugarchev

Где?

blocks/

b-footer/

b-header/

b-image-preview/

b-pseudolink/

l-two-column/

32

Page 33: Denis Bugarchev

Где?

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: Denis Bugarchev

Где?

blocks/

b-image-preview/

_size/

b-image-preview_size_small.css

34

Page 35: Denis Bugarchev

Как?

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

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

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

35

Page 36: Denis Bugarchev

Что дальше?

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

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

36

Page 37: Denis Bugarchev

Что дальше?

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

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

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

37

Page 38: Denis Bugarchev

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

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

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

38

Page 39: Denis Bugarchev

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

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

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

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

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

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

39

Page 40: Denis Bugarchev

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

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

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

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

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

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

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

40

Page 41: Denis Bugarchev

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

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

YUI Compressor

CSSTidy

http://bit.ly/css-min

41

Page 42: Denis Bugarchev

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

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

• GZIP

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

42

Page 43: Denis Bugarchev

Полный цикл

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

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

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

43

Page 44: Denis Bugarchev

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

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

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

44

Page 45: Denis Bugarchev

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

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

45

Page 46: Denis Bugarchev

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

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

46

Page 47: Denis Bugarchev

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

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

47

Page 48: Denis Bugarchev

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

48

Page 49: Denis Bugarchev

Что это даст?

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

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

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

49

Page 50: Denis Bugarchev

Что это даст?

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

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

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

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

50

Page 51: Denis Bugarchev

Что это даст?

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

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

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

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

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

51

Page 52: Denis Bugarchev

Что это даст?

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

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

52

Page 53: Denis Bugarchev

Что это даст?

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

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

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

53

Page 54: Denis Bugarchev

Что это даст?

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

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

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

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

54

Page 55: Denis Bugarchev

Что это даст?

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

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

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

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

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

55

Page 56: Denis Bugarchev

Вопросы?

56

Page 57: Denis Bugarchev

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

[email protected]

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