30
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, Интерлабс 19 апреля 2013 1 / 30

Современная верстка с адекватными трудозатратами

  • View
    1.511

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Современная верстка с адекватными трудозатратами

Современная верстка садекватными трудозатратами

Максим Тимохин, технолог, Интерлабс

19 апреля 2013

1 / 30

Page 2: Современная верстка с адекватными трудозатратами

ПроблемаТребования к верстке постоянно растут, а вместе с ними исебестоимость проекта:

• адаптивность: был один дизайн, а стало N;• кроссбраузерный CSS3;• улучшенная типографика.

На что обратить внимание в технологическомпроцессе, чтобы сократить издержки?

2 / 30

Page 3: Современная верстка с адекватными трудозатратами

Главная беда дизайна

«Дизайн сайта — набор страниц»адаптивный дизайн только усугубляет проблему:

• на уровнe CMS: единая контентная область, WYSIWYG.• на уровнe дизайнера: главная и рабочая страницы и т.д.• на уровне клиента: сделайте точно так, как я хочу.

Дизайн сайта — система компонентовCMS — часто ограничивающий фактор

3 / 30

Page 4: Современная верстка с адекватными трудозатратами

Работа с дизайнерамиРеализация адаптивного дизайна будет проще, если:

• мыслить в контексте всего сайта, а не отдельной страницы;• мыслить элементами, образующими визуальный язык;• понимать технологические ограничения;• использовать сетки и вертикальный ритм;• минимизировать количество и варианты блоков;• понимать, что pixel-perfect дизайн невозможен.

Звучит банально, но менять стереотипы тяжело.

4 / 30

Page 5: Современная верстка с адекватными трудозатратами

Типографская сетка

5 / 30

Page 6: Современная верстка с адекватными трудозатратами

Типографская сеткаВ обычном дизайне полезна, в адаптивном — необходима:

• различные виды сеток (%, px) для адаптивных вариантов;• различная размерность сеток для адаптивных вариантов;• не больше двух-трех сеток на медиа-вариант;• сетки для всего сайта, а не для отдельных страниц;• несложно реализуется CSS-препроцессором.

Результат формализованное горизонтальноепозиционирование блоков в различныхадаптивных вариантах.

6 / 30

Page 7: Современная верстка с адекватными трудозатратами

Комбинирование сеток

7 / 30

Page 8: Современная верстка с адекватными трудозатратами

Сетка: % или px?

• пиксельные сетки технологичнее и проще;• фиксированные адаптивные вариантыменее затратны в реализации;

• процентные сетки универсальные, носложнее: размеры вложенных элементов,ошибки округления и и.д.

• процентные сетки необходимы нанебольших мобильных разрешениях.

8 / 30

Page 9: Современная верстка с адекватными трудозатратами

Вертикальный ритм

9 / 30

Page 10: Современная верстка с адекватными трудозатратами

Вертикальный ритмЕдиный шаг для вертикальных размеров элементов:

• вертикальные отступы;• вертикальный размер изображений и блоков;• элементы переменной высоты — в контейнер;• выбор шага определяет baseline для основного шрифта;• легко реализуется CSS-препроцессором.

Результат улучшение внешнего вида страницы,системность в выборе размеров, возможностьварьирования на этапе разработки.

10 / 30

Page 11: Современная верстка с адекватными трудозатратами

Дизайн: антипаттерныОсновные проблемы адаптивной верстки — на этапе дизайна:

• «над этим я не думал, разберемся при верстке»;• подгонка сетки к уже отрисованному дизайну;• единая сетка для всех блоков с массой исключений;• нарушение порядка блоков в различных вариантах;• расчет на ограниченный размер контента;• избыточный второстепенный контент в начале страницына мобильном устройстве;

• избыточное использование таблиц и сложныхинтерактивных элементов.

11 / 30

Page 12: Современная верстка с адекватными трудозатратами

Роль верстальщикаВерстальщик необходим, но в новых условиях долженэволюционировать:

• «страничная» CMS — неизбежная верстка контента;• верстка шаблонов страниц;

• верстка компонентов, в т.ч. типовых контентных блоков;• клиентский JavaScript;• минимальное участие в клиентском контенте за счетиспользования типовых контентных блоков.

