SlideShare a Scribd company logo
1
Изоляция CSS
Андрей Ситник, Злые Марсиане
2
Злые марсианеЗлые марсианеЗлые марсиане
Злые марсиане
3
Работали над
4
Наш опенсорс
5
Глава 1Глава 1Глава 1
Глава 1
ПроблемаПроблемаПроблема
Проблема
6
Зачем нам ИТ?Зачем нам ИТ?Зачем нам ИТ?
Зачем нам ИТ?
7
Рост сложности
3 объекта 6 объектов
3 связи 15 связей
8
Решение роста
9
Программирование —Программирование —
контроль сложностиконтроль сложности
10
Компоненты сети
11
Компоненты ОС
systemctl
systemd Core
manager service
socket
mount
systemd snapshot path
targettimer
swap
unit
multiseat inhibit
pamsession
login
namespace
cgroup
log
dbus
systemd Libraries
Linux Kernel
systemd Targets
systemd Utilities
notify analyze cgls cgtop loginctljournalctl nspawn
dbus-1 libpam libcap libcryptsetup tcpwrapper libaudit libnotify
basic
reboot
bootmode
shutdown
dbus telephony
logind
multi-user
dlog
user-
sesssion
graphical
display service
user-session
tizen service
systemd Daemons
logind
journald
systemd
session
cgroups autofs kdbus
networkd
12
Компоненты JavaScript
import React from 'react';
import Logo from '../logo';
export const Header = () => (
<div class="header">
<Logo></Logo>
</div>
);
13
Компоненты дизайна
14
Глобальный CSS :-(
* {
box-sizing: border-box;
}
.title {
font-size: 30px;
}
15
Глава 2 Четыре всадника CSS
16
Всадник 1 Конфликт селекторов
/* logo.css */
.name {
color: gray;
}
/* header.css */
.name {
color: red;
}
17
БЭМ
window.prefixA = …;
window.prefixB = …;
18
Всадник 2 Глобальный сброс
* {
box-sizing: border-box;
}
19
Всадник 3 Наследуемые свойства
body
.header
​ .logo
line-height: 1.4
line-height: 1.4
line-height: 1.4
20
Агрессивные селекторы
.article p {
margin-bottom: 1em;
}
21
Всадник 4 Медиа-выражения страницы
.logo:container( width <= 100px ) {
.name {
display: none;
}
}
22
Четыре встадника
Конфликт селекторов
Глобальный сброс
Наследуемые свойства
Медиа-выражения страницы
23
Ждать Веб-компонентов?Ждать Веб-компонентов?
24
Глава 3Глава 3Глава 3
Глава 3 Революция
25
PostCSS
26
Задачи
Sass
PostCSS
27
Код
return gulp.src('src/*.scss')
.pipe( sass() )
.pipe( postcss(plugins) )
.pipe( gulp.desc('build/') );
28
Глава 4 Побеждаем глобальный CSS
29
Шаг 1 Чистая комната
gulp.task('css:new', () => {
return gulp.src('src/new/')
.pipe( postcss([
require('autoprefixer')
// other plugins
]) )
.pipe( gulp.dist('build/') )
});
30
Шаг 2 Нарежьте дизайн на блоки
31
Шаг 3 Папка для компонента
logo/
logo.js
logo.css
company.svg
header/
header.js
header.css
js/
logo.js
header.js
css/
logo.css
header.css
images/
company.svg
32
Шаг 4 postcss-modules
postcss([
require('autoprefixer'),
require('postcss-modules')
])
33
Пишите любые селекторы
.name {
color: red;
}
.Logo_name_jbds3 {
color: red;
}
34
Шаблон
var style = require('./logo.css.json');
export const Logo = () => (
<div className={ style.name }>
</div>
);
35
Работает с PHP и Rails
- style = load_json('logo.css.json');
%div{ class: style.name }
36
CSS Modules против БЭМ
1. Стили чище
2. Переносимость между проектами
3. Безопаснее для виджетов
37
Первая победа
Конфликт селекторов
Глобальный сброс
Наследуемые свойства
Медиа-выражения страницы
38
Локальный сброс
h1, h2, …, div {
/* сброс */
}
.header {
/* стили */
}
.logo {
/* стили */
}
.header, .logo {
/* сброс */
}
.header {
/* стили */
}
.logo {
/* стили */
}
39
Локальный сброс
body
.header
​ .logo
line-height: 1.4
line-height: 1
line-height: 1
40
Плюсы локального сброса
1. У каждого — свой ресет
2. Переносимость между проектами
3. Защищает от наследуемых свойств
41
Сброс по W3C
.logo {
all: initial;
}
42
Шаг 5 postcss-autoreset
postcss([
…,
require('postcss-autoreset')({
reset: {
all: 'initial',
boxSizing: 'border-box'
}
})
])
43
Шаг 6 postcss-cssnext
postcss([
require('autoprefixer'),
require('postcss-modules'),
require('postcss-autoreset'),
require('postcss-cssnext')
])
44
Полифил будущего CSS
.logo {
all: initial;
}
.logo {
display: block;
border: none;
padding: 0;
margin: 0;
…
}
45
Ещё две победы
Конфликт селекторов
Глобальный сброс
Наследуемые свойства
Медиа-выражения страницы
46
Шаг 7 cq-prolyfill
<script src="cq-prolyfill.min.js" async>
</script>
postcss([
…,
require('cq-prolyfill/postcss-plugin')
])
47
Медиа-выражения контейнера
.logo:container( width >= 100px ) {
…
}
.logo:container( text-align = right ) {
…
}
.logo:container( background-color lightness > 20% ) {
…
}
48
Полная изоляция
Конфликт селекторов
Глобальный сброс
Наследуемые свойства
Медиа-выражения страницы
49
Глава 5Глава 5Глава 5
Глава 5
ПлюсыПлюсыПлюсы
Плюсы
50
Без вопросов
1. Виджеты на сторонние сайты
2. Компоненты в npm
3. Плагины для браузера
4. Большие команды с кучей проектов
51
Без вопросов
1. Виджеты на сторонние сайты
2. Компоненты в npm
3. Плагины для браузера
4. Большие команды с кучей проектов
52
Проще тестировать
53
Проще обновлять технологии
old/
logo/
new/
header/
54
Глава 6Глава 6Глава 6
Глава 6
СоветыСоветыСоветы
Советы
55
Главное зло
.logo {
&.is-in-header {
width: 100px;
height: 100px;
padding: 10px 0;
}
&.is-in-footer {
…
}
}
56
Совет 1 Пишите размеры в обёртках
<div className={ style.place }>
<Logo>
</div>
.place {
width: 100px;
height: 100px;
padding: 10px 0;
position: relative;
}
.logo {
width: 100%;
height: 100%;
}
57
Совет 2 Вкладывайте друг в друга
<Button icon="remove" /> <Button>
<RemoveIcon>
</Button>
58
Финал
59
Полная изоляция
postcss([
require('autoprefixer'),
// Изоляция селекторов
require('postcss-modules'),
// Локальный сброс
require('postcss-autoreset'),
require('postcss-cssnext'),
// Контейнерные выражения
require('cq-prolyfill/postcss-plugin')
])

More Related Content

PPTX
Антон Турецкий
CodeFest
 
PDF
Денис Иванов
CodeFest
 
PPTX
Денис Иванов
CodeFest
 
PDF
Вячеслав Бахмутов
CodeFest
 
PDF
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Ontico
 
PDF
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ontico
 
PPTX
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Ontico
 
PPTX
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Ontico
 
Антон Турецкий
CodeFest
 
Денис Иванов
CodeFest
 
Денис Иванов
CodeFest
 
Вячеслав Бахмутов
CodeFest
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Ontico
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ontico
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Ontico
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Ontico
 

What's hot (20)

PDF
Архитектура хранения фотографий в Badoo
Badoo Development
 
PDF
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Ontico
 
PDF
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Ontico
 
PDF
Где живут Ваши объявления / Тюрин Михаил (Avito)
Ontico
 
PDF
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
Ontico
 
PDF
Чему мы научились разрабатывая микросервисы?
Vadim Madison
 
PPTX
Docker в работе: взгляд на использование в Badoo через год
Badoo Development
 
PDF
Облако в Badoo год спустя
Yuriy Nasretdinov
 
PDF
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Ontico
 
PPTX
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
Ontico
 
PPTX
Евгений Потапов (Сумма Айти)
Ontico
 
PPT
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Ontico
 
PPTX
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
Ontico
 
PDF
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Ontico
 
PDF
Алексей Фомкин, Практическое применение Web Workers
Aleksey Fomkin
 
PDF
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Ontico
 
PDF
Docker & Puppet: как их скрестить и надо ли вам это?
Anton Turetsky
 
PPTX
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
Ontico
 
PPTX
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Ontico
 
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
Архитектура хранения фотографий в Badoo
Badoo Development
 
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Ontico
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Ontico
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Ontico
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
Ontico
 
Чему мы научились разрабатывая микросервисы?
Vadim Madison
 
Docker в работе: взгляд на использование в Badoo через год
Badoo Development
 
Облако в Badoo год спустя
Yuriy Nasretdinov
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Ontico
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
Ontico
 
Евгений Потапов (Сумма Айти)
Ontico
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Ontico
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
Ontico
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Ontico
 
Алексей Фомкин, Практическое применение Web Workers
Aleksey Fomkin
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Ontico
 
Docker & Puppet: как их скрестить и надо ли вам это?
Anton Turetsky
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
Ontico
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
Ad

Viewers also liked (6)

PDF
Вадим Макеев
CodeFest
 
PPTX
CodeFest 2011. Мерзликин В. — Тенденции рынка мобильных приложений
CodeFest
 
PDF
Thomas Lobinger
CodeFest
 
PDF
Orta Therox
CodeFest
 
PDF
Алексей Федоров
CodeFest
 
PDF
Иван Фролков
CodeFest
 
Вадим Макеев
CodeFest
 
CodeFest 2011. Мерзликин В. — Тенденции рынка мобильных приложений
CodeFest
 
Thomas Lobinger
CodeFest
 
Orta Therox
CodeFest
 
Алексей Федоров
CodeFest
 
Иван Фролков
CodeFest
 
Ad

Similar to Андрей Ситник (20)

PDF
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Тарасов Константин
 
PDF
Жизнь в изоляции
Roman Dvornov
 
PDF
Жизнь в изоляции / Роман Дворнов (Avito)
Ontico
 
PDF
CSS. Практика
Vitebsk Miniq
 
PDF
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
Alexey Ivanov
 
PDF
Css3 для веб дизайнеров
Vgrafike.ru
 
PDF
CSS-менеджмент в 2016
Timophy Chaptykov
 
PDF
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
Dev2Dev
 
PDF
CSSO — минимизируем CSS
Roman Dvornov
 
PDF
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают
ADN Digital Studio
 
PPT
Trening modul2-conf1-tema5
olgaoov
 
PDF
Сергей Сыркин - CSS
Yandex
 
PDF
Фронтенд разработка без боли
Anton Piskunov
 
PDF
Артем Маркушев - HTML & CSS
DataArt
 
PDF
Михаил Трошев — CSS: Систематизация базовых знаний
Yandex
 
PPTX
A вы верите в систематизацию
Irina Levina
 
PDF
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Yandex
 
PDF
J query шевчук
Sergey Pashkov
 
PDF
Css Intro. Vlad Savitsky
Vlad Savitsky
 
PPTX
Методологии верстки
Elizaveta Selivanova
 
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Тарасов Константин
 
Жизнь в изоляции
Roman Dvornov
 
Жизнь в изоляции / Роман Дворнов (Avito)
Ontico
 
CSS. Практика
Vitebsk Miniq
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
Alexey Ivanov
 
Css3 для веб дизайнеров
Vgrafike.ru
 
CSS-менеджмент в 2016
Timophy Chaptykov
 
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
Dev2Dev
 
CSSO — минимизируем CSS
Roman Dvornov
 
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают
ADN Digital Studio
 
Trening modul2-conf1-tema5
olgaoov
 
Сергей Сыркин - CSS
Yandex
 
Фронтенд разработка без боли
Anton Piskunov
 
Артем Маркушев - HTML & CSS
DataArt
 
Михаил Трошев — CSS: Систематизация базовых знаний
Yandex
 
A вы верите в систематизацию
Irina Levina
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Yandex
 
J query шевчук
Sergey Pashkov
 
Css Intro. Vlad Savitsky
Vlad Savitsky
 
Методологии верстки
Elizaveta Selivanova
 

More from CodeFest (20)

PDF
Alexander Graebe
CodeFest
 
PDF
Никита Прокопов
CodeFest
 
PPTX
Денис Баталов
CodeFest
 
PDF
Елена Гальцина
CodeFest
 
PDF
Александр Калашников
CodeFest
 
PDF
Ирина Иванова
CodeFest
 
PDF
Marko Berković
CodeFest
 
PDF
Денис Кортунов
CodeFest
 
PDF
Александр Зимин
CodeFest
 
PDF
Сергей Крапивенский
CodeFest
 
PDF
Сергей Игнатов
CodeFest
 
PDF
Николай Крапивный
CodeFest
 
PDF
Alexander Graebe
CodeFest
 
PDF
Вадим Смирнов
CodeFest
 
PDF
Константин Осипов
CodeFest
 
PDF
Raffaele Rialdi
CodeFest
 
PDF
Максим Пугачев
CodeFest
 
PDF
Rene Groeschke
CodeFest
 
PDF
Иван Бондаренко
CodeFest
 
PDF
Mete Atamel
CodeFest
 
Alexander Graebe
CodeFest
 
Никита Прокопов
CodeFest
 
Денис Баталов
CodeFest
 
Елена Гальцина
CodeFest
 
Александр Калашников
CodeFest
 
Ирина Иванова
CodeFest
 
Marko Berković
CodeFest
 
Денис Кортунов
CodeFest
 
Александр Зимин
CodeFest
 
Сергей Крапивенский
CodeFest
 
Сергей Игнатов
CodeFest
 
Николай Крапивный
CodeFest
 
Alexander Graebe
CodeFest
 
Вадим Смирнов
CodeFest
 
Константин Осипов
CodeFest
 
Raffaele Rialdi
CodeFest
 
Максим Пугачев
CodeFest
 
Rene Groeschke
CodeFest
 
Иван Бондаренко
CodeFest
 
Mete Atamel
CodeFest
 

Андрей Ситник