TGViewer
Логово верстальщика Логово верстальщика @webdevlair · 7.96K subscribers
Post #4369 448
⁣Анимация появления без костылей: CSS @starting-style для display: none

Долгое время плавное появление модалок, тултипов или выпадашек с display: none было головной болью. Браузер просто не успевал проиграть анимацию при переключении — элемент уже отображался, а transition не срабатывал. Приходилось городить костыли с setTimeout или requestAnimationFrame. В production это особенно критично для лендингов и кабинетов, где часто встречается всплывашка с плавным появлением.

Как это работает

В CSS появилось решение — @starting-style. Это директива, которая задаёт начальные стили для момента, когда элемент появляется в DOM или display меняется с none на что-то видимое. Элемент висит с display: none. При смене, скажем, на block, браузер сначала применяет стили из @starting-style, а затем переходит к обычным. Если у элемента прописаны transition или @keyframes — анимация проигрывается.

Пример production-кода

.popup {
display: none;
opacity: 0;
transform: scale(0.8);
transition: opacity 0.3s ease, transform 0.3s ease;
}

@starting-style {
.popup {
opacity: 0;
transform: scale(0.8);
}
}

.popup.is-open {
display: block;
opacity: 1;
transform: scale(1);
}


После добавления класса .is-open элемент плавно появляется, а при удалении — скрывается. Где пригодится: модальные окна, тултипы, дропдауны, появление элементов при клике или переключении вкладок.

Типичная ошибка и trade-offs

Если у элемента в обычном состоянии уже прописаны opacity: 0 или transform: scale(0.8), @starting-style может не сработать. Нужно убедиться, что display: none задан явно, иначе браузер проигнорирует директиву. Поддержка: Chrome 117+, Safari 17.2. Firefox пока в разработке. Работает и с transition, и с @keyframes. Можно указывать несколько селекторов внутри @starting-style. Практический совет: тестируй анимацию в Chrome DevTools с ручным переключением display — это помогает отловить сценарии, когда @starting-style не применяется из-за каскада.

Вывод: @starting-style — это инженерный шаг к чистому CSS без JS-обвязки для анимации элементов с display: none, устраняющий визуальную регрессию при монтировании.
  • 👍 1
More from @webdevlair
  1. Sep 28, 2026Post #4646
  2. Sep 27, 2026Бумага и ручка: стартап заставил соискателей писать сопроводительные вручную Стартап Dumb…
  3. Sep 27, 2026Post #4644
  4. Sep 27, 2026Сигналы добрались до React-Redux В React Status #492 — React-Redux 9.4 Alpha притащил опци…
  5. Sep 27, 2026Post #4642
  6. Sep 26, 2026500+ баксов в месяц за ChatGPT? Не, у нас столько не завалялось Запуска пока нет. Но новый…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →