Свежие статьи
Итоги 2-го чемпионата по вёрстке
Чемпионат по вёрстке помогает компаниям заказной разработки находить начинающих специалистов с отличными навыками вёрстки — по реальному результату, а не по резюме.
Ключевые особенности соревнования:
- сложные и объёмные макеты от профессиональных дизайн-студий;
- двухнедельный формат, ориентированный на качество, а не скорость;
- строгая многоуровневая оценка;
- жюри из опытных разработчиков из бигтеха и компаний заказной разработки.
Второй чемпионат по вёрстке завершился 19 декабря 2025 года. Ниже — его итоги и разбор уровня работ участников.
- 23 декабря 2025
Новые ключевые слова в calc(): e, pi, infinity и NaN
Совсем недавно в CSS появилась небольшая, но любопытная возможность — использовать внутри математических функций вроде calc() готовые константы. Это не новые свойства или сложные функции, а удобные сокращения: e, pi, infinity, -infinity и NaN. Они доступны в браузерах с конца 2022 года, но по-прежнему нечасто встречаются в реальном коде. Разберём, зачем они нужны и когда могут пригодиться.
Константы работают только внутри calc() и её «родственников» — min(), max(), clamp(), sin(), cos() и прочих математических функций. Просто написать font-size: e нельзя, а font-size: calc(e * 1rem) — вполне корректно.
.element {
font-size: calc(e * 0.5rem); /* ≈ 1.359rem */
}
Константа e — основание натурального логарифма, примерно 2.718. Её можно использовать для плавных, экспоненциальных изменений, например, при анимациях или масштабировании.
@keyframes grow {
to {
transform: scale(calc(pow(e, 0.5)));
}
}
Это эквивалентно scale(1.64872…), но запись через e и pow() читается как «растём в e в степени 0.5» — точнее и выразительнее, чем просто магическое число.
Константа pi (≈ 3.14159…) особенно полезна при работе с углами, особенно в радианах. Например, поворот на 180° — это pi радиан:
.element {
rotate: calc(pi * 1rad);
}
Можно комбинировать с тригонометрическими функциями:
.element {
--t: 0.3;
transform: translateX(calc(100px * sin(calc(pi * var(--t)))));
}
Здесь элемент колеблется по синусоиде, и один полный цикл приходится ровно на изменение --t от 0 до 2.
Более экзотичные константы — infinity, -infinity и NaN. Они не числа в привычном смысле, но ведут себя как числовые значения, и браузер «зажимает» их до максимально или минимально допустимых величин. Например, z-index: calc(infinity) даст самый высокий возможный z-index без необходимости подбирать гигантское число вручную.
.overlay {
z-index: calc(infinity);
}
Это не «бесконечность» в философском смысле, а гарантированное значение, которое всегда будет больше любого другого z-index, заданного числом.
Константа NaN (Not a Number) почти никогда не нужна в повседневной разработке, но она помогает избежать неопределённого поведения при делении на ноль или других недопустимых операциях. Например:
.test {
width: calc(0 / 0); /* вычисляется как NaN */
}
Согласно стандарту IEEE-754, любая операция с NaN возвращает NaN, и браузер в итоге проигнорирует такое свойство или заменит на значение по умолчанию. Это предсказуемо — лучше молчать, чем рисковать.
Наконец, напомним: константы чувствительны к регистру только частично. e, pi, infinity можно писать в любом регистре: E, Pi, InFiNiTy — всё сработает. А вот NaN допускает только такой вариант написания. nan, NAN или NaN() — синтаксическая ошибка.
На практике e и pi пригодятся тем, кто строит анимации, диаграммы, визуализации или работает с тригонометрией в CSS. infinity — когда нужно «перебить любой z-index». NaN — скорее для полноты реализации, чем для практического использования.
Иногда простая константа экономит время, избавляет от калькулятора и делает стиль чуть понятнее — особенно если вы любите точность и математику.
- 21 декабря 2025

