SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Современная верстка с
адекватными трудозатратами
Максим Тимохин, технолог, Интерлабс
19 апреля 2013
1 / 30
Проблема
Требования к верстке постоянно растут, а вместе с ними и
себестоимость проекта:
• адаптивность: был один дизайн, а стало N;
• кроссбраузерный CSS3;
• улучшенная типографика.
На что обратить внимание в технологическом
процессе, чтобы сократить издержки?
2 / 30
Главная беда дизайна
«Дизайн сайта — набор страниц»
адаптивный дизайн только усугубляет проблему:
• на уровнe CMS: единая контентная область, WYSIWYG.
• на уровнe дизайнера: главная и рабочая страницы и т.д.
• на уровне клиента: сделайте точно так, как я хочу.
Дизайн сайта — система компонентов
CMS — часто ограничивающий фактор
3 / 30
Работа с дизайнерами
Реализация адаптивного дизайна будет проще, если:
• мыслить в контексте всего сайта, а не отдельной страницы;
• мыслить элементами, образующими визуальный язык;
• понимать технологические ограничения;
• использовать сетки и вертикальный ритм;
• минимизировать количество и варианты блоков;
• понимать, что pixel-perfect дизайн невозможен.
Звучит банально, но менять стереотипы тяжело.
4 / 30
Типографская сетка
5 / 30
Типографская сетка
В обычном дизайне полезна, в адаптивном — необходима:
• различные виды сеток (%, px) для адаптивных вариантов;
• различная размерность сеток для адаптивных вариантов;
• не больше двух-трех сеток на медиа-вариант;
• сетки для всего сайта, а не для отдельных страниц;
• несложно реализуется CSS-препроцессором.
Результат формализованное горизонтальное
позиционирование блоков в различных
адаптивных вариантах.
6 / 30
Комбинирование сеток
7 / 30
Сетка: % или px?
• пиксельные сетки технологичнее и проще;
• фиксированные адаптивные варианты
менее затратны в реализации;
• процентные сетки универсальные, но
сложнее: размеры вложенных элементов,
ошибки округления и и.д.
• процентные сетки необходимы на
небольших мобильных разрешениях.
8 / 30
Вертикальный ритм
9 / 30
Вертикальный ритм
Единый шаг для вертикальных размеров элементов:
• вертикальные отступы;
• вертикальный размер изображений и блоков;
• элементы переменной высоты — в контейнер;
• выбор шага определяет baseline для основного шрифта;
• легко реализуется CSS-препроцессором.
Результат улучшение внешнего вида страницы,
системность в выборе размеров, возможность
варьирования на этапе разработки.
10 / 30
Дизайн: антипаттерны
Основные проблемы адаптивной верстки — на этапе дизайна:
• «над этим я не думал, разберемся при верстке»;
• подгонка сетки к уже отрисованному дизайну;
• единая сетка для всех блоков с массой исключений;
• нарушение порядка блоков в различных вариантах;
• расчет на ограниченный размер контента;
• избыточный второстепенный контент в начале страницы
на мобильном устройстве;
• избыточное использование таблиц и сложных
интерактивных элементов.
11 / 30
Роль верстальщика
Верстальщик необходим, но в новых условиях должен
эволюционировать:
• «страничная» CMS — неизбежная верстка контента;
• верстка шаблонов страниц;
• верстка компонентов, в т.ч. типовых контентных блоков;
• клиентский JavaScript;
• минимальное участие в клиентском контенте за счет
использования типовых контентных блоков.
Верстальщик → Развитие CMS → Frontend-developer
12 / 30
Прототипирование верстки
Master page – минимальный статический прототип для простых
сайтов:
• одна страница со всеми интерфейсными компонентами;
• HTML с минимальной (php,node...)-шаблонизацией;
• можно использовать как style guide;
• упрощает выявление конфликтов между компонентами;
• упрощает тестирование на мобильных устройствах.
• поощряет минимализм (хотя иногда уже поздно)
13 / 30
Структура CSS-классов
• БЭМ1 — большие проекты, набор общих блоков;
• у нас — небольшие проекты с сильно отличающимся
дизайном, используем сильно упрощенный вариант.
Главное: независимость блоков друг от друга и их
структурирование внутри проекта.
• префиксная система имен классов;
• упрощенная концепция блок-элемент-модификатор.
1
http://ru.bem.info/method/
14 / 30
Префиксная система имен
namespace-...-block-element-subelement-...--modificator
• модификатор всегда используется с основным классом
• модификатор не разбивается на пару «свойство-значение»
• разработчик может вводить промежуточные пространства
имен, отсутствие конфликтов между ними — на его совести;
Результат стандартизируем имена классов, исключаем
конфликты между своими и чужими классами.
15 / 30
Структура блоков верстки
Используем наиболее подходящую семантическую основу,
большая часть стилизации с помощью классов стандартной
структуры.
<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
Генерируемый код
Генерация кода необходима при разработке клиентской части:
• генерация CSS из более высокоуровневого кода;
• минимизация количества и объема CSS-файлов;
• структурирование и оптимизация JavaScript-кода
средствами AMD/RequireJS2 и т.д.
Результат снижение затрат на поддержку и развитие
старых проектов, повышение качества новых.
2
http://requirejs.org
17 / 30
Простейшая генерация кода
К любому проекту можно добавить генерацию кода, есть много
модных инструментов, но проще всего — make:
www/css/%.css: src/less/%.less
lessc $< > >@
Для существующего проекта просто переносим CSS-файлы в
src/less/ и получаем преимущества в виде переменных,
макросов и т.д.
Результат сокращаем код, постепенно рефакторим CSS,
если надо — приводим в чувство JavaScript
18 / 30
Выбор CSS-препроцессора
• основные претенденты: SASS, LESS, Stylus;
• SASS — логично, если решение на Ruby;
• Compass – полезно, даже если не использовать SASS;
• Любой CSS-файл – валидный исходник на LESS;
• LESS распространеннее, Stylus функциональнее из
коробки;
Мы выбрали LESS, Stylus тоже хороший выбор.
19 / 30
Особенности LESS
• полная синтаксическая совместимость с CSS;
• вложенные пространства имен, удобноj для библиотек;
• нет условий и циклов, но есть pattern matching и рекурсия;
• динамическое формирование имен классов, хотя из
документации это неочевидно.
Главное не генерировать избыточный CSS, в клиентском
коде максимально используем определение
классов, а не макросов.
20 / 30
LESS-фреймворк
• тривиальная часть — CSS3, шрифты и т.д.
• инициализация верстки: reset или normalize, чаще второе;
• медиа-варианты и версии для браузеров без Media Query;
• генерация сеток, средства отладки;
• базовые настройки отображения элементов форм;
• всевозможные костыли для IE.
Результат типовые решения для всех проектов, упрощение
поддержки, снижение порога вхождения для
разработчиков.
21 / 30
Файлы проекта
• правила CSS группируются в файлы произвольно;
• фреймворк подключается одним @import;
• каждому результирующему CSS-файлу соответствует
корневой less-файл, подключающий фреймворк и другие
less-файлы;
• корневых файлов может быть несколько: под разные
разрешения, разные версии IE и т.д
Результат правила можно группировать покомпонентно,
строить библиотеки компонент и т.д.
22 / 30
Медиа-варианты
@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
Элементы форм
• в разных проектах выглядят совершенно по-разному;
• при этом общие проблемы взаимного позиционирования,
размеров и т.д;
• проблема использования готовых решений типа Bootstrap
– геометрия и внешний вид неразделимы.
Решение: • базовыe классы – позиционирование;
• стандартные макросы – геометрия;
• оформление – свое в каждом проекте.
• оформление и размеры – модификаторы.
24 / 30
Поддержка IE
// В файлах компонент.
#ie {
.for(7) { /* правила для IE7 */ }
.for(lt9) { /* правила для IE8 */ }
}
// В результирующем файле
#boot > .classes(ie, 7);
Также с осторожностью используем некоторые полифиллы, в
частности PIE3 (CSS3) и boxsizing4 (border-box).
3
http://css3pie.com
4
http://github.com/Schepp/box-sizing-polyfill
25 / 30
Сетки
@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
Инициализация блока
Глобально используем 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
Инициализация верстки
1 определяем основной размер шрифта и вертикальный шаг;
2 переопределяем настройки типографики если нужно;
3 определяем диапазоны медиа-вариантов;
4 конфигурируем сетки в различных медиа-вариантах;
5 верстаем нестилизованные блоки с классами блоков и
ячеек сетки;
6 проверяем раскладку в различных разрешениях,
контролируем границы блоков;
7 дальше разбираемся со стилизацией каждого блока.
28 / 30
Итого
Что необходимо сделать, чтобы технологический процесс был
адекватен современным требованиям к верстке?
• работать с дизайнерами: компонентный подход,
стандартные паттерны, технологические ограничения;
• стандартизировать структуру разметки и CSS-классов;
• использовать адаптивные типографские сетки;
• внедрить генерацию клиентского кода вообще и
CSS-препроцессор в частности;
• реализовать набор типовых решений с помощью
CSS-препроцессора.
29 / 30
http://www.interlabs.ru

