Кратко
СкопированоДиректива @starting
позволяет задать начальные стили для элемента в момент его появления на странице.
Пример
Скопировано.element { background-color: tomato;}@starting-style { .element { background-color: orange; }}
.element { background-color: tomato; } @starting-style { .element { background-color: orange; } }
Как понять
СкопированоПри верстке сайтов бывает нужно привлечь внимание пользователя к появлению некоторых элементов на странице. Например, плавно сменить цвет фона блока в момент загрузки сайта. Или сделать открытие диалога плавным и аккуратным. То есть нам необходимо осуществить переход из начального состояния элемента в основное. При этом сделать это нужно один раз и именно в момент появления элемента на экране.
Чтобы сообщить браузеру, какие должны быть стили у элемента в его начальном состоянии, используется директива @starting
.
Как пишется
СкопированоВ общем виде синтаксис выглядит так:
.element { /* Стили для основного состояния элемента. Будут применены после появления элемента на странице. */}@starting-style { .element { /* Стили для начального состояния элемента. Будут применены в момент появления элемента на странице. */ }}
.element { /* Стили для основного состояния элемента. Будут применены после появления элемента на странице. */ } @starting-style { .element { /* Стили для начального состояния элемента. Будут применены в момент появления элемента на странице. */ } }
Например:
.promo-block { opacity: 1;}@starting-style { .promo-block { opacity: 0; }}
.promo-block { opacity: 1; } @starting-style { .promo-block { opacity: 0; } }
В момент загрузки страницы .promo
будет не виден, так как в начальном состоянии opacity
равен нулю. После загрузки страницы применятся стили из основного состояния: opacity
будет равен единице и .promo
отобразится на экране.
Использование
Скопировано@starting
классно подходит для добавления анимации на открытие диалога или поповера.
Например, с помощью @starting
мы можем сделать появление диалога более плавным:
/* стили для открытого диалога */dialog { opacity: 1; scale: 1; transition: opacity 0.4s ease-in, scale 0.4s ease-in, display 0.4s ease-in allow-discrete;}/* стили для открывающегося диалога */@starting-style { dialog { opacity: 0; scale: 1.1; }}/* стили для закрывающегося диалога */dialog:not([open]) { opacity: 0; scale: 0.8;}
/* стили для открытого диалога */ dialog { opacity: 1; scale: 1; transition: opacity 0.4s ease-in, scale 0.4s ease-in, display 0.4s ease-in allow-discrete; } /* стили для открывающегося диалога */ @starting-style { dialog { opacity: 0; scale: 1.1; } } /* стили для закрывающегося диалога */ dialog:not([open]) { opacity: 0; scale: 0.8; }
Такой же подход можно применить и для анимации поповера:
[popover] { transition: opacity 0.4s ease-in, scale 0.4s ease-in, translate 0.4s ease-in, display 0.4s ease-in allow-discrete;}/* стили для открытого поповера */[popover]:popover-open { opacity: 1; scale: 1; translate: 0;}/* стили для открывающегося поповера */@starting-style { [popover]:popover-open { opacity: 0; scale: 0.5; translate: 0 70px; }}/* стили для закрывающегося поповера */[popover]:not(:popover-open) { opacity: 0; scale: 0.5; translate: 0 50px;}
[popover] { transition: opacity 0.4s ease-in, scale 0.4s ease-in, translate 0.4s ease-in, display 0.4s ease-in allow-discrete; } /* стили для открытого поповера */ [popover]:popover-open { opacity: 1; scale: 1; translate: 0; } /* стили для открывающегося поповера */ @starting-style { [popover]:popover-open { opacity: 0; scale: 0.5; translate: 0 70px; } } /* стили для закрывающегося поповера */ [popover]:not(:popover-open) { opacity: 0; scale: 0.5; translate: 0 50px; }
Подсказки
Скопировано💡 CSS-правила внутри @starting
не вводят нового порядка в каскад стилей. Это означает, что стили внутри @starting
не обязательно будут «важней» стилей, описанных снаружи. Чтобы гарантировать, что стили начального состояния не будут перезаписаны стилями основного состояния, помещайте @starting
после объявлений основных стилей элемента.