SlideShare a Scribd company logo
1 of 117
Download to read offline
Пользовательские свойства
как основа архитектуры CSS
Павел Ловцевич, LOVATA
Препроцессоры
Популярные возможности
Преимущества переменных
Переменные — основа современного правильно сконструированного проекта.
Карен Менезес,Variables: The Backbone Of CSS Architecture
• Модульность.
• Уменьшение повторяемости.
• Сокращение объема.
• Повышение читаемости.
• Стайлгайд.
“
Переменные.Когда и какие?
Условие
• Значение встречается в коде два и более раз.
• Значение в будущем может изменяться.
Тип
• Измерения (размеры, отступы, радиусы скругления и т.п.).
• Цветовые схемы.
• Типографика.
• Наборы иконок.
• Брейкпойнты.
Переменные в CSS
• 2008 — первая реализация в Safari.
• 2012 — CSS Variables Module Level 1.
• 2013 — CSS Custom Properties for Cascading Variables Module Level 1.
• 2014 — первая реализация по спецификации в Chrome и Firefox.
• 2015 — W3C Candidate Recommendation.
• 2016 — массовое внедрение в браузерах.
Преимущества переменных CSS
• Работают в runtime и доступны для чтения и изменения.
• Существуют в DOM'е и ограничены областью видимости узла.
• Наследуются до последнего потомка узла DOM!
Переменные Пользовательские свойства CSS
Пользователькое свойство
Особая разновидность свойств CSS с
префиксом -- , объявляющим имя
переменной, и заданным значением.
--Variable: value;
Переменная
Функция CSS, связывающая идентификатор --
variable и его значение.
var(--Variable);
V
V
Переменные Пользовательские свойства CSS
Пользователькое свойство
Особая разновидность свойств CSS с
префиксом -- , объявляющим имя
переменной, и заданным значением.
-- ariable: value;
Переменная
Функция CSS, связывающая идентификатор --
variable и его значение.
var(-- ariable);
Поддержка в браузерах
PostCSS-костыль IE/Edge.
Проголосовать за внедрение в Edge
http://bit.ly/css-var-edge
Область видимости
SASS
$variable: value;
CSS
:root {
--variable: value;
}
01.
02.
03.
01.
02.
03.
:root {
}
Область видимости
SASS
$variable: value;
CSS
--variable: value;
01.
02.
03.
01.
02.
03.
html {
}
Область видимости
SASS
$variable: value;
CSS
:root {
--variable: value;
}
Альтернативная запись:
--variable: value;
01.
02.
03.
01.
02.
03.
01.
02.
03.
;!global
Область видимости
SASS
$variable: value;
Глобальная из локальной:
selector {
$variable: value
}
CSS
:root {
--variable: value;
}
Альтернативная запись:
html {
--variable: value;
}
01.
02.
03.
01.
02.
03.
04.
01.
02.
03.
01.
02.
03.
Ограничение области видимости
SASS
selector {
$variable: value;
}
CSS
selector {
--variable: value;
}
А также:
• вложенный селектор;
• @mixin.
А также:
• псевдокласс;
• @media.
01.
02.
03.
01.
02.
03.
Синтаксис
SASS
Объявление:
$variable: value;
Вызов:
selector {
property: $variable;
}
CSS
Объявление:
:root {
--variable: value;
}
Вызов:
selector {
property: var(--variable);
}
01.
02.
03.
01.
02.
03.
01.
02.
03.
01.
02.
03.
$variable: value;
selector {
property: $variable;
}
Голосуем за вариант SASS
SASS
Объявление:
Вызов:
CSS
Объявление:
:root {
--variable: value;
}
Вызов:
selector {
property: var(--variable);
}
01.
02.
03.
01.
02.
03.
01.
02.
03.
01.
02.
03.
:root {
--variable: value;
}
selector {
property: var(--variable);
}
Голосуем за вариант CSS
SASS
Объявление:
$variable: value;
Вызов:
selector {
property: $variable;
}
CSS
Объявление:
Вызов:
01.
02.
03.
01.
02.
03.
01.
02.
03.
01.
02.
03.
Причины выбранного синтаксиса
Если бы мы использовали символ "$" для переменных, то не смогли бы его использовать для
будущих новых вещей, подобных на переменные.
Таб Аткинс,Let's Talk about CSS Variables
На самом деле:
• совместимость с препроцессорами;
• нативные "грамматика" и "пунктуация" CSS.
“
Динамичность
переменных
all-in-one.css
Один большой CSS
HTML
<head>
<link rel="stylesheet" href=" ">
</head>
<body>
<div class="block">…</>
…
</body>
01.
02.
03.
04.
05.
06.
07.
Много мелких CSS
HTML
<head>
<link rel="stylesheet" href="main.css">
<link rel="stylesheet" href="block.css">
…
</head>
<body>
<div class="block">…</>
…
</body>
01.
02.
03.
04.
05.
06.
07.
08.
09.
main.css
Много мелких CSS
HTML
<head>
<link rel="stylesheet" href=" ">
<link rel="stylesheet" href="block.css">
…
</head>
<body>
<div class="block">…</>
…
</body>
01.
02.
03.
04.
05.
06.
07.
08.
09.
block.css
Много мелких CSS
HTML
<head>
<link rel="stylesheet" href="main.css">
<link rel="stylesheet" href=" ">
…
</head>
<body>
<div class="block">…</>
…
</body>
01.
02.
03.
04.
05.
06.
07.
08.
09.
block.css
Много мелких CSS
HTML
<head>
<link rel="stylesheet" href="main.css">
…
</head>
<body>
<link rel="stylesheet" href=" ">
<div class="block">…</>
…
</body>
01.
02.
03.
04.
05.
06.
07.
08.
09.
Блокировка отображения
HTML
<head>
<link
rel="stylesheet"
href="main.css">
</head>
main.css
:root {
--block-display: none;
}
.block {
display: var(--block-display);
}
01.
02.
03.
04.
05.
01.
02.
03.
04.
05.
06.
07.
main.css
Блокировка отображения
HTML
<head>
<link
rel="stylesheet"
href=" ">
</head>
main.css
:root {
--block-display: none;
}
.block {
display: var(--block-display);
}
01.
02.
03.
04.
05.
01.
02.
03.
04.
05.
06.
07.
none
display
Блокировка отображения
HTML
<head>
<link
rel="stylesheet"
href="main.css">
</head>
main.css
:root {
--block-display: ;
}
.block {
: var(--block-display);
}
01.
02.
03.
04.
05.
01.
02.
03.
04.
05.
06.
07.
block.css
Снятие блокировки
HTML
<body>
<link
rel="stylesheet"
href=" ">
<div class="block">
…</div>
</body>
block.css
.block {
--block-display: block;
}
01.
02.
03.
04.
05.
06.
07.
01.
02.
03.
block
Снятие блокировки
HTML
<body>
<link
rel="stylesheet"
href="block.css">
<div class="block">
…</div>
</body>
block.css
.block {
--block-display: ;
}
01.
02.
03.
04.
05.
06.
07.
01.
02.
03.
Переменные
в @media
Переменные в @media
CSS
:root {
--gutter: 1em;
}
.сontainer {
padding: var(--gutter);
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
1em
2em
Переменные в @media
CSS
:root {
--gutter: ;
}
.сontainer {
padding: var(--gutter);
}
@media (min-width: 1200px) {
:root { --gutter: ; }
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
09.
1em
2em
1em
2em
Переменные в @media
CSS
:root {
--gutter: ;
}
.сontainer {
padding: var(--gutter);
}
@media (min-width: 1200px) {
:root { --gutter: ; }
}
CSS глазами браузера
.сontainer {
padding: ;
}
@media (min-width: 1200px) {
.сontainer {
padding: ;
}
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
01.
02.
03.
04.
05.
06.
07.
08.
09.
1em
Переменные в @media (SASS)
SASS
$gutter: 1em;
.сontainer {
padding: $gutter;
}
@media (min-width: 1200px) {
$gutter: 2em;
}
CSS
.сontainer {
padding: ;
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
01.
02.
03.
@media (min-width: 1200px) {
$gutter: 2em;
}
1em
Переменные в @media (SASS)
SASS
$gutter: 1em;
.сontainer {
padding: $gutter;
}
CSS
.сontainer {
padding: ;
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
01.
02.
03.
Наследование
переменных
button
Наследование переменных
CSS
:root {
--main-color: black;
}
{
background:
var(--main-color);
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
black
white
black
white
Наследование переменных
CSS
:root {
--main-color: ;
}
button {
background:
var(--main-color);
}
.black-box {
--main-color: ;
}
CSS глазами браузера
button {
background: ;
}
.black-box button {
background: ;
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
01.
02.
03.
04.
05.
06.
07.
Каскад?
Это шутка?
Принцип открытости/закрытости
Программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения,
но закрыты для изменения.
Плохо
.button {
background: black;
}
.header .button {
background: white;
}
Хорошо
.button {
background: var(--main-color, black);
}
.header {
--main-color: white;
}
01.
02.
03.
04.
05.
06.
07.
01.
02.
03.
04.
05.
06.
07.
black
Принцип открытости/закрытости
Программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения,
но закрыты для изменения.
Плохо
.button {
background: black;
}
.header .button {
background: white;
}
Хорошо
.button {
background: var(--main-color, );
}
.header {
--main-color: white;
}
01.
02.
03.
04.
05.
06.
07.
01.
02.
03.
04.
05.
06.
07.
.header {
--main-color: white;
}
Принцип открытости/закрытости
Программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения,
но закрыты для изменения.
Плохо
.button {
background: black;
}
.header .button {
background: white;
}
Хорошо
.button {
background: var(--main-color, black);
}
01.
02.
03.
04.
05.
06.
07.
01.
02.
03.
04.
05.
06.
07.
Настройки
по умолчанию
Локальный fallback
CSS
:root {
--main-color: initial;
}
button {
background: var(--main-color,
green);
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
initial
Локальный fallback
CSS
:root {
--main-color: ;
}
button {
background: var(--main-color,
green);
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
green
green
Локальный fallback
CSS
:root {
--main-color: initial;
}
button {
background: var(--main-color,
);
}
CSS глазами браузера
button {
background: ;
}
01.
02.
03.
04.
05.
06.
07.
08.
01.
02.
03.
red red
Локальный fallback
CSS
:root {
--main-color: ;
}
button {
background: var(--main-color,
green);
}
CSS глазами браузера
button {
background: ;
}
01.
02.
03.
04.
05.
06.
07.
08.
01.
02.
03.
Глобальный fallback
CSS
:root {
--main-color:
var(--main-color-custom,
green);
--main-color-custom: initial;
}
button {
background: var(--main-color);
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
--main-color
Глобальный fallback
CSS
:root {
:
var(--main-color-custom,
green);
--main-color-custom: initial;
}
button {
background: var(--main-color);
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
--main-color-custom
Глобальный fallback
CSS
:root {
--main-color:
var(--main-color-custom,
green);
: initial;
}
button {
background: var(--main-color);
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
--main-color-custom
--main-color-custom
Глобальный fallback
CSS
:root {
--main-color:
var( ,
green);
: initial;
}
button {
background: var(--main-color);
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
green
Глобальный fallback
CSS
:root {
--main-color:
var(--main-color-custom,
);
--main-color-custom: initial;
}
button {
background: var(--main-color);
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
green
green
Глобальный fallback
CSS
:root {
--main-color:
var(--main-color-custom,
);
--main-color-custom: initial;
}
button {
background: var(--main-color);
}
CSS глазами браузера
button {
background: ;
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
01.
02.
03.
red
red
Глобальный fallback
CSS
:root {
--main-color:
var(--main-color-custom,
green);
--main-color-custom: ;
}
button {
background: var(--main-color);
}
CSS глазами браузера
button {
background: ;
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
01.
02.
03.
Fallback в SASS
SASS
$color: null;
$color: green !default;
button {
background: $color;
}
CSS
01.
02.
03.
04.
05.
06.
$color
$color
Fallback в SASS
SASS
: null;
: green !default;
button {
background: $color;
}
CSS
01.
02.
03.
04.
05.
06.
null
Fallback в SASS
SASS
$color: ;
$color: green !default;
button {
background: $color;
}
CSS
01.
02.
03.
04.
05.
06.
!default
Fallback в SASS
SASS
$color: null;
$color: green ;
button {
background: $color;
}
CSS
01.
02.
03.
04.
05.
06.
green green
Fallback в SASS
SASS
$color: null;
$color: !default;
button {
background: $color;
}
CSS
button {
background: ;
}
01.
02.
03.
04.
05.
06.
01.
02.
03.
red
red
Fallback в SASS
SASS
$color: ;
$color: green !default;
button {
background: $color;
}
CSS
button {
background: ;
}
01.
02.
03.
04.
05.
06.
01.
02.
03.
I18n
“aнглийские
двойные”
«французские
ёлочки»
I18n
HTML
<html lang="ru">
<body>
<q>Чебурашка</q>
</body>
</html>
CSS
01.
02.
03.
04.
05.
lang
I18n
HTML
<html ="ru">
<body>
<q>Чебурашка</q>
</body>
</html>
CSS
01.
02.
03.
04.
05.
« »
“ ”
I18n
HTML
<html lang="ru">
<body>
<q>Чебурашка</q>
</body>
</html>
CSS
q {
quotes: var(--quotes-l)
var(--quotes-r);
}
:root:lang(ru) {
--quotes-l: " "; --quotes-r: " ";
}
:root:lang(en) {
--quotes-l: " "; --quotes-r: " ";
}
01.
02.
03.
04.
05.
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
ru
« »
« »
I18n
HTML
<html lang=" ">
<body>
<q>Чебурашка</q>
</body>
</html>
Результат
Чебурашка
CSS
q {
quotes: var(--quotes-l)
var(--quotes-r);
}
:root:lang(ru) {
--quotes-l: " "; --quotes-r: " ";
}
:root:lang(en) {
--quotes-l: "“"; --quotes-r: "”";
}
01.
02.
03.
04.
05.
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
en
“ ”
“ ”
I18n
HTML
<html lang=" ">
<body>
<q>Чебурашка</q>
</body>
</html>
Результат
Чебурашка
CSS
q {
quotes: var(--quotes-l)
var(--quotes-r);
}
:root:lang(ru) {
--quotes-l: "«"; --quotes-r: "»";
}
:root:lang(en) {
--quotes-l: " "; --quotes-r: " ";
}
01.
02.
03.
04.
05.
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
Вычисляемые
значения
Вычисляемые значения
CSS
:root {
--line-height: 1.5;
}
p {
margin-bottom:
var(--line-height)rem;
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
margin-bottom
Вычисляемые значения
CSS
:root {
--line-height: 1.5;
}
p {
:
var(--line-height)rem;
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
--line-height: 1.5;
Вычисляемые значения
CSS
:root {
}
p {
margin-bottom:
var(--line-height)rem;
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
rem
1.5 rem
Вычисляемые значения
CSS
:root {
--line-height: 1.5;
}
p {
margin-bottom:
var(--line-height) ;
}
CSS глазами браузера
p {
margin-bottom: ;
}
01.
02.
03.
04.
05.
06.
07.
08.
01.
02.
03.
Вычисляемые значения
CSS
:root {
--line-height: 1.5;
}
p {
margin-bottom:
calc(var(--line-height) *
1rem);
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
09.
var(--line-height)
Вычисляемые значения
CSS
:root {
--line-height: 1.5;
}
p {
margin-bottom:
calc( *
1rem);
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
09.
1rem
Вычисляемые значения
CSS
:root {
--line-height: 1.5;
}
p {
margin-bottom:
calc(var(--line-height) *
);
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
08.
09.
1rem
1rem
Вычисляемые значения
CSS
:root {
--line-height: 1.5;
}
p {
margin-bottom:
calc(var(--line-height) *
);
}
CSS глазами браузера
p {
margin-bottom: ;
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
01.
02.
03.
Цветовые
схемы
и SVG
Цветовые схемы и SVG
SVG
<svg height="100" width="100">
<circle cx="50" cy="50"
r="50"
fill="red" />
</svg>
01.
02.
03.
04.
05.
red
Цветовые схемы и SVG
SVG
<svg height="100" width="100">
<circle cx="50" cy="50"
r="50"
fill=" " />
</svg>
01.
02.
03.
04.
05.
--main-color
--main-color
Цветовые схемы и SVG
SVG
<svg height="100" width="100">
<circle cx="50" cy="50"
r="50"
fill="var( )" />
</svg>
CSS
:root {
:
var(--main-color-custom, green);
--main-color-custom: red;
}
01.
02.
03.
04.
05.
01.
02.
03.
04.
05.
green
Цветовые схемы и SVG
SVG
<svg height="100" width="100">
<circle cx="50" cy="50"
r="50"
fill="var(--main-color)" />
</svg>
CSS
:root {
--main-color:
var(--main-color-custom, );
--main-color-custom: red;
}
01.
02.
03.
04.
05.
01.
02.
03.
04.
05.
--main-color-custom
Цветовые схемы и SVG
SVG
<svg height="100" width="100">
<circle cx="50" cy="50"
r="50"
fill="var(--main-color)" />
</svg>
CSS
:root {
--main-color:
var(--main-color-custom, green);
: red;
}
01.
02.
03.
04.
05.
01.
02.
03.
04.
05.
red red
Цветовые схемы и SVG
SVG глазами браузера
<svg height="100" width="100">
<circle cx="50" cy="50"
r="50"
fill=" " />
</svg>
CSS
:root {
--main-color:
var(--main-color-custom, green);
--main-color-custom: ;
}
01.
02.
03.
04.
05.
01.
02.
03.
04.
05.
JavaScript
API CSSVariablesMap
el.style.var.get('variable');
el.style.var.has('variable');
el.style.var.set('variable', 'value');
el.style.var.delete('variable');
01.
02.
03.
04.
get
has
set
delete
API CSSVariablesMap
el.style.var. ('variable');
el.style.var. ('variable');
el.style.var. ('variable', 'value');
el.style.var. ('variable');
01.
02.
03.
04.
API CSSVariablesMap
el.style.var.get('variable');
el.style.var.has('variable');
el.style.var.set('variable', 'value');
el.style.var.delete('variable');
API удалено из стандарта в поисках лучшего решения.
01.
02.
03.
04.
getPropertyValue
setProperty
removeProperty
API CSSStyleDeclaration
getComputedStyle(document.documentElement). ('--variable');
element.style. ('--variable', 'value');
element.style. ('--variable');
01.
02.
03.
'var(--anotherVariable, "fallback")
API CSSStyleDeclaration
getComputedStyle(document.documentElement).getPropertyValue('--variable');
element.style.setProperty('--variable', 'value');
element.style.removeProperty('--variable');
И даже так:
element.style.setProperty('--variable', ');
01.
02.
03.
Проверка
поддержки
Проверка поддержки в CSS
CSS
@supports (--a: 0) {
/* стили с поддержкой переменных */
}
@supports not (--a: 0) {
/* стили без поддержки переменных */
}
01.
02.
03.
04.
05.
06.
07.
@supports (--a: 0) {
}
Проверка поддержки в CSS
CSS
/* стили с поддержкой переменных */
@supports not (--a: 0) {
/* стили без поддержки переменных */
}
01.
02.
03.
04.
05.
06.
07.
@supports not (--a: 0) {
}
Проверка поддержки в CSS
CSS
@supports (--a: 0) {
/* стили с поддержкой переменных */
}
/* стили без поддержки переменных */
01.
02.
03.
04.
05.
06.
07.
Проверка поддержки в CSS
CSS
@supports (--a: 0) {
/* стили с поддержкой переменных */
}
@supports not (--a: 0) {
/* стили без поддержки переменных */
}
Не работает в IE!
01.
02.
03.
04.
05.
06.
07.
Проверка поддержки в JS
CSS
if (window.CSS && window.CSS.supports && window.CSS.supports('--a', 0)) {
// сценарии с поддержкой переменных
} else {
// сценарии бех поддержки переменных
}
01.
02.
03.
04.
05.
Ограничения переменных CSS
• нельзя использовать в:
• в именах обычных свойств CSS: var(--side): 10px ;
• в значениях медиа-запросов: @media screen and (min-width: var(--desktop-
breakpoint) { } ;
• в подстановке URL: url(var(--image-url)) ;
• будьте осторожны с вычислениями calc() :
• со сложными вычислениями в принципе;
• в Chrome с умножением/делением дробных значений;
• в Firefox с вычислениями внутри функций rgba() .
• нельзя одномоментно cбрасывать значения всех переменных: --: initial .
Таб Аткинс
Работает над:
• CSS Nesting Module Level 3
• CSS @apply Rule
• CSS When/Else Rules
@mixin
@apply
@apply
CSS
:root {
--clearfix: {
display: table;
clear: both;
content: '';
}
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
:root {
}
@apply
CSS
--clearfix: {
display: table;
clear: both;
content: '';
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
--clearfix
@apply
CSS
:root {
: {
display: table;
clear: both;
content: '';
}
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
display: table;
clear: both;
content: '';
@apply
CSS
:root {
--clearfix: {
}
}
CSS глазами браузера
01.
02.
03.
04.
05.
06.
07.
@apply --clearfix;
display: table;
clear: both;
content: '';
@apply
CSS
:root {
--clearfix: {
display: table;
clear: both;
content: '';
}
}
.box:after {
}
CSS глазами браузера
.box:after {
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
01.
02.
03.
04.
05.
chrome://flags
@custom-selector
@custom-selector
CSS
article h1 + p,
article h2 + p,
article h3 + p,
article h4 + p,
article h5 + p,
article h6 + p {
margin-top: 0;
}
CSS
@custom-selector :--heading {
expansion: h1, h2, h3,
h4, h5, h6;
}
01.
02.
03.
04.
05.
06.
07.
08.
01.
02.
03.
04.
@custom-selector
@custom-selector
CSS
article h1 + p,
article h2 + p,
article h3 + p,
article h4 + p,
article h5 + p,
article h6 + p {
margin-top: 0;
}
CSS
:--heading {
expansion: h1, h2, h3,
h4, h5, h6;
}
01.
02.
03.
04.
05.
06.
07.
08.
01.
02.
03.
04.
:--heading
@custom-selector
CSS
article h1 + p,
article h2 + p,
article h3 + p,
article h4 + p,
article h5 + p,
article h6 + p {
margin-top: 0;
}
CSS
@custom-selector {
expansion: h1, h2, h3,
h4, h5, h6;
}
01.
02.
03.
04.
05.
06.
07.
08.
01.
02.
03.
04.
expansion: h1, h2, h3,
h4, h5, h6;
@custom-selector
CSS
article h1 + p,
article h2 + p,
article h3 + p,
article h4 + p,
article h5 + p,
article h6 + p {
margin-top: 0;
}
CSS
@custom-selector :--heading {
}
01.
02.
03.
04.
05.
06.
07.
08.
01.
02.
03.
04.
:--heading
@custom-selector
CSS
article h1 + p,
article h2 + p,
article h3 + p,
article h4 + p,
article h5 + p,
article h6 + p {
margin-top: 0;
}
CSS
@custom-selector :--heading {
expansion: h1, h2, h3,
h4, h5, h6;
}
article + p {
margin-top: 0;
}
01.
02.
03.
04.
05.
06.
07.
08.
01.
02.
03.
04.
05.
06.
07.
08.
@custom-selector
CSS
article h1 + p,
article h2 + p,
article h3 + p,
article h4 + p,
article h5 + p,
article h6 + p {
margin-top: 0;
}
CSS
@custom-selector :--heading {
expansion: h1, h2, h3,
h4, h5, h6;
}
article :--heading + p {
margin-top: 0;
}
Полифил PostCSS Custom Selectors.
01.
02.
03.
04.
05.
06.
07.
08.
01.
02.
03.
04.
05.
06.
07.
08.
Подытоживая
• Новые способы решения старых задач.
• Решение невозможных для препроцессоров задач.
• Расширение компонентов через наследование.
• Широкая поддержка в браузерах.
• Простой нативный способ взаимодействия с JS, SVG и т.п.
• Начало конца эры препроцессоров :-P
Спасибо за внимание! Вопросы?
Павел Ловцевич
CTO @ LOVATA
@zigzag_mcquack
p.lovtsevich@lovata.com
Не забудьте проголосовать!
http://bit.ly/css-var-edge

More Related Content

Viewers also liked

Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)Ontico
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Ontico
 
Фреймворки: недалёкое прошлое и ближайшее будущее
Фреймворки: недалёкое прошлое и ближайшее будущееФреймворки: недалёкое прошлое и ближайшее будущее
Фреймворки: недалёкое прошлое и ближайшее будущееYandex
 
Good front end - bad front-end (Vladimir Gutorov)
Good front end -  bad  front-end (Vladimir Gutorov)Good front end -  bad  front-end (Vladimir Gutorov)
Good front end - bad front-end (Vladimir Gutorov)LumoSpark
 
Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков
 Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков
Встреча "Front-end: на старт, внимание, разработка!", Сергей ПузанковGoIT
 
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"Yandex
 
AB-тестирование: на что следует обратить внимание / Артур Маликов (Яндекс)
AB-тестирование: на что следует обратить внимание / Артур Маликов (Яндекс)AB-тестирование: на что следует обратить внимание / Артур Маликов (Яндекс)
AB-тестирование: на что следует обратить внимание / Артур Маликов (Яндекс)Ontico
 
Лучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотитеЛучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотитеCodeFest
 
Построение моделей на примере продаж рекламы / Алексей Праслов
Построение моделей на примере продаж рекламы / Алексей ПрасловПостроение моделей на примере продаж рекламы / Алексей Праслов
Построение моделей на примере продаж рекламы / Алексей ПрасловOntico
 
«Путь от инди-разработчика до гейм-дизайнера в студии»
«Путь от инди-разработчика до гейм-дизайнера в студии»«Путь от инди-разработчика до гейм-дизайнера в студии»
«Путь от инди-разработчика до гейм-дизайнера в студии»Stfalcon Meetups
 
Zone to Win – организация в борьбе за лучшие кадры в эпоху разрушительных инн...
Zone to Win – организация в борьбе за лучшие кадры в эпоху разрушительных инн...Zone to Win – организация в борьбе за лучшие кадры в эпоху разрушительных инн...
Zone to Win – организация в борьбе за лучшие кадры в эпоху разрушительных инн...Ontico
 
LESS, SASS, HAML: 4 буквы, изменившие frontend development
LESS, SASS, HAML: 4 буквы, изменившие frontend developmentLESS, SASS, HAML: 4 буквы, изменившие frontend development
LESS, SASS, HAML: 4 буквы, изменившие frontend developmentKonstantin Kudryashov
 
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...Ontico
 
Жизнь HTML в 2ГИС под iOS / Роман Янке (2гис)
Жизнь HTML в 2ГИС под iOS / Роман Янке (2гис)Жизнь HTML в 2ГИС под iOS / Роман Янке (2гис)
Жизнь HTML в 2ГИС под iOS / Роман Янке (2гис)Ontico
 
Лоер баттл. Учимся побеждать в судах / Николай Зайченко (Nevsky IP Law)
Лоер баттл. Учимся побеждать в судах / Николай Зайченко (Nevsky IP Law)Лоер баттл. Учимся побеждать в судах / Николай Зайченко (Nevsky IP Law)
Лоер баттл. Учимся побеждать в судах / Николай Зайченко (Nevsky IP Law)Ontico
 
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...Ontico
 
Нужно ли внедрять DevOps. Как добиться чего-то от эксплуатации / Андрей Шорин...
Нужно ли внедрять DevOps. Как добиться чего-то от эксплуатации / Андрей Шорин...Нужно ли внедрять DevOps. Как добиться чего-то от эксплуатации / Андрей Шорин...
Нужно ли внедрять DevOps. Как добиться чего-то от эксплуатации / Андрей Шорин...Ontico
 
Agile мёртв (!|?) / Александр Сидоров (Яндекс)
Agile мёртв (!|?) / Александр Сидоров (Яндекс)Agile мёртв (!|?) / Александр Сидоров (Яндекс)
Agile мёртв (!|?) / Александр Сидоров (Яндекс)Ontico
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiSoftengi
 

Viewers also liked (20)

Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
Фреймворки: недалёкое прошлое и ближайшее будущее
Фреймворки: недалёкое прошлое и ближайшее будущееФреймворки: недалёкое прошлое и ближайшее будущее
Фреймворки: недалёкое прошлое и ближайшее будущее
 
Good front end - bad front-end (Vladimir Gutorov)
Good front end -  bad  front-end (Vladimir Gutorov)Good front end -  bad  front-end (Vladimir Gutorov)
Good front end - bad front-end (Vladimir Gutorov)
 
Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков
 Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков
Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков
 
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"
 
js tools
js toolsjs tools
js tools
 
AB-тестирование: на что следует обратить внимание / Артур Маликов (Яндекс)
AB-тестирование: на что следует обратить внимание / Артур Маликов (Яндекс)AB-тестирование: на что следует обратить внимание / Артур Маликов (Яндекс)
AB-тестирование: на что следует обратить внимание / Артур Маликов (Яндекс)
 
Лучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотитеЛучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотите
 
Построение моделей на примере продаж рекламы / Алексей Праслов
Построение моделей на примере продаж рекламы / Алексей ПрасловПостроение моделей на примере продаж рекламы / Алексей Праслов
Построение моделей на примере продаж рекламы / Алексей Праслов
 
«Путь от инди-разработчика до гейм-дизайнера в студии»
«Путь от инди-разработчика до гейм-дизайнера в студии»«Путь от инди-разработчика до гейм-дизайнера в студии»
«Путь от инди-разработчика до гейм-дизайнера в студии»
 
Zone to Win – организация в борьбе за лучшие кадры в эпоху разрушительных инн...
Zone to Win – организация в борьбе за лучшие кадры в эпоху разрушительных инн...Zone to Win – организация в борьбе за лучшие кадры в эпоху разрушительных инн...
Zone to Win – организация в борьбе за лучшие кадры в эпоху разрушительных инн...
 
LESS, SASS, HAML: 4 буквы, изменившие frontend development
LESS, SASS, HAML: 4 буквы, изменившие frontend developmentLESS, SASS, HAML: 4 буквы, изменившие frontend development
LESS, SASS, HAML: 4 буквы, изменившие frontend development
 
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...
 
Жизнь HTML в 2ГИС под iOS / Роман Янке (2гис)
Жизнь HTML в 2ГИС под iOS / Роман Янке (2гис)Жизнь HTML в 2ГИС под iOS / Роман Янке (2гис)
Жизнь HTML в 2ГИС под iOS / Роман Янке (2гис)
 
Лоер баттл. Учимся побеждать в судах / Николай Зайченко (Nevsky IP Law)
Лоер баттл. Учимся побеждать в судах / Николай Зайченко (Nevsky IP Law)Лоер баттл. Учимся побеждать в судах / Николай Зайченко (Nevsky IP Law)
Лоер баттл. Учимся побеждать в судах / Николай Зайченко (Nevsky IP Law)
 
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
 
Нужно ли внедрять DevOps. Как добиться чего-то от эксплуатации / Андрей Шорин...
Нужно ли внедрять DevOps. Как добиться чего-то от эксплуатации / Андрей Шорин...Нужно ли внедрять DevOps. Как добиться чего-то от эксплуатации / Андрей Шорин...
Нужно ли внедрять DevOps. Как добиться чего-то от эксплуатации / Андрей Шорин...
 
Agile мёртв (!|?) / Александр Сидоров (Яндекс)
Agile мёртв (!|?) / Александр Сидоров (Яндекс)Agile мёртв (!|?) / Александр Сидоров (Яндекс)
Agile мёртв (!|?) / Александр Сидоров (Яндекс)
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
 

Similar to Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)

CSS. Практика
CSS. ПрактикаCSS. Практика
CSS. ПрактикаVitebsk Miniq
 
Андрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass frameworkАндрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass frameworkAlbina Tiupa
 
Артем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSSАртем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSSDataArt
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машинRoman Dvornov
 
Препроцессор LESS. Компилятор Winless
Препроцессор LESS. Компилятор WinlessПрепроцессор LESS. Компилятор Winless
Препроцессор LESS. Компилятор WinlessIT Academy Project EU
 
Спецкурс 2014, занятие 9 (2 часть). Code conventions and best practices
Спецкурс 2014, занятие 9 (2 часть). Code conventions and best practicesСпецкурс 2014, занятие 9 (2 часть). Code conventions and best practices
Спецкурс 2014, занятие 9 (2 часть). Code conventions and best practices7bits
 
Ускорение frontend-разработки с помощью Haml, Sass, Compass
Ускорение frontend-разработки с помощью Haml, Sass, CompassУскорение frontend-разработки с помощью Haml, Sass, Compass
Ускорение frontend-разработки с помощью Haml, Sass, CompassAndrey Sitnik
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....rit2011
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....rit2011
 
Артем Маркушев — HTML и CSS по кирпичикам. Детали.
Артем Маркушев — HTML и CSS по кирпичикам. Детали.Артем Маркушев — HTML и CSS по кирпичикам. Детали.
Артем Маркушев — HTML и CSS по кирпичикам. Детали.DataArt
 
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)Ontico
 
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтендаСтажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда7bits
 
Создание веб-сайта. Курс молодого бойца
Создание веб-сайта. Курс молодого бойцаСоздание веб-сайта. Курс молодого бойца
Создание веб-сайта. Курс молодого бойцаAnton Cherepov
 
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyleЗачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyleYandex
 
Основы CSS
Основы CSSОсновы CSS
Основы CSSsneemb
 
010 презентация less и адаптивный дизайн
010 презентация   less и адаптивный дизайн010 презентация   less и адаптивный дизайн
010 презентация less и адаптивный дизайнsivorka
 
LESS and even more. Anton Shubkin.
LESS and even more. Anton Shubkin.LESS and even more. Anton Shubkin.
LESS and even more. Anton Shubkin.ADCI Solutions
 
МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7Dima Dzuba
 

Similar to Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA) (20)

CSS. Практика
CSS. ПрактикаCSS. Практика
CSS. Практика
 
Андрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass frameworkАндрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass framework
 
Артем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSSАртем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSS
 
SASS & LESS
SASS & LESSSASS & LESS
SASS & LESS
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
Препроцессор LESS. Компилятор Winless
Препроцессор LESS. Компилятор WinlessПрепроцессор LESS. Компилятор Winless
Препроцессор LESS. Компилятор Winless
 
Спецкурс 2014, занятие 9 (2 часть). Code conventions and best practices
Спецкурс 2014, занятие 9 (2 часть). Code conventions and best practicesСпецкурс 2014, занятие 9 (2 часть). Code conventions and best practices
Спецкурс 2014, занятие 9 (2 часть). Code conventions and best practices
 
Ускорение frontend-разработки с помощью Haml, Sass, Compass
Ускорение frontend-разработки с помощью Haml, Sass, CompassУскорение frontend-разработки с помощью Haml, Sass, Compass
Ускорение frontend-разработки с помощью Haml, Sass, Compass
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
 
Артем Маркушев — HTML и CSS по кирпичикам. Детали.
Артем Маркушев — HTML и CSS по кирпичикам. Детали.Артем Маркушев — HTML и CSS по кирпичикам. Детали.
Артем Маркушев — HTML и CSS по кирпичикам. Детали.
 
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
 
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтендаСтажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
 
Создание веб-сайта. Курс молодого бойца
Создание веб-сайта. Курс молодого бойцаСоздание веб-сайта. Курс молодого бойца
Создание веб-сайта. Курс молодого бойца
 
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyleЗачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
 
Основы CSS
Основы CSSОсновы CSS
Основы CSS
 
010 презентация less и адаптивный дизайн
010 презентация   less и адаптивный дизайн010 презентация   less и адаптивный дизайн
010 презентация less и адаптивный дизайн
 
LESS and even more. Anton Shubkin.
LESS and even more. Anton Shubkin.LESS and even more. Anton Shubkin.
LESS and even more. Anton Shubkin.
 
МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7
 

More from Ontico

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

More from Ontico (20)

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

Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)