Weitere ähnliche Inhalte

Was ist angesagt?

Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011camp_drupal_ua
 
Вёрстка по методологии БЭМ
Вёрстка по методологии БЭМВёрстка по методологии БЭМ
Вёрстка по методологии БЭМversusbassz
 
Пишем БЭМ правильно
Пишем БЭМ правильноПишем БЭМ правильно
Пишем БЭМ правильноIhor Zenich
 
Онлайн-кинотеатр для SmartTV на веб-технологиях / Михаил Лабанов (Ayyo)
Онлайн-кинотеатр для SmartTV на веб-технологиях / Михаил Лабанов (Ayyo)Онлайн-кинотеатр для SmartTV на веб-технологиях / Михаил Лабанов (Ayyo)
Онлайн-кинотеатр для SmartTV на веб-технологиях / Михаил Лабанов (Ayyo)Ontico
 
Вёрстка для мобильных телефонов
Вёрстка для мобильных телефоновВёрстка для мобильных телефонов
Вёрстка для мобильных телефоновtoWave.ru
 
как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4rit2011
 
Alex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlexander Baumgertner
 
Database automated deployment and versioning ...for smart people
Database automated deployment and versioning ...for smart peopleDatabase automated deployment and versioning ...for smart people
Database automated deployment and versioning ...for smart peopleAlexey Diyan
 
От БЭМ-методологии до Мануфактуры проектов
От БЭМ-методологии до Мануфактуры проектовОт БЭМ-методологии до Мануфактуры проектов
От БЭМ-методологии до Мануфактуры проектовCodeFest
 
bem-components — от методологии до full stack платформы
bem-components — от методологии до full stack платформыbem-components — от методологии до full stack платформы
bem-components — от методологии до full stack платформыYandex
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressIgor Sazonov
 
