Одно свойство, два цвета, ноль медиавыражений —
Раньше для поддержки светлой и тёмной темы приходилось дублировать стили через
В статье разбираем, как подключить функцию (без
🎁 Читать статью
light-dark() решает переключение темы в одну строку.Раньше для поддержки светлой и тёмной темы приходилось дублировать стили через
@media (prefers-color-scheme) и заводить отдельную переменную под каждый цвет. Функция light-dark() принимает два значения: первое для светлой темы, второе для тёмной. Браузер подставляет нужное сам.В статье разбираем, как подключить функцию (без
color-scheme: light dark она не заработает), где применять и какие браузеры пока остаются за бортом. #css #baselinePlease open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8❤3🔥1
Контейнерные запросы теперь умеют проверять не только размер, но и значения CSS-свойств — например, цвет фона.
Конструкция
В статье разбираем, как устроен этот механизм, чем он отличается от привычных запросов по размеру и где у него пока границы. #css #tools
🎁 Читать статью
Конструкция
style() в директиве @container позволяет менять оформление дочерних элементов в зависимости от вычисленных свойств контейнера. При этом container-type: style задан по умолчанию — специально объявлять его не нужно. Выражения от размеров и стилей можно комбинировать в одном условии.В статье разбираем, как устроен этот механизм, чем он отличается от привычных запросов по размеру и где у него пока границы. #css #tools
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥3 2⚡1
Одни и те же стили для
Список селекторов через запятую позволяет записать один блок стилей вместо четырёх. В статье разбираем, где это удобно: сброс отступов, общие стили для кнопок и ссылок, единое оформление заголовков. И объясняем, когда вместо группировки лучше использовать классы. #css #html
🎁 Читать статью
h1, h2, p и li — и для каждого отдельное правило? CSS так можно не мучить.Список селекторов через запятую позволяет записать один блок стилей вместо четырёх. В статье разбираем, где это удобно: сброс отступов, общие стили для кнопок и ссылок, единое оформление заголовков. И объясняем, когда вместо группировки лучше использовать классы. #css #html
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3❤🔥3🔥2
Параллакс, прогресс-бар чтения, появление элементов при прокрутке — раньше для всего этого нужен был JavaScript и обработка события
CSS Scroll-Driven Animations меняют подход: одно свойство
🚀 Читать статью
scroll. Код получался хрупким, а анимации дёргались на каждом рендере.CSS Scroll-Driven Animations меняют подход: одно свойство
animation-timeline: scroll() привязывает обычные @keyframes к позиции скролла. Без JS, без библиотек, с рендерингом вне основного потока. В статье разбираем два типа таймлайнов — scroll() и view() — и показываем, как привязать анимацию к странице, контейнеру или видимости элемента. #css #baselinePlease open Telegram to view this post
VIEW IN TELEGRAM
🔥11👏3❤🔥2❤1
Страница грузилась секунду — стала грузиться десять. Причём только в Safari. React? Сервер? Сторонние скрипты? Нет. Виновник — одно эмодзи на кнопке.
Аллен Пайк вместе с Claude искал причину бинарным поиском: убираешь кусок кода, смотришь результат, повторяешь. Оказалось, шрифт Noto Color Emoji откатывается в Safari к SVG-рендерингу и тратит 1600 мс на компоновку одного символа вместо двух.
А ирония в том, что подключить этот шрифт изначально предложил тот же Claude. Агенты-программисты, пишет Пайк, похожи на циркулярную пилу: невероятно полезны и пропорционально опасны. #css #ai
🔜 Читать статью
Резервный канал в MAX
Аллен Пайк вместе с Claude искал причину бинарным поиском: убираешь кусок кода, смотришь результат, повторяешь. Оказалось, шрифт Noto Color Emoji откатывается в Safari к SVG-рендерингу и тратит 1600 мс на компоновку одного символа вместо двух.
А ирония в том, что подключить этот шрифт изначально предложил тот же Claude. Агенты-программисты, пишет Пайк, похожи на циркулярную пилу: невероятно полезны и пропорционально опасны. #css #ai
Резервный канал в MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6❤🔥4🤣3🔥2
Встроенные стили побеждают любой селектор в каскаде. Переопределить их из внешних стилей — задача нетривиальная: чаще всего приходится тянуться за
Зачем тогда их использовать? В вёрстке рассылок другого выхода нет — почтовые клиенты блокируют внешние стили. Ещё атрибут
Разбираем приоритет, ограничения и случаи, когда встроенные стили оправданы. #css #html
💡 Читать статью
!important. А псевдоклассы, псевдоэлементы и медиавыражения в атрибуте style вообще не работают — :hover, ::before, @media мимо.Зачем тогда их использовать? В вёрстке рассылок другого выхода нет — почтовые клиенты блокируют внешние стили. Ещё атрибут
style удобен при отладке и в CMS, где стили задаются через интерфейс.Разбираем приоритет, ограничения и случаи, когда встроенные стили оправданы. #css #html
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4❤🔥3🔥2
CSS-свойство WidelyNewly Available. Работает везде.
Одно условие: у элемента должен быть полупрозрачный фон. Без
Где это применять? Модальные окна, карточки с эффектом матового стекла, сайдбары с глубиной. В статье разбираем, как собрать эффект и какие фильтры комбинировать. #css #baseline
⚡ Читать статью
backdrop-filter применяет фильтры к фону за элементом — размытие, контраст, яркость. С сентября 2024 в Baseline Одно условие: у элемента должен быть полупрозрачный фон. Без
rgba или hsla эффект применится, но визуально вы ничего не увидите.Где это применять? Модальные окна, карточки с эффектом матового стекла, сайдбары с глубиной. В статье разбираем, как собрать эффект и какие фильтры комбинировать. #css #baseline
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5❤4🔥3
Анимация по кривой раньше требовала JavaScript:
В статье показываем разные варианты путей и объясняем, где
✨ Читать статью
getPointAtLength(), requestAnimationFrame, ручной пересчёт координат. Десятки строк кода.offset-path решает задачу средствами CSS. Задаёте путь через path(), запускаете offset-distance от 0% до 100% — элемент движется по кривой, окружности или произвольной траектории. Как управлять поворотом? Для этого есть offset-rotate.В статье показываем разные варианты путей и объясняем, где
offset-path пригодится в интерфейсах. #cssPlease open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4🔥4 3
Какой цвет фона в
А если первое значение —
Каскад — один из четырёх этапов обработки значений в CSS. Сначала браузер фильтрует объявления и отбрасывает невалидные, потом через каскад для каждого свойства выбирает одно значение. Если какого-то не хватает — берёт унаследованное или начальное. Дальше три стадии вычислений: вычисленные, используемые и действительные.
Разбираем весь путь CSS-значения: от объявления в файле до значения, с которым браузер отрисовывает элемент. Со схемами, примерами и тестом для самопроверки. #css
🔴 Читать статью
.selector { background-color: 20px; background-color: red; }?А если первое значение —
var(--not-a-color), и переменная содержит те же 20px? Результат будет другим.Каскад — один из четырёх этапов обработки значений в CSS. Сначала браузер фильтрует объявления и отбрасывает невалидные, потом через каскад для каждого свойства выбирает одно значение. Если какого-то не хватает — берёт унаследованное или начальное. Дальше три стадии вычислений: вычисленные, используемые и действительные.
Разбираем весь путь CSS-значения: от объявления в файле до значения, с которым браузер отрисовывает элемент. Со схемами, примерами и тестом для самопроверки. #css
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4❤🔥3🔥2
article a, aside a, footer a — список из трёх селекторов. С :is() его можно записать как один: :is(article, aside, footer) a.У
:is() и :where() есть один нюанс, из-за которого они работают по-разному: специфичность. Один из них её повышает, второй — нет, и от этого зависит, где их безопасно применять. Разбираемся в статье. #css #webdev📂 Читать статью
Подключаете UI-кит, пишете свой класс — он не работает. Добавляете класс поконкретнее — всё равно. В итоге появляется
Правило
⭐ Читать статью
!important, и так по цепочке. Знакомо?Правило
@layer решает это иначе — приоритет задаёт сам автор стилей, а не специфичность селекторов. Стили UI-кита можно завернуть в отдельный слой и спокойно их перебивать. С 2022 года поддерживается во всех современных браузерах. Как настроить порядок и что важно учесть — в статье. #css #uikitPlease open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4👍2🔥1
Три карточки в сетке. У каждой — заголовок, описание и кнопка. Заголовки разной длины, и кнопки разъезжаются по разной высоте. Сетка выглядит рваной.
Что с этим делали раньше? Считали высоту заголовков через JavaScript и проставляли
Внутри статьи — рабочая демка, разбор синтаксиса для строк и столбцов и сравнение с обычным Grid. Firefox с 2019-го, Chrome 117+, Safari 16+ — уже в baseline. #css #subgrid
🔔 Читать статью
Что с этим делали раньше? Считали высоту заголовков через JavaScript и проставляли
min-height. Или мирились. Теперь хватает одной строки CSS — grid-template-rows: subgrid на каждой карточке. Карточки наследуют строки родительской сетки, и одинаковые блоки соседних карточек выстраиваются по общим линиям.Внутри статьи — рабочая демка, разбор синтаксиса для строк и столбцов и сравнение с обычным Grid. Firefox с 2019-го, Chrome 117+, Safari 16+ — уже в baseline. #css #subgrid
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4❤🔥3 3
Представьте карточку товара. На широком экране она вытягивается горизонтально: слева фото, справа текст. На узком — становится вертикальной: фото сверху, текст снизу. Кажется, медиавыражения справятся.
А если ту же карточку нужно показать в узкой боковой колонке на широком экране? Окно широкое, контейнер узкий —
Контейнерные запросы переключают акцент: элемент смотрит на размер своего контейнера. Один и тот же компонент в шапке, в колонке и в подвале адаптируется по-разному. И вам не нужно три разных вёрстки под три места.
В статье — пример с резиновой карточкой кроссовок и разбор
📎 Читать статью
А если ту же карточку нужно показать в узкой боковой колонке на широком экране? Окно широкое, контейнер узкий —
@media смотрит на размер окна и промахивается. Карточка снова вытянулась горизонтально, хотя места ей не хватает.Контейнерные запросы переключают акцент: элемент смотрит на размер своего контейнера. Один и тот же компонент в шапке, в колонке и в подвале адаптируется по-разному. И вам не нужно три разных вёрстки под три места.
В статье — пример с резиновой карточкой кроссовок и разбор
container-type. А ещё — именованные контейнеры для нескольких блоков на странице и cqw — новые единицы измерения от ширины контейнера. Chrome 105+, Safari 16+, Firefox 110+ — уже в baseline. #css #webdevPlease open Telegram to view this post
VIEW IN TELEGRAM
👍4❤🔥3 2🔥1
В последней строке заголовка остаётся одно слово, и весь блок смотрится неаккуратно. Раньше это правили руками — неразрывные пробелы, мягкие переносы. Теперь браузер берёт работу на себя.
Оба значения — прогрессивное улучшение.
В статье — интерактивный пример: переключаете режимы и сразу видите разницу.
🎥 Читать статью
text-wrap: balance выравнивает строки заголовка по длине — для блоков до шести строк. text-wrap: pretty убирает «висячее» слово в конце параграфа и работает на тексте любой длины.Оба значения — прогрессивное улучшение.
balance поддерживается с Chrome 114, Firefox 121 и Safari 17.4; pretty появился позже — в Chrome 117 и Firefox 122. Там, где поддержки нет, текст переносится как раньше. #css #webdevВ статье — интерактивный пример: переключаете режимы и сразу видите разницу.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤🔥3 2
Правила в CSS можно вкладывать друг в друга — как в Sass, только без компиляции и зависимостей. Псевдоклассы, дочерние селекторы и медиазапросы лежат рядом с базовыми стилями компонента, а не разбросаны по файлу. Нативно — с 2023 года: Chrome 112+, Firefox 117+, Safari 16.5+.
Ключевой символ —
Ещё тонкость для отладки: вложенные селекторы по специфичности считаются как внутри
Зато
👾 Читать статью
Ключевой символ —
&, ссылка на родительский селектор. &:hover превращается в .btn:hover, &.is-active — в .btn.is-active, а .dark & ставит .btn внутрь .dark. Без & вложенный селектор читается как потомок через пробел.Ещё тонкость для отладки: вложенные селекторы по специфичности считаются как внутри
:is() — вес берётся от самого тяжёлого аргумента родителя. На простых стилях незаметно, на запутанных стоит помнить.Зато
@media, @layer и @container работают прямо внутри правила: брейкпоинты живут рядом с компонентом, а не в хвосте файла. В статье можно покрутить живой пример. #css #baselinePlease open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤🔥4 3
Сделать цвет светлее на 10% или подобрать гармоничный акцент — с HEX, да и с HSL, это всё ещё угадайка. Скажем, в HSL
Для дизайн-систем это упрощает многое. Палитру собираете, меняя только H. Тёмную тему переключаете через L в CSS-переменных. Чтобы перекрасить весь бренд, хватает одной переменной
Поддержка: Chrome 111+, Firefox 113+, Safari 15.4+, для старых браузеров — фолбэк на HEX. В статье — слайдеры L, C, H, на которых видно, как меняется цвет. #css #baseline
🔵 Читать статью
lightness: 50% у жёлтого и синего даёт разную видимую яркость: жёлтый светлее.oklch() берёт три параметра: L (яркость от 0 до 1), C (насыщенность от 0 примерно до 0.4) и H (оттенок в градусах от 0 до 360). Ключевое — перцептивная равномерность: при равном L цвета воспринимаются почти одинаково яркими, куда ровнее, чем в HSL.Для дизайн-систем это упрощает многое. Палитру собираете, меняя только H. Тёмную тему переключаете через L в CSS-переменных. Чтобы перекрасить весь бренд, хватает одной переменной
--brand-h. И ещё oklch достаёт цвета, которых нет в sRGB, — оттенки P3 и Rec2020.Поддержка: Chrome 111+, Firefox 113+, Safari 15.4+, для старых браузеров — фолбэк на HEX. В статье — слайдеры L, C, H, на которых видно, как меняется цвет. #css #baseline
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5👍3 2
Тег
Теперь это закрывает атрибут
Интереснее — что вокруг. Стандартный маркер-треугольник меняется на свой, а гладкая анимация высоты требует пары трюков. В статье — интерактивный FAQ, который можно потрогать в браузере, разбор стилизации и честные оговорки про анимацию и поддержку (Chrome 120+, Firefox 130+, Safari 17.2+). #html #css
🎈 Читать статью
<details> давно делает раскрывающиеся блоки без единой строки JavaScript. Одна загвоздка оставалась: несколько блоков жили независимо — открыли один, соседние не реагируют. Эксклюзивный аккордеон, где раскрыт ровно один раздел, собирали на JS.Теперь это закрывает атрибут
name: даёте блокам общее имя — и браузер сам следит, чтобы открытым был только один. Без скриптов и библиотек.Интереснее — что вокруг. Стандартный маркер-треугольник меняется на свой, а гладкая анимация высоты требует пары трюков. В статье — интерактивный FAQ, который можно потрогать в браузере, разбор стилизации и честные оговорки про анимацию и поддержку (Chrome 120+, Firefox 130+, Safari 17.2+). #html #css
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥10 5🔥4❤1
Растянутая аватарка с овальным лицом на сайте — это
Свойство
👀 Читать статью
object-fit: fill по умолчанию и две минуты невнимательности.Свойство
object-fit : cover заполняет бокс и обрезает лишнее, пропорции не ломаются. contain вписывает изображение целиком, оставляя поля. fill растягивает без разбора — именно это и случается с аватарками по умолчанию. none показывает в оригинальных размерах, scale-down выбирает между contain и none автоматически. В статье разбираем каждое значение на примерах. #cssPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤🔥3⚡1 1
Тёмная тема обычно удваивает CSS: пишете цвета для светлой, потом те же — для тёмной в
Уже работает во всех актуальных браузерах, а для старых достаточно обычного запасного цвета. В статье — как подключить (есть обязательный
💡 Читать статью
@media. Функция light-dark() схлопывает это в одну строку: оба значения в одном объявлении, а браузер выбирает нужное по системной теме.Уже работает во всех актуальных браузерах, а для старых достаточно обычного запасного цвета. В статье — как подключить (есть обязательный
color-scheme, иначе не сработает) и чем функция выручает дизайн-системы. #css #baselinePlease open Telegram to view this post
VIEW IN TELEGRAM
🔥10 1
Карусели, ленты сторис, постраничные слайдеры раньше означали JavaScript: обработчики касаний, подсчёт смещений, ручная докрутка. CSS Scroll Snap делает «прилипание» к слайдам силами самого браузера — двумя свойствами и без единой строки скрипта.
Работает во всех современных браузерах, а в старых лента листается как обычно. В статье — что это за свойства, пара приёмов для тонкой настройки и живая лента, которую можно поскроллить прямо на странице. #css #baseline
🎲 Читать статью
Работает во всех современных браузерах, а в старых лента листается как обычно. В статье — что это за свойства, пара приёмов для тонкой настройки и живая лента, которую можно поскроллить прямо на странице. #css #baseline
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4 2