В своей мегакниге о дизайне транспортных схем Илья Бирман подробно описал, в чём проблема с обычными радиальными скруглениями:
«При радиальном скруглении линия составляется из трёх приставленных друг к другу фрагментов: отрезка прямой, дуги окружности, снова отрезка прямой. Это противоестественно, реальные объекты так не гнутся. Если согнуть стальной прут или душевой шланг, радиус кривизны будет плавно возрастать в направлении от центра изгиба. Точно указать точку, где изгиб заканчивается, будет невозможно.
Линии, скруглённые радиусом, тоже в каком‑то смысле сломаны — достаточно один раз увидеть места, где дуга окружности «приделывается» к прямым отрезкам, и развидеть их уже не получится».
Раньше сгладить скругления в вёрстке можно было только малонадёжными костылями. В 2025 у нас наконец‑то появилось специальное свойство — corner-shape с мелодичным значением squircle.
.btn {
/* … */
border-radius: 20px;
}
.btn.smooth {
corner-shape: squircle;
}
Но пока есть два нюанса.
corner‑shape. Can I Use
Во‑первых, свойство поддерживается в большинстве, но ещё не во всех браузерах. Где не поддерживается — скругления останутся без сглаживания.
corner‑shape. Can I Use
Во‑вторых, при одинаковом значении border-radius, визуально скругление со squircle получится сильно меньше. Это заметно в примере выше.
Чтобы сохранить размер скругления при сглаживании, значение border-radius придётся сильно увеличивать. И если при этом браузер не поддерживает сглаживание, вы получите элемент с неадекватным скруглением:
.btn {
/* … */
border-radius: 20px;
}
.btn.smooth {
border-radius: 45px;
corner-shape: squircle;
}
Поэтому сейчас при работе со сглаживанием лучше использовать выражение @supports. Оно проверяет поддержку сглаживания в браузере и только в этом случае применяет указанные свойства:
.btn {
border-radius: 20px;
}
@supports(corner-shape: squircle) {
.btn.smooth {
corner-shape: squircle;
border-radius: 45px;
}
}
А если у вас в проекте есть препроцессоры стилей, всю эту конструкцию можно вынести в миксин и частично автоматизировать. Например, так:
/* Пример в препроцессоре SCSS*/
@mixin smooth-br($br) {
border-radius: $br;
@supports (corner-shape: squircle) {
corner-shape: squircle;
border-radius: calc($br * 1.85);
}
}
@include smooth-br(20px);
P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.