БЭМ в дикой природе
БЭМ в дикой природеБЭМ в дикой природе
БЭМ в дикой природеIhor Zenich
 
Методологии верстки
Методологии версткиМетодологии верстки
Методологии версткиElizaveta Selivanova
 
Разработка прототипов на Axure
Разработка прототипов на AxureРазработка прототипов на Axure
Разработка прототипов на AxureSoftline
 
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"Yandex
 
BEM — block, element, modification conception
BEM — block, element, modification conceptionBEM — block, element, modification conception
BEM — block, element, modification conceptionVadim Patsev
 
Axure по для создания прототипов веб-сайтов
Axure   по для создания прототипов веб-сайтовAxure   по для создания прототипов веб-сайтов
Axure по для создания прототипов веб-сайтовSoftline
 
Denis Bugarchev
Denis BugarchevDenis Bugarchev
Denis Bugarchevyaevents
 

Was ist angesagt? (19)

Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
 
Вёрстка по методологии БЭМ
Вёрстка по методологии БЭМВёрстка по методологии БЭМ
Вёрстка по методологии БЭМ
 
Пишем БЭМ правильно
Пишем БЭМ правильноПишем БЭМ правильно
Пишем БЭМ правильно
 
Онлайн-кинотеатр для SmartTV на веб-технологиях / Михаил Лабанов (Ayyo)
Онлайн-кинотеатр для SmartTV на веб-технологиях / Михаил Лабанов (Ayyo)Онлайн-кинотеатр для SmartTV на веб-технологиях / Михаил Лабанов (Ayyo)
Онлайн-кинотеатр для SmartTV на веб-технологиях / Михаил Лабанов (Ayyo)
 
Вёрстка для мобильных телефонов
Вёрстка для мобильных телефоновВёрстка для мобильных телефонов
Вёрстка для мобильных телефонов
 
как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4
 
Alex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projects
 
Database automated deployment and versioning ...for smart people
Database automated deployment and versioning ...for smart peopleDatabase automated deployment and versioning ...for smart people
Database automated deployment and versioning ...for smart people
 
От БЭМ-методологии до Мануфактуры проектов
От БЭМ-методологии до Мануфактуры проектовОт БЭМ-методологии до Мануфактуры проектов
От БЭМ-методологии до Мануфактуры проектов
 
bem-components — от методологии до full stack платформы
bem-components — от методологии до full stack платформыbem-components — от методологии до full stack платформы
bem-components — от методологии до full stack платформы
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
БЭМ в дикой природе
БЭМ в дикой природеБЭМ в дикой природе
БЭМ в дикой природе
 
Методологии верстки
Методологии версткиМетодологии верстки
Методологии верстки
 
Разработка прототипов на Axure
Разработка прототипов на AxureРазработка прототипов на Axure
Разработка прототипов на Axure
 
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
 
BEM — block, element, modification conception
BEM — block, element, modification conceptionBEM — block, element, modification conception
BEM — block, element, modification conception
 
Bootstrap
BootstrapBootstrap
Bootstrap
 
Axure по для создания прототипов веб-сайтов
Axure   по для создания прототипов веб-сайтовAxure   по для создания прототипов веб-сайтов
Axure по для создания прототипов веб-сайтов
 
Denis Bugarchev
Denis BugarchevDenis Bugarchev
Denis Bugarchev
 

Andere mochten auch

РИФ 2016, Перформанс в регионах. Блондинка.ру.
РИФ 2016, Перформанс в регионах. Блондинка.ру.РИФ 2016, Перформанс в регионах. Блондинка.ру.
РИФ 2016, Перформанс в регионах. Блондинка.ру.Тарасов Константин
 
Anna kostenko (no son fotos son pinturas)
Anna kostenko (no son fotos son pinturas)Anna kostenko (no son fotos son pinturas)
Anna kostenko (no son fotos son pinturas)Kostas Tampakis
 
IS INFLUENZA A(H1N1) REALLY FRIGHTENING
IS INFLUENZA A(H1N1) REALLY FRIGHTENINGIS INFLUENZA A(H1N1) REALLY FRIGHTENING
IS INFLUENZA A(H1N1) REALLY FRIGHTENINGNSTDA THAILAND
 
РИФ 2016, Сквозная аналитика как метод контроля подрядчика по рекламе
РИФ 2016, Сквозная аналитика как метод контроля подрядчика по рекламеРИФ 2016, Сквозная аналитика как метод контроля подрядчика по рекламе
РИФ 2016, Сквозная аналитика как метод контроля подрядчика по рекламеТарасов Константин
 
CSPA 2008 Presentation
CSPA 2008 PresentationCSPA 2008 Presentation
CSPA 2008 Presentationismaeelbit
 
πλουσιοσ η φτωχοσ
πλουσιοσ η φτωχοσπλουσιοσ η φτωχοσ
πλουσιοσ η φτωχοσKostas Tampakis
 
РИФ 2016, Поисковая оптимизация для мобильных приложений на практике
РИФ 2016, Поисковая оптимизация для мобильных приложений на практикеРИФ 2016, Поисковая оптимизация для мобильных приложений на практике
РИФ 2016, Поисковая оптимизация для мобильных приложений на практикеТарасов Константин
 
Set 11 prepositions and prepositional phrases
Set 11 prepositions and prepositional phrasesSet 11 prepositions and prepositional phrases
Set 11 prepositions and prepositional phraseshilad
 