Плохая анимация в CSS. Топ примеров
Вообще-то, анимация на сайте — это хорошо. Даже в 2002 году на сайте башкирской федерации настольного тенниса уже была анимированная бегущая строка — смотрите сами:
Шутки шутками, но маленькие приятные анимации делают сайт живее и помогают показать всякое, а какие-нибудь рекламные страницы без анимации вообще представить тяжело. Вам сейчас точно такая пришла в голову: вы мотаете вверх-вниз, а что-то крутится, вертится и схлопывается с красивым фоном. Вот это как раз оно.
Но иногда анимация делает только хуже. Смотрите, когда это происходит.
Дисклеймер: ради этой статьи нам пришлось отключить адблок. Не повторяйте этого дома.
- 20 декабря 2025

Подборка кнопок с CodePen для ваших проектов
Правильно говорят, что лучший способ чему-то научиться — подсмотреть у тех, кто умеет. Поэтому принесли вам подборку с CodePen, в которой хорошие разработчики делают интересные штуки и делятся ими со всеми. В этом выпуске — интерфейсы на CSS и React.
- 19 декабря 2025

Плавные анимации в CSS с помощью cubic-bezier()
Когда вы задаёте анимацию или переход в CSS, свойства изменяются нелинейно: сначала медленно, потом быстрее, в конце снова замедляются. Это поведение называется интерполяцией и определяется так называемой функцией ускорения (или «easing function»). По умолчанию браузеры используют значения вроде ease, ease-in, ease-out и linear. Но если вам нужен более тонкий контроль над тем, как именно свойство изменяется во времени, пригодится функция cubic-bezier().
Эта функция позволяет задать собственную кривую ускорения с помощью четырёх чисел — координат двух управляющих точек кубической кривой Безье. Эти значения описывают, как «разгоняется» и «тормозит» анимация. cubic-bezier() поддерживается всеми современными браузерами и считается стабильной функцией (Baseline: Widely Available), так что её можно использовать в продакшене.
Вот пример, где переход на элементе происходит по заданной кривой:
.element {
transition: all 0.5s cubic-bezier(0.25, 0.1, 0.25, 1);
}
В этом примере четыре числа — это координаты управляющих точек, задающих форму кривой. Именно они определяют, как быстро будет происходить переход: насколько он будет «вялым» в начале, насколько резко ускорится и как будет вести себя в конце.
- 17 декабря 2025

