SlideShare a Scribd company logo
Ваш CSS нас
не устраивает,
мы придумаем
свой
Прудников Роман
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
2009
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Красиво
Решения верстальщиков
● вставить картинку
● вставить картинку
● вставить картинку
● filter
● .htc
Решения opensource'щиков
Решения W3C'щиков
Быстро
Решения верстальщиков
Решения opensource'щиков
Решения W3C'щиков
Удобно
Удобно
ul a { color: #999; }
div { background: #999; }
button { border-color: #999; }
ul { background: #999; }
ul li { color: #888; }
ul li a { color: #777; }
Удобно
Удобно
div {
-webkit-font-feature-settings: “c2sc”;
font-feature-settings: “c2sc”;
font-variant-numeric: lining-nums;
}
--brandGr: #999;
ul a { color: var(--brandGr);}
div { background: var(--brandGr); }
button { border-color: var(--brandGr); }
Решения opensource'щиков
Решения opensource'щиков
ul {
background: #999;
li {
color: #888;
}
}
div {
font-variant-numeric: lining-nums;
}
Решения opensource'щиков
Решения opensource'щиков
@if $you == ‘#555’ {
$I: ‘#666’;
}
Решения opensource'щиков
Решения opensource'щиков
Решения W3C'щиков
Безболезненно расширяемо
Безболезненно расширяемо
main.css
.nav {
color: #999;
}
question.css
.nav {
color: #333;
}
Решения opensource'щиков
Решения W3C'щиков
Предсказуемо безопасно
Решения верстальщиков
ul {
color: grey;
color: rgba(0, 0, 0, .5);
}
Решения верстальщиков
div {
-webkit-font-feature-settings: “c2sc”;
font-feature-settings: “c2sc”;
font-variant-numeric: lining-nums;
}
Решения верстальщиков
if ('opacity' in document.body.style) {
// some code
}
Решения opensource'щиков
Решения W3C'щиков
@media (max-width: 768px) {
ul {
color: grey;
}
}
Решения W3C'щиков
@supports (--foo: green) {
body {
color: green;
}
}
Ну и что?
Как решаем проблемы
● подменяем на похожее
● засахариваем
● отдаём рабочее (fallback)
● проверяем и пишем иначе
● описываем досконально
И то
Как было бы в JS
Предложить
фичу
Написать
полифил/
транспилить
Юзать
фичу
Как отрисовывается страница
Как отрисовывается страница
Как отрисовывается страница
СSS Typed OM
$('.el').style.transform =
`translate(${this.width}px,${this.height + 20}px)`;
СSS Typed OM
$('.el').styleMap
.set('opacity', new CSSNumberValue(0.5));
$('.el').styleMap
.set('height', new CSSSimpleLength(50, 'px'));
СSS Typed OM
$('.el').styleMap
.get('opacity').value; // 1
$('.el').styleMap
.get('height').type; // ‘px’
СSS Typed OM
$('.el').styleMap
.set('height', new CSSCalcLength(‘50vh - 20px’));
СSS Typed OM
$('.el').styleMap
.set('height', new CSSCalcLength({
vh: 50,
px: -20
}));
Потрогать?
https://github.com/css-typed-om/typed-om
Потрогать?
Статус?
CSS Typed OM Level 1
Editor’s Draft, 3 June 2017
Properties and Values API
.aside {
transition: --width 1s ease;
--width: 50px;
width: var(--width);
}
.aside.open {
--width: 250px;
}
registerProperty({
name: '--width',
syntax: '<length>',
inherits: false,
initialValue: '50px'
})
Properties and Values API
Properties and Values API
.aside {
transition: --width 1s ease;
--width: 50px;
width: var(--width);
}
.aside.open {
--width: 250px;
}
Потрогать?
Статус?
CSS Properties and Values API Level 1
Editor’s Draft, 3 June 2017
Composited Scrolling & Animation
DEMO
Composited Scrolling & Animation
window.compositorWorklet.import('worklet.js')
Composited Scrolling & Animation
class Header {
onmessage(e) {
this.initialized = true;
this.scroller = e.data[0];
this.avatar = e.data[1];
this.bar = e.data[2];
};
tick() {/**/}
}
registerCompositorAnimator('head', Header);
Composited Scrolling & Animation
window.compositorWorklet.import('worklet.js')
.then(() => {
var animator = new CompositorAnimator('head');
animator.postMessage([
new CompositorProxy($('window'), ['scrollTop']),
new CompositorProxy($('.avatar'), ['transform']),
new CompositorProxy($('.bar'), ['transform', 'opacity']),
])
})
Composited Scrolling & Animation
Потрогать?
Статус?
Ну вы поняли
registerPaint('circle', class {
static get inputProperties() { return ['--circle-color']; }
paint(ctx, geom, properties) {
const color = properties.get('--circle-color');
ctx.fillStyle = color;
const x = geom.width / 2;
const y = geom.height / 2;
const radius = Math.min(x, y);
ctx.beginPath();
ctx.arc(x, y, radius, 0, 2 * Math.PI, false);
ctx.fill();
}
});
Paint API
.bubble {
--circle-color: blue;
background-image: paint('circle');
}
Paint API
Потрогать?
Ну вы поняли
Статус?
Ну вы поняли
Layout API
Layout API
Layout API
registerLayout('masonry', class {
static get inputProperties() {
return ['width', 'height']
}
static get childrenInputProperties() {
return ['x', 'y', 'position']
}
layout(children, constraintSpace, styleMap, breakToken){
// Layout logic goes here.
}
}
Layout API
body {
display: layout('masonry');
}
Статус?
Ну вы поняли
Потрогать?
Не в этот раз
Самари
We want moar!
● Explainers
● Animator Worklet
● TypedOM Polyfill
● Demystifying CSS
● Houdini Mailing List
● Demos
Прудников Роман
Разработчик интерфейсов
2ГИС
stillerr@ya.ru
vk.com/rayproud
facebook.com/stillerr

More Related Content

PDF
CSS. Практика
PPTX
Moscow js 26 webpack
PPTX
MoscowJS 26 webpack presentation
PPTX
Михаил Черномордиков Ie9
PDF
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
PDF
Оптимизация графики на практике
PDF
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
PDF
Владимир Гриненко "Инструменты фронтенд-разработчика"
CSS. Практика
Moscow js 26 webpack
MoscowJS 26 webpack presentation
Михаил Черномордиков Ie9
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Оптимизация графики на практике
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
Владимир Гриненко "Инструменты фронтенд-разработчика"

Similar to Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС) (20)

PDF
LESS and even more. Anton Shubkin.
PDF
Ангелина Сидорцова "Использование кастомных шрифтов"
PDF
CSS глазами машин
PDF
Регрессионное тестирование верстки
PPT
Customizing Flex Apps
PDF
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
PDF
Cовременный станок верстальщика
PDF
самоучитель по креативному Web дизайну
PPT
Web осень 2012 лекция 10
PDF
Артем Маркушев - HTML & CSS
PPT
Web весна 2013 лекция 10
PDF
Вадим Макишвили "Вёрстка в IntelliJIDEA"
PDF
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
PPT
Кастомизация пользовательских интерфейсов во Flex-приложениях
PDF
Unit-тестирование скриншотами: преодолеваем звуковой барьер
PDF
Документ: от печати до выписок из базы данных. От аппликативного программиров...
PDF
Sergey Chikuyonok Css Animation
PDF
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
PDF
Эволюционный дизайн. Joker Students Day 2016
PDF
Парсим CSS
LESS and even more. Anton Shubkin.
Ангелина Сидорцова "Использование кастомных шрифтов"
CSS глазами машин
Регрессионное тестирование верстки
Customizing Flex Apps
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Cовременный станок верстальщика
самоучитель по креативному Web дизайну
Web осень 2012 лекция 10
Артем Маркушев - HTML & CSS
Web весна 2013 лекция 10
Вадим Макишвили "Вёрстка в IntelliJIDEA"
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Кастомизация пользовательских интерфейсов во Flex-приложениях
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Документ: от печати до выписок из базы данных. От аппликативного программиров...
Sergey Chikuyonok Css Animation
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Эволюционный дизайн. Joker Students Day 2016
Парсим CSS
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ad

Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)