РИФ 2016, Все еще не верите в машинное обучение? Тогда мы идем к Вам!
РИФ 2016, Все еще не верите в машинное обучение? Тогда мы идем к Вам!РИФ 2016, Все еще не верите в машинное обучение? Тогда мы идем к Вам!
РИФ 2016, Все еще не верите в машинное обучение? Тогда мы идем к Вам!Тарасов Константин
 

Andere mochten auch (20)

MS2 Max and Min Points
MS2 Max and Min PointsMS2 Max and Min Points
MS2 Max and Min Points
 
20101119 fs-kratong53
20101119 fs-kratong5320101119 fs-kratong53
20101119 fs-kratong53
 
power point
power pointpower point
power point
 
ALA Retention Talk
ALA Retention TalkALA Retention Talk
ALA Retention Talk
 
Projektijuhtimine
ProjektijuhtimineProjektijuhtimine
Projektijuhtimine
 
РИФ 2016, Перформанс в регионах. Блондинка.ру.
РИФ 2016, Перформанс в регионах. Блондинка.ру.РИФ 2016, Перформанс в регионах. Блондинка.ру.
РИФ 2016, Перформанс в регионах. Блондинка.ру.
 
РИФ 2016, ЮФО: Кластер «РАЭК / Digital»
РИФ 2016, ЮФО: Кластер «РАЭК / Digital»РИФ 2016, ЮФО: Кластер «РАЭК / Digital»
РИФ 2016, ЮФО: Кластер «РАЭК / Digital»
 
Anna kostenko (no son fotos son pinturas)
Anna kostenko (no son fotos son pinturas)Anna kostenko (no son fotos son pinturas)
Anna kostenko (no son fotos son pinturas)
 
IS INFLUENZA A(H1N1) REALLY FRIGHTENING
IS INFLUENZA A(H1N1) REALLY FRIGHTENINGIS INFLUENZA A(H1N1) REALLY FRIGHTENING
IS INFLUENZA A(H1N1) REALLY FRIGHTENING
 
РИФ 2016, Сквозная аналитика как метод контроля подрядчика по рекламе
РИФ 2016, Сквозная аналитика как метод контроля подрядчика по рекламеРИФ 2016, Сквозная аналитика как метод контроля подрядчика по рекламе
РИФ 2016, Сквозная аналитика как метод контроля подрядчика по рекламе
 
Pepe
PepePepe
Pepe
 
Seo 110415070434-phpapp01
Seo 110415070434-phpapp01Seo 110415070434-phpapp01
Seo 110415070434-phpapp01
 
Ptc
PtcPtc
Ptc
 
CSPA 2008 Presentation
CSPA 2008 PresentationCSPA 2008 Presentation
CSPA 2008 Presentation
 
πλουσιοσ η φτωχοσ
πλουσιοσ η φτωχοσπλουσιοσ η φτωχοσ
πλουσιοσ η φτωχοσ
 
2.1. facebook.ads.robert.drysdale
2.1. facebook.ads.robert.drysdale2.1. facebook.ads.robert.drysdale
2.1. facebook.ads.robert.drysdale
 
! иде про автоматическое кп
! иде про автоматическое кп! иде про автоматическое кп
! иде про автоматическое кп
 
РИФ 2016, Поисковая оптимизация для мобильных приложений на практике
РИФ 2016, Поисковая оптимизация для мобильных приложений на практикеРИФ 2016, Поисковая оптимизация для мобильных приложений на практике
РИФ 2016, Поисковая оптимизация для мобильных приложений на практике
 
Set 11 prepositions and prepositional phrases
Set 11 prepositions and prepositional phrasesSet 11 prepositions and prepositional phrases
Set 11 prepositions and prepositional phrases
 
РИФ 2016, Все еще не верите в машинное обучение? Тогда мы идем к Вам!
РИФ 2016, Все еще не верите в машинное обучение? Тогда мы идем к Вам!РИФ 2016, Все еще не верите в машинное обучение? Тогда мы идем к Вам!
РИФ 2016, Все еще не верите в машинное обучение? Тогда мы идем к Вам!
 

Ähnlich wie Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, Интерлаб

Создание веб-сайта. Курс молодого бойца
Создание веб-сайта. Курс молодого бойцаСоздание веб-сайта. Курс молодого бойца
Создание веб-сайта. Курс молодого бойцаAnton Cherepov
 
Компонентный дизайн
Компонентный дизайнКомпонентный дизайн
Компонентный дизайнM18
 
Dreamwever cs3
Dreamwever cs3Dreamwever cs3
Dreamwever cs3JIuc
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеDenis Chistyakov
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеYandex
 
Мировые информационные ресурсы. Лекция 4
Мировые информационные ресурсы. Лекция 4Мировые информационные ресурсы. Лекция 4
Мировые информационные ресурсы. Лекция 4Dmitriy Krukov
 
бэм методология
бэм методология бэм методология
бэм методология racoons
 
Bazele conceptuale a dezvoltarii produselor
Bazele conceptuale a dezvoltarii produselorBazele conceptuale a dezvoltarii produselor
Bazele conceptuale a dezvoltarii produselorDmitrii Stoian
 
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного вебаWUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного вебаYury Vetrov
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesPositive Hack Days
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?buranLcme
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"Roman Dvornov
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Dima Dzuba
 
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают ADN Digital Studio
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворкиRoman Brovko
 
CSS Modules в React | Odessa Frontend Meetup #4
CSS Modules в React | Odessa Frontend Meetup #4CSS Modules в React | Odessa Frontend Meetup #4
CSS Modules в React | Odessa Frontend Meetup #4OdessaFrontend
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Ontico
 

