TGViewer
Senior Frontend - javascript, html, css Senior Frontend - javascript, html, css @seniorfront · 23.8K subscribers
Post #5844 1.09K
📐 Как заменить CSS progress(), пока его поддерживают не везде

Функция progress() показывает, где значение лежит между двумя границами, и возвращает число от 0 до 1. Формула простая: (значение - начало) / (конец - начало).

Но поделить 180px на 880px и получить просто число умеют не все браузеры: Firefox, например, пока нет. Выручает tan(atan2()). Функция atan2() по сути сама делит первый аргумент на второй, а tan() отдаёт обычное число без единиц.

--progress: tan(atan2(500px - 320px, 1200px - 320px));


Так мы узнаём, где 500px между 320px и 1200px. Чтобы результат не выходил за пределы от 0 до 1, как у progress(), оберните его в clamp().

С разными единицами, например vw и px, трюк кроссбраузерно не сработает. Зарегистрируйте ширину экрана через @property как <length>, и браузер сам переведёт её в пиксели.

Как быть, если границы заданы в rem, и какой вариант выбрать под ваши единицы, автор разбирает в статье.

👉 @seniorFront
More from @seniorfront
  1. Oct 10, 2026Post #5854
  2. Oct 9, 2026🔍 Почему overflow: hidden не удерживает размытие Свойство backdrop-filter: blur() размыва…
  3. Oct 8, 2026🔑 Обработчик postMessage без проверок слушается кого угодно Виджет в iframe (комментарии,…
  4. Oct 6, 2026📜 Страница скроллится, а window.scrollY показывает 0 У каждой страницы есть главный конте…
  5. Oct 5, 2026✨ Одна и та же CSS-переменная может дать 1, а может 2 Кастомные свойства вроде --index по…
  6. Oct 2, 2026🎉 iframe, который сам подстраивается под содержимое Обычно у <iframe> фиксированный разме…
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 →