Обзор на браузерные API, которые стали Widely available в октябре 2025. Раз в месяц я буду вам напоминать, что вы уже можете использовать в проде.

Каждый месяц выходят новые CSS-свойства, HTML-атрибуты, JavaScript-методы и WebAPI, но применять в проде мы их конечно же не будем. 2.5 года назад также каждый месяц выходили новые фичи в браузере, а вот их уже пора начинать применять.

Как мы понимаем, что уже можно использовать в проде?

У каждой компании, да что уж там компании, у каждой команды в компании своя методика принятия решения о внедрении той или иной фичи в проекте.

Общий же сценарий выглядит так:

  • Посмотрели в пользовательские метрики. Поняли какими браузерами и их версиями в основном пользуются пользователи проекта;

  • Заглянули в caniuse и поняли, какие фичи уже поддерживаются большинством браузеров;

  • Приняли решение о внедрении той или иной фичи в проект.

Какие-то команды позволяют себе указывать правило последние «три версии браузеров». У других специфика проекта, что проект работает исключительно на iPad с Safari. Сами понимаете, все мы разные и требования разные, и у каждого свой подход.

Baseline - позволяет немного упростить процесс принятия решения о внедрении той или иной фичи в проект. Если фича Widely available значит фича уже как минимум есть во всех основных браузерах как минимум стабильно используются последние 2.5 года.

Какие фичи в вебе стали Widely available в октябре 2025?

  • Canvas: createConicGradient()

  • Canvas: roundRect()

  • HTML: inert

Canvas: createConicGradient()

Конические градиенты в canvas
Конические градиенты в canvas

Метод createConicGradient() интерфейса CanvasRenderingContext2D из HTML Canvas 2D API позволяет создать конический градиент — то есть цветовой переход, который «вращается» вокруг заданной точки-центра, наподобие цветового круга.

Такой градиент может быть назначен свойству fillStyle или strokeStyle и затем применён при отрисовке фигур на элементе <canvas>.

Применяется, например, для визуализаций типа цветовой диаграммы, интерфейсных элементов с круговым градиентом, визуализаций данных, эффектов вращения цвета и т.п.

Синтаксис

const gradient = ctx.createConicGradient(startAngle, x, y);

Где:

  • startAngle — угол, с которого начинается градиент, в радианах. Угол отсчитывается от горизонтальной линии вправо, затем по часовой стрелке.

  • x, y — координаты центра градиента относительно системы координат текущего canvas контекста.

После создания градиента вы вызываете gradient.addColorStop(offset, color) несколько раз, чтобы задать точки перехода цвета (offset от 0 до 1). Затем назначаете ctx.fillStyle = gradient или ctx.strokeStyle = gradient и рисуете фигуру.

Пример использования

Ниже — минимальный пример, как можно использовать createConicGradient():

<canvas id="myCanvas" width="300" height="300"></canvas>
<script>
  const canvas = document.getElementById("myCanvas");
  const ctx = canvas.getContext("2d");
  // создаём конический градиент, начинаем с угла 0 радиан, центр в 150×150
  const gradient = ctx.createConicGradient(0, 150, 150);

  // задаём цветовые переходы
  gradient.addColorStop(0   , "red");
  gradient.addColorStop(0.25, "orange");
  gradient.addColorStop(0.5 , "yellow");
  gradient.addColorStop(0.75, "green");
  gradient.addColorStop(1   , "blue");

  // назначаем стиль заливки и рисуем круг
  ctx.fillStyle = gradient;
  ctx.beginPath();
  ctx.arc(150,150,100,0,Math.PI*2);
  ctx.fill();
</script>

В этом примере получаем круг радиусом 100px, в центре (150,150), залитый цветовым кругом (красный → оранжевый → жёлтый → зелёный → синий).

Canvas: roundRect()

Скругление углов в canvas
Скругление углов в canvas