Ähnlich wie Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, Интерлаб (20)

Создание веб-сайта. Курс молодого бойца
Создание веб-сайта. Курс молодого бойцаСоздание веб-сайта. Курс молодого бойца
Создание веб-сайта. Курс молодого бойца
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
Компонентный дизайн
Компонентный дизайнКомпонентный дизайн
Компонентный дизайн
 
Dreamwever cs3
Dreamwever cs3Dreamwever cs3
Dreamwever cs3
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
 
Мировые информационные ресурсы. Лекция 4
Мировые информационные ресурсы. Лекция 4Мировые информационные ресурсы. Лекция 4
Мировые информационные ресурсы. Лекция 4
 
бэм методология
бэм методология бэм методология
бэм методология
 
Bazele conceptuale a dezvoltarii produselor
Bazele conceptuale a dezvoltarii produselorBazele conceptuale a dezvoltarii produselor
Bazele conceptuale a dezvoltarii produselor
 
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного вебаWUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4
 
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки
 
CSS Modules в React | Odessa Frontend Meetup #4
CSS Modules в React | Odessa Frontend Meetup #4CSS Modules в React | Odessa Frontend Meetup #4
CSS Modules в React | Odessa Frontend Meetup #4
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 

Mehr von Тарасов Константин

Excel. трюки. 100 профессиональных примеров
Excel. трюки. 100 профессиональных примеровExcel. трюки. 100 профессиональных примеров
Excel. трюки. 100 профессиональных примеровТарасов Константин
 
Влияние маркеров на CTR в Директе. РСЯ
Влияние маркеров на CTR в Директе. РСЯВлияние маркеров на CTR в Директе. РСЯ
Влияние маркеров на CTR в Директе. РСЯТарасов Константин
 
Влияние маркеров на CTR в Директе. Поисковая реклама
Влияние маркеров на CTR в Директе. Поисковая рекламаВлияние маркеров на CTR в Директе. Поисковая реклама
Влияние маркеров на CTR в Директе. Поисковая рекламаТарасов Константин
 
РИФ 2016, Продажи, через стратегию продвижение постов на Facebook
РИФ 2016, Продажи, через стратегию продвижение постов на FacebookРИФ 2016, Продажи, через стратегию продвижение постов на Facebook
РИФ 2016, Продажи, через стратегию продвижение постов на FacebookТарасов Константин
 
РИФ 2016, Таргетированная реклама: как снизить стоимость клиента в 3-5 раз
РИФ 2016, Таргетированная реклама: как снизить стоимость клиента в 3-5 разРИФ 2016, Таргетированная реклама: как снизить стоимость клиента в 3-5 раз
РИФ 2016, Таргетированная реклама: как снизить стоимость клиента в 3-5 разТарасов Константин
 