Как поискать элементы с конца массива
Метод findLast() появился в JavaScript как часть стандарта ECMAScript 2023 и уже широко поддерживается всеми актуальными браузерами. Он работает как зеркальное отражение метода find(), но ищет элементы не с начала массива, а с конца — и возвращает первый найденный в таком обратном порядке элемент, удовлетворяющий условию. Если ничего не найдено, возвращается undefined [[1]].
- 16 декабря 2025
Как сделать кнопку «Скопировать» на странице
Наверняка вы сто раз видели кнопку Скопировать, например, возле блоков кода в любимой нейронке, чтобы быстро их скопипастить. Давайте разберемся, как самостоятельно сделать такую же (кнопку, а не нейронку).
- 21 ноября 2025
UUID в JavaScript: Полное руководство
Генерация UUID — одна из тех фундаментальных задач, с которой сталкивается каждый разработчик. Universally Unique Identifier, или универсальный уникальный идентификатор, решает простую, но критически важную задачу: создание гарантированно уникального идентификатора.
- 20 ноября 2025
Как спарсить JSON (100% рабочий способ)
JSON (JavaScript Object Notation) — это текстовый формат для представления структурированных данных. Он повсеместно используется для обмена информацией между клиентом и сервером, хранения конфигураций и сериализации состояний. В JavaScript его преобразование в рабочие объекты выполняется стандартным методом JSON.parse(). Ниже описаны корректные и надёжные способы его применения — от базового использования до промышленных практик.
- 18 ноября 2025
lab() и lch() стали широкодоступными в браузерах
В ноябре 2025 года появилось два новых способа задавать цвет в CSS. lab() и lch() стали полностью доступны во всех основных браузерах и больше не нужно включать никакие экспериментальные настройки.
- Chrome и Edge — с версии 111 (уже почти 3 года как есть)
- Safari — с версии 16.4 (весна 2023)
- Firefox — с версии 125 (2024 год)
Обычные цвета rgb() и hex часто дают неожиданные результаты, когда хочется просто сделать цвет чуть светлее или чуть темнее. С lab() и особенно с lch() всё стало намного проще и предсказуемее:
- Меняешь только яркость — цвет остаётся тем же самым по оттенку
- Меняешь насыщенность — не уходишь случайно в серый или в слишком ядовитый
- Поворачиваешь оттенок на 30–60 градусов — получаешь красивую гармоничную палитру
- 16 ноября 2025
Новинки веб-платформы: что стало доступно во всех браузерах в ноябре
Краткий обзор возможностей, которые теперь широко поддерживаются во всех основных браузерах: новые цветовые функции, цветовые модели, потоковая компрессия и улучшенные селекторы.
- 16 ноября 2025
CSS-функция color() теперь доступна во всех браузерах
По данным MDN Web Docs и Web Platform Features Explorer, по состоянию на ноябрь 2025 года функциональная нотация color() достигла статуса widely available во всех основных браузерах без необходимости включения экспериментальных флагов.
- 14 ноября 2025
40 самых популярных регулярных выражений в JavaScript
Часто бывает нужна какая-нибудь конкретная регулярка — например, проверить почту или номер телефона. Собрали 40 часто встречаемых, чтобы они всегда были под рукой (или, на худой конец, в закладках).
| # | Название | Регулярное выражение |
|---|---|---|
| 1 | Проверка email | /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ |
| 2 | Проверка URL | /^https?:\/\/[\w\-]+(\.[\w\-]+)+[/#?]?.*$/ |
| 3 | Только цифры | /^\d+$/ |
| 4 | Только буквы | /^[a-zA-Z]+$/ |
| 5 | Телефон РФ | /^(?:\+7|8)[\s-]?\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2}$/ |
| 6 | HEX-цвет | /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/ |
| 7 | IPv4-адрес | /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/ |
| 8 | Дата ДД.ММ.ГГГГ | /^(0[1-9]|[12]\d|3[01])\.(0[1-9]|1[012])\.(19|20)\d{2}$/ |
| 9 | Время ЧЧ:ММ | /^([01]\d|2[0-3]):([0-5]\d)$/ |
| 10 | Сильный пароль (8+ символов, буквы + цифры) | /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/ |
| 11 | Хотя бы одна заглавная буква | /(?=.*[A-Z])/ |
| 12 | Только латиница и цифры | /^[a-zA-Z0-9]+$/ |
| 13 | YouTube ID из ссылки | /(?:v=|\/embed\/|\.be\/)([^?&"]{11})/ |
| 14 | Удалить HTML-теги | /<[^>]*>/g |
| 15 | Удалить лишние пробелы | /\s+/g |
| 16 | Найти все цифры | /\d+/g |
| 17 | Заменить цифры на * | /\d/g |
| 18 | CamelCase → snake_case | /([A-Z])/g |
| 19 | snake_case → camelCase | /_[a-z]/g |
| 20 | Первая буква заглавная | /^\w/ |
| 21 | Все слова с заглавной | /\b\w/g |
| 22 | Повторяющиеся слова | /\b(\w+)\b\s+\1\b/gi |
| 23 | UUID | /^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i |
| 24 | Base64 | /^(data:[^;]+;base64,)?[A-Za-z0-9+/=]+$/ |
| 25 | Число с плавающей точкой | /^-?\d*(\.\d+)?$/ |
| 26 | Сумма в рублях | /^\d{1,3}(?:\s\d{3})*(?:[.,]\d{1,2})?\s?₽?$/ |
| 27 | @упоминания | /@\w+/g |
| 28 | #хэштеги | /#\w+/g |
| 29 | Удалить эмодзи | /[\u{1F600}-\u{1F6FF}|\u{2600}-\u{26FF}|\u{2700}-\u{27BF}]/gu |
| 30 | Только кириллица | /^[а-яА-ЯёЁ]+$/u |
| 31 | Логин (3–20 символов) | /^[a-zA-Z0-9_-]{3,20}$/ |
| 32 | Есть спецсимволы | /[^a-zA-Z0-9\s]/ |
| 33 | Пробелы в начале/конце | /^\s|\s$/ |
| 34 | Все числа в тексте | /-?\d+(\.\d+)?/g |
| 35 | Сжать пробелы | /\s+/g |
| 36 | Пустая строка или пробелы | /^\s*$/ |
| 37 | Простая CSV-строка | /^[^,\r\n]+(,[^,\r\n]+)*$/ |
| 38 | IPv6 (упрощённо) | /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/ |
| 39 | Только пробелы и табы | /^[\s\t]*$/ |
| 40 | Случайный пароль 12 символов (паттерн) | /[A-Za-z0-9]{12}/ |
Сохрани страницу — и 40 самых полезных регулярных выражений всегда под рукой!
- 9 ноября 2025

Полный гайд по объекту Date в JavaScript
Объект Date позволяет создавать, сравнивать и форматировать дату и время. Используется для отображения текущего времени, вычисления интервалов и работы с таймзонами в веб-приложениях.
Доступно в Baseline в статусе «Widely Available» с 2018-01-29
- 8 ноября 2025

@counter-style — создание собственных стилей счётчиков в CSS
@counter-style — это правило CSS, которое позволяет определять свои собственные стили нумерации для списков, счётчиков и других элементов, использующих функцию counter(). Вместо привычных арабских цифр, латинских букв или стандартных маркеров вы можете задать любые символы, изображения или даже сложные последовательности.
Поддержка: доступно в Baseline в статусе «Newly Available» с 18 сентября 2023 года.
- 7 ноября 2025

reversed() — обратный отсчёт в CSS-счётчиках
Функция reversed() в CSS позволяет создавать счётчики, которые уменьшаются, а не увеличиваются. Это удобно для обратных отсчётов, нумерации элементов с конца и чисто-CSS эффектов без JavaScript.
Статус: экспериментальная функция (Limited Availability, поддержка ограничена).
Синтаксис функции:
/* Объявление обратного счётчика */
counter-reset: reversed(<имя-счётчика>) [начальное-значение]?;
/* Изменение счётчика */
counter-increment: <имя-счётчика> <число>;
Функция reversed() оборачивает имя счётчика в counter-reset.
counter-increment работает как обычно; чтобы счётчик убывал, задайте отрицательное значение.
- 5 ноября 2025
CSS if() — провал или прорыв?
Разбираем спорную новинку 2025 года — CSS‑функцию if(), которая появилась в экспериментальном режиме в Chrome. Смотрим, как она работает, где помогает, где подводит и чего от неё ждать дальше.
Летом 2025 года в Chrome появилась экспериментальная функция if(). На первый взгляд это звучит как революция: наконец‑то условия в CSS! Но так ли всё радужно? Разберёмся спокойно и по шагам.
- 1 ноября 2025
24 новые возможности фронтенда в 2025
Год 2025 принёс фронтенд-разработчикам множество долгожданных новинок, которые делают веб-платформу более мощной и удобной. Вот краткий обзор ключевых возможностей, которые уже начинают поддерживаться в современных браузерах.
- 24 октября 2025

Удаление CSS-свойств с помощью свойства unset
Ключевое слово CSS unset, представленное в спецификации CSS Cascading and Inheritance Level 3, — это мощный инструмент для сброса значений свойств с учетом контекста. Доступное в браузерах с 21 сентября 2018 года (статус Baseline «Widely Available»), unset позволяет фронтенд-разработчикам гибко возвращать свойства CSS к их значениям по умолчанию или унаследованным значениям. В этой статье мы подробно разберем механику, исторический контекст, варианты применения и практические сценарии использования unset.
Предполагается, что читатель знаком с основами CSS, включая каскад, специфичность и наследование. Мы рассмотрим, как unset вписывается в современные рабочие процессы CSS, сравним его с родственными ключевыми словами initial и revert, а также приведем практические примеры для демонстрации его полезности.
- 24 октября 2025
Chrome DevTools останется без «живого» редактирования JS
Инструменты разработчика в браузере Chrome лишатся одной из своих экспериментальных возможностей — «живого редактирования» JavaScript-кода. Как сообщила команда разработчиков в официальном блоге, функция будет полностью удалена в феврале 2026 года с выходом версии Chrome 145. Это решение отражает эволюцию современных инструментов веб-разработки.
- 23 октября 2025