Ещё один удобный метод - это CanvasRenderingContext2D.roundRect(). Он позволяет рисовать прямоугольники с закруглёнными углами без необходимости вручную комбинировать arcTo() или quadraticCurveTo().

Раньше, чтобы нарисовать прямоугольник с закруглёнными углами на <canvas>, разработчикам приходилось писать довольно объёмный код, либо использовать сторонние утилиты. С появлением roundRect() всё стало проще: теперь можно создать такой прямоугольник в один вызов.

Это особенно полезно при построении кастомных UI-компонентов, визуализаций с карточками, кнопками, бейджами и другими элементами с мягкими формами — прямо в canvas без излишней сложности.

Синтаксис

ctx.roundRect(x, y, width, height, radii);

Где:

  • x, y — координаты левого верхнего угла прямоугольника.

  • width, height — ширина и высота.

  • radii — радиус закругления углов. Может быть:

    • Числом (одинаковый радиус для всех углов),

    • Объектом { topLeft, topRight, bottomRight, bottomLeft },

    • Массивом из 1–4 значений (по аналогии с CSS border-radius).

Метод не рисует прямоугольник сам по себе — он лишь добавляет путь в текущий контекст. Чтобы отобразить фигуру, нужно вызвать fill() или stroke().

Пример использования

<canvas id="canvas" width="300" height="200"></canvas>
<script>
  const canvas = document.getElementById('canvas');
  const ctx = canvas.getContext('2d');

  // Простой закруглённый прямоугольник
  ctx.fillStyle = '#4CAF50';
  ctx.beginPath();
  ctx.roundRect(20, 20, 200, 100, 20);
  ctx.fill();

  // Прямоугольник с разными радиусами
  ctx.strokeStyle = '#FF5722';
  ctx.lineWidth = 3;
  ctx.beginPath();
  ctx.roundRect(20, 130, 200, 50, [10, 20, 5, 30]);
  ctx.stroke();
</script>

В этом примере:

  • Первый прямоугольник закрашен зелёным цветом с равномерным радиусом 20px.

  • Второй — обведён оранжевой линией, и каждый угол имеет свой радиус.

HTML: inert

Атрибут inert - одно из самых полезных, но долгое время игнорируемых улучшений для доступности и UX.

Атрибут inert делает элемент и всё его содержимое неинтерактивным и невидимым для вспомогательных технологий (например, скринридеров). Элементы с inert:

  • Не получают фокус.

  • Не реагируют на клики, нажатия клавиш и другие события.

  • Игнорируются при навигации с клавиатуры.

  • Исчезают из дерева доступности.

Типичные сценарии использования:

  • Затемнение фона при открытии модального окна, чтобы пользователь не мог взаимодействовать с основным контентом.

  • Отключение интерактивности у сложных форм во время загрузки.

  • Временное скрытие секций интерфейса без их физического удаления из DOM.

Раньше для подобного поведения приходилось:

  • Вручную добавлять aria-hidden="true" и tabindex="-1" рекурсивно.

  • Отключать обработчики событий.

  • Использовать JavaScript-библиотеки или кастомные решения.

Теперь всё это можно сделать с помощью одного HTML-атрибута.

Пример использования

<div class="modal modal--show">
  <p>Вы уверены?</p>
  <button id="confirm">Да</button>
  <button id="cancel">Нет</button>
</div>

<main inert>
  <h1>Основной контент</h1>
  <button onclick="openModal()">Удалить профиль</button>
</main>
<script>
  function openModal() {
    document.querySelector('main').setAttribute('inert', '');
  }

  document.getElementById('cancel').onclick = () => {
    document.querySelector('main').removeAttribute('inert');
  };
</script>

Когда модальное окно открыто, основной контент становится «инертным» — пользователь не может случайно нажать на кнопки в <main>, а скринридеры не озвучат его содержимое.

Следующий выпуск — в начале декабря. До встречи!

Комментарии (0)