Верстальщик→ Развитие CMS→ Frontend-developer12 / 30

Page 13: Современная верстка с адекватными трудозатратами

Прототипирование версткиMaster page – минимальный статический прототип для простыхсайтов:

• одна страница со всеми интерфейсными компонентами;• HTML с минимальной (php,node. . . )-шаблонизацией;

• можно использовать как style guide;• упрощает выявление конфликтов между компонентами;• упрощает тестирование на мобильных устройствах.• поощряет минимализм (хотя иногда уже поздно) ,

13 / 30

Page 14: Современная верстка с адекватными трудозатратами

Структура CSS-классов

• БЭМ1 — большие проекты, набор общих блоков;• у нас — небольшие проекты с сильно отличающимсядизайном, используем сильно упрощенный вариант.

Главное: независимость блоков друг от друга и ихструктурирование внутри проекта.

• префиксная система имен классов;• упрощенная концепция блок-элемент-модификатор.

1http://ru.bem.info/method/14 / 30

Page 15: Современная верстка с адекватными трудозатратами

Префиксная система имен

namespace-...-block-element-subelement-...--modificator

• модификатор всегда используется с основным классом• модификатор не разбивается на пару «свойство-значение»• разработчик может вводить промежуточные пространстваимен, отсутствие конфликтов между ними — на его совести;

Результат стандартизируем имена классов, исключаемконфликты между своими и чужими классами.

15 / 30

Page 16: Современная верстка с адекватными трудозатратами

Структура блоков версткиИспользуем наиболее подходящую семантическую основу,большая часть стилизации с помощью классов стандартнойструктуры.

<class="app-menu"><ul>

<li class="menu-item"><a href="#">...</a></li><li class="menu-item menu-item--sel"><a href="#">...</a></li>

</ul></div>

Результат семантическая верстка, стандартная структураблоков.

16 / 30

Page 17: Современная верстка с адекватными трудозатратами

Генерируемый кодГенерация кода необходима при разработке клиентской части:

• генерация CSS из более высокоуровневого кода;• минимизация количества и объема CSS-файлов;• структурирование и оптимизация JavaScript-кодасредствами AMD/RequireJS2 и т.д.

Результат снижение затрат на поддержку и развитиестарых проектов, повышение качества новых.

2http://requirejs.org17 / 30

Page 18: Современная верстка с адекватными трудозатратами

Простейшая генерация кодаК любому проекту можно добавить генерацию кода, есть многомодных инструментов, но проще всего — make:

www/css/%.css: src/less/%.lesslessc $< > >@

Для существующего проекта просто переносим CSS-файлы вsrc/less/ и получаем преимущества в виде переменных,макросов и т.д.

Результат сокращаем код, постепенно рефакторим CSS,если надо — приводим в чувство JavaScript ,

18 / 30

Page 19: Современная верстка с адекватными трудозатратами

Выбор CSS-препроцессора

• основные претенденты: SASS, LESS, Stylus;• SASS — логично, если решение на Ruby;• Compass – полезно, даже если не использовать SASS;• Любой CSS-файл – валидный исходник на LESS;• LESS распространеннее, Stylus функциональнее изкоробки;

Мы выбрали LESS, Stylus тоже хороший выбор.

19 / 30

Page 20: Современная верстка с адекватными трудозатратами

Особенности LESS

• полная синтаксическая совместимость с CSS;• вложенные пространства имен, удобноj для библиотек;• нет условий и циклов, но есть pattern matching и рекурсия;• динамическое формирование имен классов, хотя издокументации это неочевидно.

Главное не генерировать избыточный CSS, в клиентскомкоде максимально используем определениеклассов, а не макросов.

20 / 30

Page 21: Современная верстка с адекватными трудозатратами

LESS-фреймворк

• тривиальная часть — CSS3, шрифты и т.д.• инициализация верстки: reset или normalize, чаще второе;• медиа-варианты и версии для браузеров без Media Query;• генерация сеток, средства отладки;• базовые настройки отображения элементов форм;• всевозможные костыли для IE.

Результат типовые решения для всех проектов, упрощениеподдержки, снижение порога вхождения дляразработчиков.

21 / 30

Page 22: Современная верстка с адекватными трудозатратами

Файлы проекта

