Свойство CSS `corner-shape`
Baseline Ограниченная доступность
Эта функция не входит в Baseline, поскольку не работает в некоторых наиболее широко используемых браузерах.
Экспериментальная: Это экспериментальная технология
Перед использованием в production внимательно изучите таблицу совместимости с браузерами.
Экспериментальная: Это экспериментальная технология
Перед использованием в production внимательно изучите таблицу совместимости с браузерами.
corner-shape — это CSS-сокращённое свойство, задающее форму углов блока в пределах области, определяемой значением свойства border-radius.
Составные свойства
Это свойство является сокращённой записью следующих физических свойств:
Синтаксис
/* Single value set for all four corners */ corner-shape: bevel; /* top-left and bottom-right, top-right and bottom-left */ corner-shape: notch superellipse(0.6); /* top-left, top-right and bottom-left, bottom-right */ corner-shape: superellipse(-1.2) square squircle; /* top-left, top-right, bottom-right, bottom-left */ corner-shape: scoop superellipse(-1.6) superellipse(-2.2) round; /* Global values */ corner-shape: inherit; corner-shape: initial; corner-shape: revert; corner-shape: revert-layer; corner-shape: unset;
Свойство corner-shape можно задать одним, двумя, тремя или четырьмя значениями <corner-shape-value>:
- Если задано одно значение, оно определяет форму всех четырёх углов.
- Если заданы два значения, первая форма применяется к верхнему левому и нижнему правому углам, а вторая — к верхнему правому и нижнему левому.
- Если заданы три значения, первое определяет форму верхнего левого угла, второе — верхнего правого и нижнего левого углов, а третье — нижнего правого угла.
- Если заданы четыре значения, они определяют форму верхнего левого, верхнего правого, нижнего правого и нижнего левого углов именно в таком порядке (по часовой стрелке).
Значения
-
<corner-shape-value> - Функция
superellipse()или эквивалентное ей ключевое слово, описывающее форму угла.
Описание
Свойство corner-shape используется для изменения формы скруглённых углов, созданных свойством border-radius и связанными с ним развернутыми свойствами. Форму уже скруглённых углов можно дополнительно настраивать, изменяя степень скругления; это позволяет, например, создавать скошенные, выемчатые углы и углы в форме сквиркла. Границы, контуры, тени и фоновые эффекты контейнера будут соответствовать заданной форме углов.
Если для контейнера не задано свойство border-radius или его значение border-radius вычисляется как 0, свойство corner-shape не действует.
Сокращённое свойство corner-shape и связанные с ним сокращённые и развернутые свойства corner-*-shape принимают от одного до четырёх значений <corner-shape-value>. Каждое значение задаётся непосредственно функцией superellipse() или ключевым словом, описывающим распространённую форму. Каждому ключевому слову соответствует определённое значение superellipse().
Значение round, используемое по умолчанию (начальное значение) свойства corner-shape, даёт тот же эффект, что и border-radius без corner-shape. Также существует ключевое значение square, которое соответствует обычным прямоугольным углам и фактически удаляет все применённые эффекты border-radius. Значение bevel создаёт прямую линию между двумя концами border-radius.
Разные значения corner-shape можно плавно анимировать: в качестве значений интерполяции используются эквивалентные им значения superellipse() для ключевых слов.
Сокращённое свойство corner-shape особенно удобно, если нужно задать одинаковую форму для всех четырёх углов или установить разные значения одним объявлением. Чтобы задать форму только одного или двух углов за раз, используйте сокращённые и развернутые свойства corner-*-shape.
Сокращённые и развернутые свойства corner-*-shape
Сокращённое свойство corner-shape задаёт форму всех четырёх углов одним объявлением.
Чтобы задать форму только одного угла за раз, используйте развернутые свойства формы углов:
- Физические развернутые свойства формы углов:
- Логические развернутые свойства формы углов:
Чтобы задать форму двух углов за раз, используйте сокращённые свойства сторон:
- Физические сокращённые свойства сторон:
- Логические сокращённые свойства сторон:
Ограничение радиусов формы противоположных углов
Если для противоположных углов заданы значения border-radius и corner-shape, из-за которых формы накладываются друг на друга, браузер ограничивает эти значения, чтобы предотвратить наложение.
Например, следующие значения привели бы к наложению верхнего левого и нижнего правого углов, поэтому браузер изменяет первый компонент border-radius так, чтобы избежать этого.
div {
width: 480px;
height: 200px;
background-color: goldenrod;
border-radius: 80% 20px;
corner-shape: scoop;
}
Свойства, следующие форме corner-shape
При задании для контейнера следующие свойства принимают форму его углов:
Примеры приведены в разделе Демонстрация свойств, следующих форме corner-shape.
Взаимодействие со свойством border-shape
Свойство corner-shape не действует, если для элемента задано свойство border-shape. Это связано с несовместимостью border-shape и border-radius: при задании border-shape любое указанное значение border-radius игнорируется; corner-shape зависит от border-radius и поэтому также не действует.
Если вы хотите использовать углы заданной формы в border-shape, их нужно нарисовать непосредственно как часть формы.
Формальное определение
| Начальное значение | как у каждого из свойств сокращённой записи: |
|---|---|
| Применяется к | ко всем элементам |
| Наследуется | нет |
| Вычисленное значение | как у каждого из свойств сокращённой записи: |
| Тип анимации | как у каждого из свойств сокращённой записи: |
Формальный синтаксис
corner-shape = <corner-shape-value>{1,4} <corner-shape-value> = round | scoop | bevel | notch | square | squircle | <superellipse()> <superellipse()> = superellipse( [ <number> | infinity | -infinity ] )
Примеры
Базовое использование corner-shape
HTML
Разметка этого примера содержит один элемент <div>.
<div>Nice scooped corners</div>
CSS
Мы задаём блоку фиксированную height, box-shadow, border-radius размером 30 пикселей и corner-shape со значением scoop, а также некоторые дополнительные стили, опущенные для краткости.
body {
font-family: "Helvetica", "Arial", sans-serif;
width: 240px;
margin: 20px auto;
}
div {
display: flex;
justify-content: center;
align-items: center;
background-color: cyan;
background-image: linear-gradient(
to bottom,
rgb(255 255 255 / 0),
rgb(255 255 255 / 0.5)
);
}
@supports not (corner-shape: scoop) {
body {
all: unset !important;
}
body::before {
content: "Your browser does not support the 'corner-shape' property.";
color: black;
background-color: #ffcd33;
display: block;
width: 100%;
text-align: center;
padding: 1rem 0;
}
}
div {
height: 180px;
box-shadow: 1px 1px 3px gray;
border-radius: 30px;
corner-shape: scoop;
}
Результат
Отображённый результат выглядит так:
Обратите внимание: значение corner-shape свойства scoop придаёт контейнеру вогнутые углы — кривая является инверсией кривой border-radius по умолчанию. Также обратите внимание, что фон, граница и тень блока повторяют форму кривой.
Демонстрация свойств, следующих форме corner-shape
HTML
Разметка этого примера содержит один элемент <div> с текстом внутри.
<div> Some styles follow the corner shape, such as border, outline, box-shadow, overflow, and backdrop-filter. This is useful for helping various aspects of your design to not clash. As shown, it can result in some interesting visual effects, so you should test your design carefully. </div>
CSS
Чтобы продемонстрировать, как некоторые стили повторяют форму углов контейнера, мы применяем background-image к <body> документа, а затем задаём border-radius со значением 40px и corner-shape со значением scoop notch для <div>.
Затем мы применяем к <div> следующее:
- Полупрозрачный
background-color. - Разные цвета и стили
borderдля каждой стороны. backdrop-filter, инвертирующийbackground-image, заданный для<body>.- Стиль
:hover, позволяющий увидеть, что кликабельная область содержимого выходит за пределы формы углов.
Дополнительные стили настройки опущены для краткости.
html {
height: 100%;
}
body {
font-family: "Helvetica", "Arial", sans-serif;
height: inherit;
margin: 0;
display: flex;
justify-content: center;
align-items: center;
}
div {
width: 240px;
height: 180px;
}
@supports not (corner-shape: scoop notch) {
:root::before {
content: "Your browser does not support the 'corner-shape' property.";
color: black;
background-color: wheat;
display: block;
text-align: center;
padding: 1rem 0;
}
}
body {
background: url("https://mdn.github.io/shared-assets/images/examples/leopard.jpg")
no-repeat;
background-size: cover;
}
div {
border-radius: 40px;
corner-shape: scoop notch;
background-color: rgb(255 255 255 / 0.2);
border-top: 3px solid blue;
border-left: 6px dashed red;
border-bottom: 9px solid yellow;
border-right: 12px double green;
backdrop-filter: invert(100%);
}
div:hover {
background-color: white;
}
Результат
Отображённый результат выглядит так:
Обратите внимание: большинство заданных стилей повторяют форму <div>, полученную благодаря стилям corner-shape, но не все. Содержимое отображается относительно исходного блока, а эффект при наведении по-прежнему применяется, если навести курсор на текст, выступающий за верхний и нижний левый углы.
Сравнение значений corner-shape
В этой демонстрации можно выбрать разные значения corner-shape и задать контейнеру разные значения border-radius, чтобы сравнить результаты.
HTML
Разметка этого примера содержит средство выбора <select>, в котором можно выбрать разные значения corner-shape, ползунок <input type="range"> для выбора разных значений border-radius и элемент <section>, создающий контейнер для применения этих значений. Элементы <option> списка выбора предлагают несколько вариантов ключевых слов и значений superellipse(), разделённых на две группы с помощью элементов <optgroup>. Для значений-ключевых слов мы также указали эквивалентное значение superellipse(), отделив его вертикальной чертой.
<form>
<div>
<label for="corner-shape-choice">Choose a corner-shape value:</label>
<select id="corner-shape-choice">
<optgroup label="Keywords">
<option value="square">square | superellipse(infinity)</option>
<option selected value="squircle">squircle | superellipse(2)</option>
<option value="round">round | superellipse(1)</option>
<option value="bevel">bevel | superellipse(0)</option>
<option value="scoop">scoop | superellipse(-1)</option>
<option value="notch">notch | superellipse(-infinity)</option>
</optgroup>
<optgroup label="Functions">
<option>superellipse(3)</option>
<option>superellipse(1.5)</option>
<option>superellipse(0.5)</option>
<option>superellipse(-0.5)</option>
<option>superellipse(-1.5)</option>
<option>superellipse(-3)</option>
</optgroup>
</select>
</div>
<div>
<label for="radius-slider">Choose a border-radius value:</label>
<input
type="range"
id="radius-slider"
min="0"
value="45"
max="90"
step="1" />
</div>
</form>
<section></section>
CSS
Мы применяем box-shadow к <section>. Также задаём <section> и элементам формы базовые стили, опущенные для краткости.
html {
font-family: "Helvetica", "Arial", sans-serif;
}
body {
width: fit-content;
margin: 20px auto;
}
section {
display: flex;
justify-content: center;
align-items: center;
margin-top: 20px;
}
select {
padding: 3px 5px;
}
form div:nth-of-type(2) {
margin-top: 5px;
display: flex;
}
section {
width: 100%;
height: 180px;
background-color: gold;
background-image: linear-gradient(
to bottom,
rgb(255 255 255 / 0),
rgb(255 255 255 / 0.5)
);
}
@supports not (corner-shape: scoop) {
:root::before {
content: "Your browser does not support the 'corner-shape' property.";
background-color: wheat;
display: block;
text-align: center;
padding: 1rem 0;
}
}
section {
box-shadow: 1px 1px 3px gray;
}
const rectangle = document.querySelector("section");
const select = document.querySelector("select");
const range = document.getElementById("radius-slider");
function setCorners() {
rectangle.style.cornerShape = select.value;
const brValue = `${range.value}px`;
rectangle.style.borderRadius = brValue;
rectangle.innerHTML = `<div><code>corner-shape: ${select.value};</code><br><code>border-radius: ${brValue};</code></div>`;
}
select.addEventListener("change", setCorners);
range.addEventListener("input", setCorners);
setCorners();
Код JavaScript, применяющий выбранные пользователем значения к <section>, опущен для краткости.
Результат
Отображённый результат выглядит так:
Попробуйте выбрать разные значения, чтобы увидеть, как они влияют на форму углов.
Сравнение значений superellipse()
В этом примере представлены два ползунка <input type="range">, позволяющие перебирать множество значений corner-shape superellipse() и значений border-radius, чтобы сравнить влияние каждого из них на контейнер.
HTML
Разметка этого примера содержит два элемента <input type="range">, с помощью которых можно выбрать разные значения corner-shape superellipse() и border-radius, а также элемент <section>, к которому применяются эти значения.
<form>
<div>
<label for="superellipse-slider">Choose a superellipse() value:</label>
<input
type="range"
id="superellipse-slider"
min="-5"
value="0"
max="5"
step="0.1" />
</div>
<div>
<label for="radius-slider">Choose a border-radius value:</label>
<input
type="range"
id="radius-slider"
min="0"
value="45"
max="90"
step="1" />
</div>
</form>
<section></section>
CSS
Мы применяем box-shadow к элементу <section>. Дополнительные базовые стили опущены для краткости.
html {
font-family: "Helvetica", "Arial", sans-serif;
}
body {
width: fit-content;
margin: 20px auto;
}
section {
display: flex;
justify-content: center;
align-items: center;
margin-top: 20px;
}
form div {
margin-top: 5px;
display: flex;
}
section {
width: 100%;
height: 180px;
background-color: orange;
background-image: linear-gradient(
to bottom,
rgb(255 255 255 / 0),
rgb(255 255 255 / 0.5)
);
}
@supports not (corner-shape: superellipse(0)) {
:root::before {
content: "Your browser does not support the 'corner-shape' property.";
background-color: wheat;
display: block;
text-align: center;
padding: 1rem 0;
}
}
section {
box-shadow: 1px 1px 3px gray;
}
const rectangle = document.querySelector("section");
const superEllipseRange = document.getElementById("superellipse-slider");
const borderRadiusRange = document.getElementById("radius-slider");
function setCorners() {
const seValue = `superellipse(${superEllipseRange.value})`;
rectangle.style.cornerShape = seValue;
const brValue = `${borderRadiusRange.value}px`;
rectangle.style.borderRadius = brValue;
rectangle.innerHTML = `<div><code>corner-shape: ${seValue};</code><br><code>border-radius: ${brValue};</code></div>`;
}
superEllipseRange.addEventListener("input", setCorners);
borderRadiusRange.addEventListener("input", setCorners);
setCorners();
Код JavaScript, применяющий выбранные пользователем значения к <section>, опущен для краткости.
Результат
Отображённый результат выглядит так:
Попробуйте выбрать разные значения, чтобы увидеть, как они влияют на форму углов.
Анимация corner-shape
В этом примере показано, как можно анимировать свойство corner-shape.
HTML
<div></div>
CSS
Мы создаём набор правил @keyframes, плавно анимирующих переход между значениями corner-shape свойств square и notch. Затем мы применяем animation на основе этих @keyframes к <div>, когда наводят курсор на содержащий его элемент <html> или переводят его в фокус. Дополнительные базовые стили <div> опущены для краткости.
body {
width: 200px;
margin: 20px auto;
}
div {
width: 100%;
height: 200px;
background-color: green;
background-image: linear-gradient(
to bottom,
rgb(255 255 255 / 0),
rgb(255 255 255 / 0.5)
);
box-shadow: 1px 1px 3px gray;
border-radius: 50%;
corner-shape: square;
outline: none;
}
@supports not (corner-shape: square) {
:root::before {
content: "Your browser does not support the 'corner-shape' property.";
background-color: wheat;
display: block;
text-align: center;
padding: 1rem 0;
}
}
@keyframes corner-pulse {
0% {
corner-shape: square;
}
/* To make the starting point apparent, let us keep
the shape the same for a small duration. */
20% {
corner-shape: square;
}
100% {
corner-shape: notch;
}
}
div {
animation: corner-pulse infinite alternate 4s linear;
}
Результат
Отображённый результат выглядит так:
Спецификации
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | WebView для Android | WebView на iOS | |
corner-shape |
139 |
139 |
Нет |
123 |
предварительная версия |
139 |
Нет |
91 |
Нет |
30.0 |
139 |
Нет |
bevel |
139 |
139 |
Нет |
123 |
предварительная версия |
139 |
Нет |
91 |
Нет |
30.0 |
139 |
Нет |
notch |
139 |
139 |
Нет |
123 |
предварительная версия |
139 |
Нет |
91 |
Нет |
30.0 |
139 |
Нет |
round |
139 |
139 |
Нет |
123 |
предварительная версия |
139 |
Нет |
91 |
Нет |
30.0 |
139 |
Нет |
scoop |
139 |
139 |
Нет |
123 |
предварительная версия |
139 |
Нет |
91 |
Нет |
30.0 |
139 |
Нет |
square |
139 |
139 |
Нет |
123 |
предварительная версия |
139 |
Нет |
91 |
Нет |
30.0 |
139 |
Нет |
squircle |
139 |
139 |
Нет |
123 |
предварительная версия |
139 |
Нет |
91 |
Нет |
30.0 |
139 |
Нет |
См. также
border-radiusborder-shape- Модуль границ и декораций блоков CSS
- Модуль фонов и границ CSS
- Модуль анимаций CSS
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/corner-shape