SlideShare a Scribd company logo
1 of 53
Download to read offline
Работа с CSS
Методологии и инструменты
Работа с CSS
Проблемы CSS
Подходы к организации CSS
Оптимизация CSS
Инструменты и автоматизация
Проблемы CSS
Проблемы CSS
Повторения кода
h2 {font-size: 1em}
article h2 {font-size: 1.2em}
.cart section h2 {font-size: 2em}
Проблемы CSS
Повторения кода
Возможны сайд-эффекты
h2 {font-size: 1em; color: #000}
article h2 {font-size: 1.2em}
.cart section h2 {font-size: 2em}
Проблемы CSS
Повторения кода
Возможны сайд-эффекты
Сложности с поддержкой на больших проектах
Поддержка и развитие
Проблемы CSS
Повторения кода
Возможны сайд-эффекты.
Сложности с поддержкой на больших проектах
Тестирование
Подходы к написанию
CSS
ul {……}
ul li {……}
ul li a {……}
Что изменилось за
последние годы?
ul {……}
ul li {……}
ul li a {……}
акцент был на свойства
Что изменилось?
ul {……}
ul li {……}
ul li a {……}
больше внимания уделено “архитектуре”
Что изменилось?
PLAIN CSS
Plain CSS
.left-sidebar {font-size: 14px; float: left}
.right-sidebar {font-size: 14px; float: right}
<div class=‘left-sidebar’></div>
<div class=‘right-sidebar’></div>
Plain CSS
Нет системы именования селекторов
Много повторов кода
Сложности в поддержке и развитии
Огромные файлы CSS
Невозможно повторно использовать код
Много наследования классов
OOCSS
object-oriented css
OOCSS
Разделение структуры и оформления
Разделение контейнера и контента
Модульность. Web-components - далеко.
Уменьшение вложенности селекторов
Возможно реиспользовать код
OOCSS компоненты
Сетки
Списки и заголовки
Кнопки
Rows (колонки)
Heading 1
Heading 2
Heading 3
Heading 4
OOCSS
.sidebar {font-size: 14px}
.to-right {font-size: 14px; float: right}
<div class=‘sidebar’></div>
<div class=‘sidebar to-right’></div>
OOCSS
.padding-10 {padding: 10px}
.padding-30 {padding: 30px}
<div class=‘sidebar padding-30’></div>
<div class=‘sidebar padding-10’></div>
Группировка классов
<div class=‘[btn btn-primary] [small-text text-center]’></div>
BEM
block-element-modifier
BEM (CSS)
Блок - элемент страницы со своей разметкой и стилями,
функциями
Элемент - часть блока не имеющая без него смысла.
Модификатор - фича модифицирующая блок, элемент
Все элементы блока начинаются с его имени
<div class=‘btn btn——orange’>
<div class=‘btn__price’>$9.99</div>
<div class=‘btn__text’>buy now</div>
</div>
btn {…} – блок
btn__price{…}- элемент
btn——orange{…} - модификатор
BEM плюсы
Отсутствие каскадирование
Web-componetns - ну почти.
Пространство имен и правила именования
Возможность реиспользовать код
Легче поддерживать и масштабировать
Снижение сложности кода + наглядность
+ Сборщики проектов
BEM vs OOCSS
<div class="box profile">
<img class="avatar" />
<p class="bio">...</p>
</div>
<div class="profile--is-pro-user">
<img class="profile__image" />
<p class="profile_bio">...</p>
</div>
Some Good Practice
Good practice
Избегать стилизации id
#sidebar {font-size: 14px}
<div id=‘sidebar’></div>
Good practice
Избегать !important
.sidebar {font-size: 14px !important}
<div class=‘sidebar’></div>
Good practice
Избегать элементов в селекторах
div.sidebar {font-size: 14px !important}
<div class=‘sidebar’></div>
Good practice
Избегать большого количества псевдо-классов
box:not(:empty):last-child .title
Good practice
Классы которые используются в Javascript начинайте с
префикса js-
<div class=‘sidebar js-is-shown’></div>
Good practice
Классы которые модифицируют стили можно
использовать с приставкой mod-
<div class=‘sidebar mod-small-padding’></div>
Оптимизация CSS
Конвейер пикселей
Вычисление стилей
Расчет макета
Прорисовка
Компоновка
Чем проще селекторы тем лучше
.box:nth-last-child(-n+1) .title
.final-box-title
При модификации DOM. Сокращайте количество элементов для
которых нужно пересчитывать стили.
BEM помогает частично решить эту проблему
Вычисление стилей
Вычисление стилей
50% времени на вычисление стилей приходится на
сопоставление селекторов
По возможности избегайте перерасчета макета
.box {
width: 20px;
height: 20px;
}
Перерасчет макета почти всегда выполняется для всего элемента
.box--expanded {
width: 200px;
height: 350px;
}
Чем больше DOM дерево тем затратное перерасчет макета. Старайтесь
минимизировать вложенность элементов
Прорисовка самый затратный процесс рендеринга
Position: transform: translate(npx, npx);
Scale: transform: scale(n);
Rotation: transform: rotate(ndeg);
Skew: transform: skew(X|Y)(ndeg);
Matrix: transform: matrix(3d)(…);
Opacity: opacity: 0…1;
Для анимации можно использовать requestAnimationFrame()
Анимация с использование background-position
Анимация с использованием transform: translate
CSS Triggers
http://csstriggers.com
Workflow
Workflow
Установите стандарты кода
Следуйте установленным стандартам
Разбивайте CSS на файлы
Автоматизируйте процессы
???
PROFIT!!!!
Не изобретайте велосипед
Code guide примеры
Trello:
https://gist.github.com/bobbygrace/9e961e8982f42eb91b80
http://styleguides.io/
Инструменты
Препроцессоры
VS
Препроцессоры
.products{
&__product{
&__item{…}
}
}
$custom-font: 'Roboto Slab', serif;
$link-primary: #000;
$link-secondary: #737373;
$link-hover: #f5b431;
Инструменты
VS
Автоматизация
Минификация, конкатинация, сборка
Удаление не используемых классов
Создание спрайтов, сжатие изображений
Auto-prefixer
Проверка соответсвию стандартам CSS comb
+ сборщики BEM (Bem tools)
Автоматизация
grunt-uncss
gulp-uncss
csscomb
gulp-autoprefixer
grunt-autoprefixer
gulp.spritesmith
grunt-spritesmith
Полезное
https://aerotwist.com
Google Developers (Udacity course)
Gulp, Grunt, npm
http://csstriggers.com
BEM
http://styleguides.io/
https://gist.github.com/bobbygrace/9e961e8982f42eb91b80
Спасибо за внимание
Anton Tymchuk
facebook.com/creatonio
creatonio@gmail.com

More Related Content

Similar to Робота з CSS. Методології, інструменти, оптимізація

Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
MoscowJS
 
Артем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSSАртем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSS
DataArt
 
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Yandex
 
Css3 для веб дизайнеров
Css3 для веб дизайнеровCss3 для веб дизайнеров
Css3 для веб дизайнеров
Vgrafike.ru
 
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Yandex
 
Кэш виджетов Yii в Redis. Отдача напрямую через Nginx. Трофименко
Кэш виджетов Yii в Redis. Отдача напрямую через Nginx. ТрофименкоКэш виджетов Yii в Redis. Отдача напрямую через Nginx. Трофименко
Кэш виджетов Yii в Redis. Отдача напрямую через Nginx. Трофименко
2ГИС Технологии
 

Similar to Робота з CSS. Методології, інструменти, оптимізація (20)

Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 
Артем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSSАртем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSS
 
CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSS
 
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И... Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
 
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
 
Css3 для веб дизайнеров
Css3 для веб дизайнеровCss3 для веб дизайнеров
Css3 для веб дизайнеров
 
Блоки как элементы макета сайта
Блоки как элементы макета сайтаБлоки как элементы макета сайта
Блоки как элементы макета сайта
 
Методология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, ОтношенияМетодология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, Отношения
 
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
 
Мировые информационные ресурсы. Лекция 4
Мировые информационные ресурсы. Лекция 4Мировые информационные ресурсы. Лекция 4
Мировые информационные ресурсы. Лекция 4
 
Создание веб-сайта. Курс молодого бойца
Создание веб-сайта. Курс молодого бойцаСоздание веб-сайта. Курс молодого бойца
Создание веб-сайта. Курс молодого бойца
 
Кэш виджетов Yii в Redis. Отдача напрямую через Nginx. Трофименко
Кэш виджетов Yii в Redis. Отдача напрямую через Nginx. ТрофименкоКэш виджетов Yii в Redis. Отдача напрямую через Nginx. Трофименко
Кэш виджетов Yii в Redis. Отдача напрямую через Nginx. Трофименко
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
Вёрстка писем: основные ошибки и как их избежать
Вёрстка писем: основные ошибки и как их избежатьВёрстка писем: основные ошибки и как их избежать
Вёрстка писем: основные ошибки и как их избежать
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
Css Intro. Vlad Savitsky
Css Intro. Vlad SavitskyCss Intro. Vlad Savitsky
Css Intro. Vlad Savitsky
 
Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1
 

More from Stfalcon Meetups

Kubernetes: від знайомства до використання у CI/CD
Kubernetes: від знайомства до використання у CI/CDKubernetes: від знайомства до використання у CI/CD
Kubernetes: від знайомства до використання у CI/CD
Stfalcon Meetups
 

More from Stfalcon Meetups (20)

Conversion centered design 3
Conversion centered design 3Conversion centered design 3
Conversion centered design 3
 
Discovery phase
Discovery phaseDiscovery phase
Discovery phase
 
Stfalcon QA Meetup 31.01.2020
Stfalcon QA Meetup 31.01.2020Stfalcon QA Meetup 31.01.2020
Stfalcon QA Meetup 31.01.2020
 
Stfalcon QA Meetup 31.01.2020
Stfalcon QA Meetup 31.01.2020Stfalcon QA Meetup 31.01.2020
Stfalcon QA Meetup 31.01.2020
 
Stfalcon PM Meetup 21.11
Stfalcon PM Meetup 21.11Stfalcon PM Meetup 21.11
Stfalcon PM Meetup 21.11
 
Stfalcon PM Meetup 21.11
Stfalcon PM Meetup 21.11Stfalcon PM Meetup 21.11
Stfalcon PM Meetup 21.11
 
Design of the_future_30_05_2019
Design of the_future_30_05_2019Design of the_future_30_05_2019
Design of the_future_30_05_2019
 
2 5404811386729530203
2 54048113867295302032 5404811386729530203
2 5404811386729530203
 
Team evolution
Team evolutionTeam evolution
Team evolution
 
Mobile&Privacy
Mobile&PrivacyMobile&Privacy
Mobile&Privacy
 
Global sales - a few insights
Global sales - a few insightsGlobal sales - a few insights
Global sales - a few insights
 
How to build your own startup
How to build your own startupHow to build your own startup
How to build your own startup
 
Первая и последняя встреча с клиентом
Первая и последняя встреча с клиентом Первая и последняя встреча с клиентом
Первая и последняя встреча с клиентом
 
Парнерство нидерланды
Парнерство нидерландыПарнерство нидерланды
Парнерство нидерланды
 
Риси гарного менеджера
Риси гарного менеджераРиси гарного менеджера
Риси гарного менеджера
 
Между заказчиком и разработчиком
Между заказчиком и разработчикомМежду заказчиком и разработчиком
Между заказчиком и разработчиком
 
Cv vs resume
Cv vs resumeCv vs resume
Cv vs resume
 
Vue.js
Vue.jsVue.js
Vue.js
 
майстер-клас “Управління ризиками”
майстер-клас “Управління ризиками”майстер-клас “Управління ризиками”
майстер-клас “Управління ризиками”
 
Kubernetes: від знайомства до використання у CI/CD
Kubernetes: від знайомства до використання у CI/CDKubernetes: від знайомства до використання у CI/CD
Kubernetes: від знайомства до використання у CI/CD
 

Робота з CSS. Методології, інструменти, оптимізація