• правила CSS группируются в файлы произвольно;• фреймворк подключается одним @import;• каждому результирующему CSS-файлу соответствуеткорневой less-файл, подключающий фреймворк и другиеless-файлы;

• корневых файлов может быть несколько: под разныеразрешения, разные версии IE и т.д

Результат правила можно группировать покомпонентно,строить библиотеки компонент и т.д.

22 / 30

Page 23: Современная верстка с адекватными трудозатратами

Медиа-варианты@boot-media-variants: 9; // количество диапазонов;...@boot-media-3-name: tablet; // определение диапазона;@boot-media-3-min: no; // есть стандартные, но@boot-media-3-max: 767px; // можно переопределить@boot-media-3-ie: no; // если необходимо....#media { // стандартный namespace

.for(all) {// общие правила

}.for(tablet) {

// правила для планшета}

} // результат можно вывести в отдельные файлы или общий файл

Результат покомпонентное определение вариантов, генерациявариантов в оптимальном порядке и варианта без MQ.

23 / 30

Page 24: Современная верстка с адекватными трудозатратами

Элементы форм• в разных проектах выглядят совершенно по-разному;• при этом общие проблемы взаимного позиционирования,размеров и т.д;

• проблема использования готовых решений типа Bootstrap– геометрия и внешний вид неразделимы.

Решение: • базовыe классы – позиционирование;

• стандартные макросы – геометрия;

• оформление – свое в каждом проекте.

• оформление и размеры – модификаторы.

24 / 30

Page 25: Современная верстка с адекватными трудозатратами

Поддержка IE// В файлах компонент.#ie {

.for(7) { /* правила для IE7 */ }

.for(lt9) { /* правила для IE8 */ }}

// В результирующем файле#boot > .classes(ie, 7);

Также с осторожностью используем некоторые полифиллы, вчастности PIE3 (CSS3) и boxsizing4 (border-box).

3http://css3pie.com4http://github.com/Schepp/box-sizing-polyfill

25 / 30

Page 26: Современная верстка с адекватными трудозатратами

Сетки@grid-desktop-variant: fixed; // пиксельные и процентные@grid-desktop-class: g-d; // префикс CSS классов:@grid-desktop-size: 12; // g-d-r,g-d-s4, g-d-o2.@grid-desktop-column: 60px;@grid-desktop-gutter: 20px;

#media {.for(desktop) {

#boot > #grid > .classes(grid-desktop);}.for(wide) {

#boot > #grid > .classes(grid-wide);}

}

Результат автоматическая генерация классов сеток,реализация адаптивных сеток, возможностьбыстрой корректировки геометрии сеток.

26 / 30

Page 27: Современная верстка с адекватными трудозатратами

Инициализация блокаГлобально используем normalize, внутри отдельного блокавыполняем по необходимости reset для семантической базыблока:

.app-menu {#boot > .reset(ul, left); // локальный reset#boot > .rhythm(15px, margin, 1, 0); // baseline для 15px

// margin-top в 1 шаг.app-menu-item {

// padding в 1 шаг и корректировка для border#boot > .rhythm(padding,1,1,1px,1px);border: solid 1px #ccc;

}}

27 / 30

Page 28: Современная верстка с адекватными трудозатратами

Инициализация верстки

1 определяем основной размер шрифта и вертикальный шаг;2 переопределяем настройки типографики если нужно;3 определяем диапазоны медиа-вариантов;4 конфигурируем сетки в различных медиа-вариантах;5 верстаем нестилизованные блоки с классами блоков иячеек сетки;

6 проверяем раскладку в различных разрешениях,контролируем границы блоков;

7 дальше разбираемся со стилизацией каждого блока.

28 / 30

Page 29: Современная верстка с адекватными трудозатратами

ИтогоЧто необходимо сделать, чтобы технологический процесс быладекватен современным требованиям к верстке?

• работать с дизайнерами: компонентный подход,стандартные паттерны, технологические ограничения;

• стандартизировать структуру разметки и CSS-классов;• использовать адаптивные типографские сетки;• внедрить генерацию клиентского кода вообще иCSS-препроцессор в частности;

• реализовать набор типовых решений с помощьюCSS-препроцессора.

29 / 30

Page 30: Современная верстка с адекватными трудозатратами

http://www.interlabs.ru