РИФ 2016. 3 способа стимулировать клиентов рекомендовать вашу компанию (без п...
РИФ 2016. 3 способа стимулировать клиентов рекомендовать вашу компанию (без п...РИФ 2016. 3 способа стимулировать клиентов рекомендовать вашу компанию (без п...
РИФ 2016. 3 способа стимулировать клиентов рекомендовать вашу компанию (без п...Тарасов Константин
 
РИФ 2016, Бюджетные технические средства защиты сайтов
РИФ 2016, Бюджетные технические средства защиты сайтовРИФ 2016, Бюджетные технические средства защиты сайтов
РИФ 2016, Бюджетные технические средства защиты сайтовТарасов Константин
 
РИФ 2016, Борьба с воровством мобильного трафика
РИФ 2016, Борьба с воровством мобильного трафикаРИФ 2016, Борьба с воровством мобильного трафика
РИФ 2016, Борьба с воровством мобильного трафикаТарасов Константин
 
РИФ 2016, Заоблачная безопасность: как обойти чужие грабли
РИФ 2016, Заоблачная безопасность: как обойти чужие граблиРИФ 2016, Заоблачная безопасность: как обойти чужие грабли
РИФ 2016, Заоблачная безопасность: как обойти чужие граблиТарасов Константин
 
РИФ 2016, Аварии информационных систем как угроза для бизнеса
РИФ 2016, Аварии информационных систем как угроза для бизнесаРИФ 2016, Аварии информационных систем как угроза для бизнеса
РИФ 2016, Аварии информационных систем как угроза для бизнесаТарасов Константин
 
РИФ 2016, Забег на 110 метров с барьерами и наградой в виде внимания клиентов
РИФ 2016, Забег на 110 метров с барьерами и наградой в виде внимания клиентовРИФ 2016, Забег на 110 метров с барьерами и наградой в виде внимания клиентов
РИФ 2016, Забег на 110 метров с барьерами и наградой в виде внимания клиентовТарасов Константин
 
РИФ 2016, Официальный фотограф LEGO Россия 2015
РИФ 2016, Официальный фотограф LEGO Россия 2015РИФ 2016, Официальный фотограф LEGO Россия 2015
РИФ 2016, Официальный фотограф LEGO Россия 2015Тарасов Константин
 
РИФ 2016, «Лаборатория Бега»: Эксперименты с магазинами спортивной экипировки
РИФ 2016, «Лаборатория Бега»: Эксперименты с магазинами спортивной экипировкиРИФ 2016, «Лаборатория Бега»: Эксперименты с магазинами спортивной экипировки
РИФ 2016, «Лаборатория Бега»: Эксперименты с магазинами спортивной экипировкиТарасов Константин
 
РИФ 2016, Эволюция продвижения страницы бренда: 10 шагов достижения результат...
РИФ 2016, Эволюция продвижения страницы бренда: 10 шагов достижения результат...РИФ 2016, Эволюция продвижения страницы бренда: 10 шагов достижения результат...
РИФ 2016, Эволюция продвижения страницы бренда: 10 шагов достижения результат...Тарасов Константин
 
РИФ 2016, Ведение международных рекламных кампаний в Европе и Азии
РИФ 2016, Ведение международных рекламных кампаний в Европе и АзииРИФ 2016, Ведение международных рекламных кампаний в Европе и Азии
РИФ 2016, Ведение международных рекламных кампаний в Европе и АзииТарасов Константин
 
РИФ 2016, Десять лет на американском рынке аутсорсинга: UpWork и за его преде...
РИФ 2016, Десять лет на американском рынке аутсорсинга: UpWork и за его преде...РИФ 2016, Десять лет на американском рынке аутсорсинга: UpWork и за его преде...
РИФ 2016, Десять лет на американском рынке аутсорсинга: UpWork и за его преде...Тарасов Константин
 
РИФ 2016, Как получить первую сотню клиентов из Западной Европы
РИФ 2016, Как получить первую сотню клиентов из Западной ЕвропыРИФ 2016, Как получить первую сотню клиентов из Западной Европы
РИФ 2016, Как получить первую сотню клиентов из Западной ЕвропыТарасов Константин
 
РИФ 2016, Мультиканальное продвижение или как раскрыть потенциал вашего сайта
РИФ 2016, Мультиканальное продвижение или как раскрыть потенциал вашего сайтаРИФ 2016, Мультиканальное продвижение или как раскрыть потенциал вашего сайта
РИФ 2016, Мультиканальное продвижение или как раскрыть потенциал вашего сайтаТарасов Константин
 

Mehr von Тарасов Константин (20)

21apr rif17 4-1--sidorov
21apr rif17 4-1--sidorov21apr rif17 4-1--sidorov
21apr rif17 4-1--sidorov
 
Excel. трюки. 100 профессиональных примеров
Excel. трюки. 100 профессиональных примеровExcel. трюки. 100 профессиональных примеров
Excel. трюки. 100 профессиональных примеров
 
Влияние маркеров на CTR в Директе. РСЯ
Влияние маркеров на CTR в Директе. РСЯВлияние маркеров на CTR в Директе. РСЯ
Влияние маркеров на CTR в Директе. РСЯ
 
Влияние маркеров на CTR в Директе. Поисковая реклама
Влияние маркеров на CTR в Директе. Поисковая рекламаВлияние маркеров на CTR в Директе. Поисковая реклама
Влияние маркеров на CTR в Директе. Поисковая реклама
 
РИФ 2016, Продажи, через стратегию продвижение постов на Facebook
РИФ 2016, Продажи, через стратегию продвижение постов на FacebookРИФ 2016, Продажи, через стратегию продвижение постов на Facebook
РИФ 2016, Продажи, через стратегию продвижение постов на Facebook
 
РИФ 2016, Таргетированная реклама: как снизить стоимость клиента в 3-5 раз
РИФ 2016, Таргетированная реклама: как снизить стоимость клиента в 3-5 разРИФ 2016, Таргетированная реклама: как снизить стоимость клиента в 3-5 раз
РИФ 2016, Таргетированная реклама: как снизить стоимость клиента в 3-5 раз
 
РИФ 2016. 3 способа стимулировать клиентов рекомендовать вашу компанию (без п...
РИФ 2016. 3 способа стимулировать клиентов рекомендовать вашу компанию (без п...РИФ 2016. 3 способа стимулировать клиентов рекомендовать вашу компанию (без п...
РИФ 2016. 3 способа стимулировать клиентов рекомендовать вашу компанию (без п...
 
РИФ 2016, Бюджетные технические средства защиты сайтов
РИФ 2016, Бюджетные технические средства защиты сайтовРИФ 2016, Бюджетные технические средства защиты сайтов
РИФ 2016, Бюджетные технические средства защиты сайтов
 
РИФ 2016, Борьба с воровством мобильного трафика
РИФ 2016, Борьба с воровством мобильного трафикаРИФ 2016, Борьба с воровством мобильного трафика
РИФ 2016, Борьба с воровством мобильного трафика
 
РИФ 2016, Заоблачная безопасность: как обойти чужие грабли
РИФ 2016, Заоблачная безопасность: как обойти чужие граблиРИФ 2016, Заоблачная безопасность: как обойти чужие грабли
РИФ 2016, Заоблачная безопасность: как обойти чужие грабли
 
РИФ 2016, Аварии информационных систем как угроза для бизнеса
РИФ 2016, Аварии информационных систем как угроза для бизнесаРИФ 2016, Аварии информационных систем как угроза для бизнеса
РИФ 2016, Аварии информационных систем как угроза для бизнеса
 
РИФ 2016, Забег на 110 метров с барьерами и наградой в виде внимания клиентов
РИФ 2016, Забег на 110 метров с барьерами и наградой в виде внимания клиентовРИФ 2016, Забег на 110 метров с барьерами и наградой в виде внимания клиентов
РИФ 2016, Забег на 110 метров с барьерами и наградой в виде внимания клиентов
 
РИФ 2016, Официальный фотограф LEGO Россия 2015
РИФ 2016, Официальный фотограф LEGO Россия 2015РИФ 2016, Официальный фотограф LEGO Россия 2015
РИФ 2016, Официальный фотограф LEGO Россия 2015
 
РИФ 2016, «Лаборатория Бега»: Эксперименты с магазинами спортивной экипировки
РИФ 2016, «Лаборатория Бега»: Эксперименты с магазинами спортивной экипировкиРИФ 2016, «Лаборатория Бега»: Эксперименты с магазинами спортивной экипировки
РИФ 2016, «Лаборатория Бега»: Эксперименты с магазинами спортивной экипировки
 
РИФ 2016, Эволюция продвижения страницы бренда: 10 шагов достижения результат...
РИФ 2016, Эволюция продвижения страницы бренда: 10 шагов достижения результат...РИФ 2016, Эволюция продвижения страницы бренда: 10 шагов достижения результат...
РИФ 2016, Эволюция продвижения страницы бренда: 10 шагов достижения результат...
 
РИФ 2016, Ведение международных рекламных кампаний в Европе и Азии
РИФ 2016, Ведение международных рекламных кампаний в Европе и АзииРИФ 2016, Ведение международных рекламных кампаний в Европе и Азии
РИФ 2016, Ведение международных рекламных кампаний в Европе и Азии
 
РИФ 2016, Десять лет на американском рынке аутсорсинга: UpWork и за его преде...
РИФ 2016, Десять лет на американском рынке аутсорсинга: UpWork и за его преде...РИФ 2016, Десять лет на американском рынке аутсорсинга: UpWork и за его преде...
РИФ 2016, Десять лет на американском рынке аутсорсинга: UpWork и за его преде...
 
РИФ 2016, Digital на экспорт в Германию
РИФ 2016, Digital на экспорт в ГерманиюРИФ 2016, Digital на экспорт в Германию
РИФ 2016, Digital на экспорт в Германию
 
РИФ 2016, Как получить первую сотню клиентов из Западной Европы
РИФ 2016, Как получить первую сотню клиентов из Западной ЕвропыРИФ 2016, Как получить первую сотню клиентов из Западной Европы
РИФ 2016, Как получить первую сотню клиентов из Западной Европы
 
РИФ 2016, Мультиканальное продвижение или как раскрыть потенциал вашего сайта
РИФ 2016, Мультиканальное продвижение или как раскрыть потенциал вашего сайтаРИФ 2016, Мультиканальное продвижение или как раскрыть потенциал вашего сайта
РИФ 2016, Мультиканальное продвижение или как раскрыть потенциал вашего сайта
 

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

  • 1. Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, Интерлабс 19 апреля 2013 1 / 30
  • 2. Проблема Требования к верстке постоянно растут, а вместе с ними и себестоимость проекта: • адаптивность: был один дизайн, а стало N; • кроссбраузерный CSS3; • улучшенная типографика. На что обратить внимание в технологическом процессе, чтобы сократить издержки? 2 / 30
  • 3. Главная беда дизайна «Дизайн сайта — набор страниц» адаптивный дизайн только усугубляет проблему: • на уровнe CMS: единая контентная область, WYSIWYG. • на уровнe дизайнера: главная и рабочая страницы и т.д. • на уровне клиента: сделайте точно так, как я хочу. Дизайн сайта — система компонентов CMS — часто ограничивающий фактор 3 / 30
  • 4. Работа с дизайнерами Реализация адаптивного дизайна будет проще, если: • мыслить в контексте всего сайта, а не отдельной страницы; • мыслить элементами, образующими визуальный язык; • понимать технологические ограничения; • использовать сетки и вертикальный ритм; • минимизировать количество и варианты блоков; • понимать, что pixel-perfect дизайн невозможен. Звучит банально, но менять стереотипы тяжело. 4 / 30
  • 6. Типографская сетка В обычном дизайне полезна, в адаптивном — необходима: • различные виды сеток (%, px) для адаптивных вариантов; • различная размерность сеток для адаптивных вариантов; • не больше двух-трех сеток на медиа-вариант; • сетки для всего сайта, а не для отдельных страниц; • несложно реализуется CSS-препроцессором. Результат формализованное горизонтальное позиционирование блоков в различных адаптивных вариантах. 6 / 30
  • 8. Сетка: % или px? • пиксельные сетки технологичнее и проще; • фиксированные адаптивные варианты менее затратны в реализации; • процентные сетки универсальные, но сложнее: размеры вложенных элементов, ошибки округления и и.д. • процентные сетки необходимы на небольших мобильных разрешениях. 8 / 30
  • 10. Вертикальный ритм Единый шаг для вертикальных размеров элементов: • вертикальные отступы; • вертикальный размер изображений и блоков; • элементы переменной высоты — в контейнер; • выбор шага определяет baseline для основного шрифта; • легко реализуется CSS-препроцессором. Результат улучшение внешнего вида страницы, системность в выборе размеров, возможность варьирования на этапе разработки. 10 / 30
  • 11. Дизайн: антипаттерны Основные проблемы адаптивной верстки — на этапе дизайна: • «над этим я не думал, разберемся при верстке»; • подгонка сетки к уже отрисованному дизайну; • единая сетка для всех блоков с массой исключений; • нарушение порядка блоков в различных вариантах; • расчет на ограниченный размер контента; • избыточный второстепенный контент в начале страницы на мобильном устройстве; • избыточное использование таблиц и сложных интерактивных элементов. 11 / 30
  • 12. Роль верстальщика Верстальщик необходим, но в новых условиях должен эволюционировать: • «страничная» CMS — неизбежная верстка контента; • верстка шаблонов страниц; • верстка компонентов, в т.ч. типовых контентных блоков; • клиентский JavaScript; • минимальное участие в клиентском контенте за счет использования типовых контентных блоков. Верстальщик → Развитие CMS → Frontend-developer 12 / 30
  • 13. Прототипирование верстки Master page – минимальный статический прототип для простых сайтов: • одна страница со всеми интерфейсными компонентами; • HTML с минимальной (php,node...)-шаблонизацией; • можно использовать как style guide; • упрощает выявление конфликтов между компонентами; • упрощает тестирование на мобильных устройствах. • поощряет минимализм (хотя иногда уже поздно) 13 / 30
  • 14. Структура CSS-классов • БЭМ1 — большие проекты, набор общих блоков; • у нас — небольшие проекты с сильно отличающимся дизайном, используем сильно упрощенный вариант. Главное: независимость блоков друг от друга и их структурирование внутри проекта. • префиксная система имен классов; • упрощенная концепция блок-элемент-модификатор. 1 http://ru.bem.info/method/ 14 / 30
  • 15. Префиксная система имен namespace-...-block-element-subelement-...--modificator • модификатор всегда используется с основным классом • модификатор не разбивается на пару «свойство-значение» • разработчик может вводить промежуточные пространства имен, отсутствие конфликтов между ними — на его совести; Результат стандартизируем имена классов, исключаем конфликты между своими и чужими классами. 15 / 30
  • 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
  • 17. Генерируемый код Генерация кода необходима при разработке клиентской части: • генерация CSS из более высокоуровневого кода; • минимизация количества и объема CSS-файлов; • структурирование и оптимизация JavaScript-кода средствами AMD/RequireJS2 и т.д. Результат снижение затрат на поддержку и развитие старых проектов, повышение качества новых. 2 http://requirejs.org 17 / 30
  • 18. Простейшая генерация кода К любому проекту можно добавить генерацию кода, есть много модных инструментов, но проще всего — make: www/css/%.css: src/less/%.less lessc $< > >@ Для существующего проекта просто переносим CSS-файлы в src/less/ и получаем преимущества в виде переменных, макросов и т.д. Результат сокращаем код, постепенно рефакторим CSS, если надо — приводим в чувство JavaScript 18 / 30
  • 19. Выбор CSS-препроцессора • основные претенденты: SASS, LESS, Stylus; • SASS — логично, если решение на Ruby; • Compass – полезно, даже если не использовать SASS; • Любой CSS-файл – валидный исходник на LESS; • LESS распространеннее, Stylus функциональнее из коробки; Мы выбрали LESS, Stylus тоже хороший выбор. 19 / 30
  • 20. Особенности LESS • полная синтаксическая совместимость с CSS; • вложенные пространства имен, удобноj для библиотек; • нет условий и циклов, но есть pattern matching и рекурсия; • динамическое формирование имен классов, хотя из документации это неочевидно. Главное не генерировать избыточный CSS, в клиентском коде максимально используем определение классов, а не макросов. 20 / 30
  • 21. LESS-фреймворк • тривиальная часть — CSS3, шрифты и т.д. • инициализация верстки: reset или normalize, чаще второе; • медиа-варианты и версии для браузеров без Media Query; • генерация сеток, средства отладки; • базовые настройки отображения элементов форм; • всевозможные костыли для IE. Результат типовые решения для всех проектов, упрощение поддержки, снижение порога вхождения для разработчиков. 21 / 30
  • 22. Файлы проекта • правила CSS группируются в файлы произвольно; • фреймворк подключается одним @import; • каждому результирующему CSS-файлу соответствует корневой less-файл, подключающий фреймворк и другие less-файлы; • корневых файлов может быть несколько: под разные разрешения, разные версии IE и т.д Результат правила можно группировать покомпонентно, строить библиотеки компонент и т.д. 22 / 30
  • 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
  • 24. Элементы форм • в разных проектах выглядят совершенно по-разному; • при этом общие проблемы взаимного позиционирования, размеров и т.д; • проблема использования готовых решений типа Bootstrap – геометрия и внешний вид неразделимы. Решение: • базовыe классы – позиционирование; • стандартные макросы – геометрия; • оформление – свое в каждом проекте. • оформление и размеры – модификаторы. 24 / 30
  • 25. Поддержка IE // В файлах компонент. #ie { .for(7) { /* правила для IE7 */ } .for(lt9) { /* правила для IE8 */ } } // В результирующем файле #boot > .classes(ie, 7); Также с осторожностью используем некоторые полифиллы, в частности PIE3 (CSS3) и boxsizing4 (border-box). 3 http://css3pie.com 4 http://github.com/Schepp/box-sizing-polyfill 25 / 30
  • 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
  • 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
  • 28. Инициализация верстки 1 определяем основной размер шрифта и вертикальный шаг; 2 переопределяем настройки типографики если нужно; 3 определяем диапазоны медиа-вариантов; 4 конфигурируем сетки в различных медиа-вариантах; 5 верстаем нестилизованные блоки с классами блоков и ячеек сетки; 6 проверяем раскладку в различных разрешениях, контролируем границы блоков; 7 дальше разбираемся со стилизацией каждого блока. 28 / 30
  • 29. Итого Что необходимо сделать, чтобы технологический процесс был адекватен современным требованиям к верстке? • работать с дизайнерами: компонентный подход, стандартные паттерны, технологические ограничения; • стандартизировать структуру разметки и CSS-классов; • использовать адаптивные типографские сетки; • внедрить генерацию клиентского кода вообще и CSS-препроцессор в частности; • реализовать набор типовых решений с помощью CSS-препроцессора. 29 / 30