<basic-shape>
Базовая линия Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.
Тип данных <basic-shape> CSS тип данных представляет собой форму, используемую в свойствах clip-path, shape-outside и offset-path.
Попробовать
Синтаксис
Тип данных <basic-shape> используется для создания основных фигур, включая прямоугольники с помощью отступов контейнера, с помощью расстояния координат или с помощью установленных размеров, круги, эллипсы, многоугольники, траектории и созданные пользователем формы. Эти основные фигуры определяются с помощью одной <basic_shape> функции CSS, причем каждое значение требует параметра, который следует синтаксису, специфичному для функции формы.
Общие параметры
Параметры, общие для синтаксиса некоторых функций основных форм, включают:
round <'border-radius'>-
Определяет скругленные углы для прямоугольников с отступами контейнера, прямоугольников по расстоянию и прямоугольников с размерами с использованием того же синтаксиса, что и сокращенное свойство CSS
border-radius. <shape-radius>-
Определяет радиус для круга или эллипса. Допустимые значения включают
<length>,<percentage>,closest-side(по умолчанию) иfarthest-side. Отрицательные значения недопустимы.Значение ключевого слова
closest-sideиспользует длину от центра фигуры до ближайшей стороны области-ссылки для создания длины радиуса. Значение ключевого словаfarthest-sideиспользует длину от центра фигуры до самой дальней стороны области-ссылки. <position>-
Определяет центральное
<position>круга или эллипса. По умолчанию используетсяcenterесли не указано. <fill-rule>-
Устанавливает
fill-rule, используемый для определения того, как должна быть заполнена внутренняя часть фигуры, определенной многоугольниками polygon, путями и фигурами. Возможные значения —nonzero(по умолчанию) иevenodd.Примечание:
<fill-rule>не поддерживается вoffset-path, и его использование делает свойство недействительным.
Синтаксис для прямоугольников с отступами контейнера
Функция inset() создает прямоугольник с отступом, размер которого определяется расстоянием смещения каждой из четырех сторон его контейнера и, необязательно, скругленными углами.
inset( <length-percentage>{1,4} [ round <`border-radius`> ]? )
Когда все первые четыре аргумента заданы, они представляют собой верхний, правый, нижний и левый смещения от внутренней области-ссылки, определяющие положение краев прямоугольника с отступом. Эти аргументы следуют синтаксису сокращенного свойства margin, который позволяет задать все четыре отступа одним, двумя, тремя или четырьмя значениями.
Если пара отступов для измерения суммируется более чем на 100 % этого измерения, оба значения пропорционально уменьшаются таким образом, чтобы их сумма составляла 100 %. Например, значение inset(90% 10% 60% 10%) имеет верхний отступ 90% и нижний отступ 60%. Эти значения уменьшаются пропорционально до inset(60% 10% 40% 10%). Такие фигуры, которые не охватывают никакой области и не имеют shape-margin, не влияют на обертку.
Синтаксис для прямоугольников по расстоянию
Функция rect() определяет прямоугольник, используя указанные расстояния от верхнего и левого краев области-ссылки, с необязательными скругленными углами.
rect( [ <length-percentage> | auto ]{4} [ round <`border-radius`> ]? )
При использовании функции rect() вы не определяете ширину и высоту прямоугольника. Вместо этого вы указываете четыре значения для создания прямоугольника, размеры которого определяются размером области-ссылки и четырьмя значениями смещения. Каждое значение может быть <length>, <percentage> или ключевым словом auto. Ключевое слово auto интерпретируется как 0% для значений сверху и слева и как 100% для значений снизу и справа.
Синтаксис для прямоугольников с размерами
Функция xywh() определяет прямоугольник, расположенный на указанных расстояниях слева (x) и сверху (y) от краев области-ссылки и имеющий заданную ширину (w) и высоту (h) прямоугольника в указанном порядке, с необязательными скругленными углами.
xywh( <length-percentage>{2} <length-percentage [0,∞]>{2} [ round <`border-radius`> ]? )
Синтаксис для кругов
Функция circle() определяет круг, используя радиус и положение.
circle( <shape-radius>? [ at <position> ]? )
Аргумент <shape-radius> представляет собой радиус круга, определённый как <length> или <percentage>. Значение процента здесь вычисляется из используемой ширины и высоты области-ссылки как sqrt(width^2+height^2)/sqrt(2). Если он опущен, радиус определяется значением closest-side.
Синтаксис для эллипсов
Функция ellipse() определяет эллипс, используя два радиуса и положение.
ellipse( [ <shape-radius>{2} ]? [ at <position> ]? )
Аргументы <shape-radius> представляют собой rx и ry — радиусы эллипса по осям x и y соответственно. Эти значения задаются как <length> или <percentage>. Значения процентов здесь вычисляются относительно используемой ширины (для значения rx) и используемой высоты (для значения ry) области-ссылки. Если предоставлено только одно значение радиуса, функция формы ellipse() недействительна. Если значения не предоставлены, используется 50% 50%.
Синтаксис для многоугольников
Функция polygon() определяет многоугольник, используя SVG fill-rule и набор координат.
polygon( <`fill-rule`>?, [ <length-percentage> <length-percentage> ]# )
Функция принимает список пар координат, разделенных запятыми, каждая из которых состоит из двух значений, разделенных пробелами, как пара xi и yi. Эти значения представляют координаты по осям x и y многоугольника в позиции i (вершина, где пересекаются две линии).
Синтаксис для траекторий
Функция path() определяет фигуру, используя SVG fill-rule и определение траектории SVG.
path( <`fill-rule`>?, ]? <string> )
Требуемый <string> — это SVG-траектория в виде строкового значения в кавычках. Функция path() не является допустимым значением свойства shape-outside.
Синтаксис для фигур
Функция shape() определяет фигуру, используя начальную точку и серию команд фигуры.
shape( <fill-rule>? from <coordinate-pair>, <shape-command># )
Параметр from <coordinate-pair> представляет собой начальную точку для первой команды фигуры, а <shape-command> определяет одну или несколько команд фигуры, которые похожи на команды SVG-траекторий. Функция shape() не является допустимым значением свойства shape-outside.
Описание
При создании фигуры, область отсчёта определяется свойством, использующим значения <basic-shape>. Система координат фигуры по умолчанию имеет начало в верхнем левом углу рамки элемента, ось X направлена вправо, а ось Y — вниз. Все длины, выраженные в процентах, вычисляются относительно размеров области отсчёта.
По умолчанию, областью отсчёта является margin-box, как показано на изображении ниже. На изображении показан круг, созданный с помощью shape-outside: circle(50%), где выделены различные части модели рамки, как отображаются в средствах разработчика браузера. Фигура здесь определена относительно margin-box.
Вычисленные значения базовых фигур
Значения в функции <basic-shape> вычисляются как указано, с учётом следующих моментов:
- Для пропущенных значений используются значения по умолчанию.
- Значение
<position>вcircle()илиellipse()вычисляется как пара смещений от верхнего левого угла области отсчёта: первое смещение — горизонтальное, второе — вертикальное. Каждое смещение задаётся как значение<length-percentage>. - Значение
<border-radius>вinset()расширяется в список из восьми значений, каждое из которых является либо<length>, либо<percentage>. -
inset(),rect()иxywh()функции вычисляются как эквивалентные функцииinset().
Интерполяция базовых фигур
При анимации между двумя функциями <basic-shape>, следуют правила интерполяции, перечисленные ниже. Значения параметров каждой функции <basic-shape> образуют список. Для интерполяции между двумя фигурами обе фигуры должны использовать одну и ту же область отсчёта, и количество и тип значений в обоих списках <basic-shape> должны совпадать.
Каждое значение в списках двух функций <basic-shape> интерполируется на основе его вычисленного значения как <number>, <length>, <percentage>, <angle> или calc(), где это возможно. Интерполяция всё ещё может произойти, если значения не являются одним из этих типов данных, но идентичны между двумя интерполируемыми функциями базовой фигуры, такими как nonzero.
-
Обе фигуры имеют тип
ellipse()или типcircle(): Интерполяция применяется к каждому соответствующему значению, если их радиусы заданы как<length>или<percentage>(а не ключевыми словами, такими какclosest-sideилиfarthest-side). -
inset(): Интерполяция применяется к каждому соответствующему значению. -
polygon(): Интерполяция применяется к каждому соответствующему значению, если они используют ту же<fill-rule>и имеют одинаковое количество пар координат, разделённых запятыми. -
path(): Интерполяция применяется к каждому параметру как к<number>, если строки пути в обеих фигурах соответствуют количеству, типу и последовательности команд данных пути. -
shape(): Интерполяция применяется к каждому соответствующему значению, если они имеют одинаковый ключевое слово команды и используют то же ключевое слово<by-to>. Еслиshape()используется в свойствеclip-path, две фигуры интерполируются, если у них также одинаковый<fill-rule>.-
Если они используют
<curve-command>или<smooth-command>, количество контрольных точек должно совпадать для интерполяции. -
Если они используют
<arc-command>с разными направлениями<arc-sweep>, интерполированный результат идёт по часовой стрелке (cw). Если они используют разные ключевые слова<arc-size>, размер интерполируется с использованием значенияlarge.
-
-
Одна фигура имеет тип
path(), а другая — типshape(): Интерполяция применяется к каждому соответствующему значению, если список команд данных пути идентичен по количеству и последовательности. Интерполированная фигура является функциейshape(), сохраняя тот же список команд данных пути.
Во всех остальных случаях интерполяция не происходит, и анимация является дискретной.
Примеры
Анимированный многоугольник
В этом примере мы используем правило @keyframes для анимации обрезки между двумя многоугольниками. Обратите внимание, что оба многоугольника имеют одинаковое количество вершин, что необходимо для работы этого типа анимации.
HTML
<div></div>
CSS
div {
width: 300px;
height: 300px;
background: repeating-linear-gradient(red, orange 50px);
clip-path: polygon(
50% 0%,
60% 40%,
100% 50%,
60% 60%,
50% 100%,
40% 60%,
0% 50%,
40% 40%
);
animation: 4s poly infinite alternate ease-in-out;
margin: 10px auto;
}
@keyframes poly {
from {
clip-path: polygon(
50% 0%,
60% 40%,
100% 50%,
60% 60%,
50% 100%,
40% 60%,
0% 50%,
40% 40%
);
}
to {
clip-path: polygon(
50% 30%,
100% 0%,
70% 50%,
100% 100%,
50% 70%,
0% 100%,
30% 50%,
0% 0%
);
}
}
Результат
Спецификации
| Спецификация |
|---|
| CSS Shapes Module Level 1 # basic-shape-functions |
Совместимость с браузерами
| Рабочий стол | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
basic-shape |
37 | 79 | 54 | 24 | 10.1 | 37 | 54 | 24 | 10.3 | 3.0 | 37 |
animation |
37 | 79 | 54 | 24 | 10.1 | 37 | 54 | 24 | 10.3 | 3.0 | 37 |
circle |
37 | 79 | 54 | 24 | 10.1 | 37 | 54 | 24 | 10.3 | 3.0 | 37 |
ellipse |
37 | 79 | 54 | 24 | 10.1 | 37 | 54 | 24 | 10.3 | 3.0 | 37 |
inset |
37 | 79 | 54 | 24 | 10.1 | 37 | 54 | 24 | 10.3 | 3.0 | 37 |
path |
52 | 79 | 72 | 39 | 13.110.1 | 52 | 79 | 41 | 1310.3 | 6.0 | 52 |
polygon |
37 | 79 | 54 | 24 | 10.1 | 37 | 54 | 24 | 10.3 | 3.0 | 37 |
rect |
116Только в свойствеoffset-path. |
116Только в свойствеoffset-path. |
122 | 102Только в свойствеoffset-path. |
17.2 | 116Только в свойствеoffset-path. |
122 | 78Только в свойствеoffset-path. |
17.2 | 24.0Только в свойствеoffset-path. |
116Только в свойствеoffset-path. |
shape |
Нет | Нет | preview126 | Нет | preview | Нет | Нет | Нет | Нет | Нет | Нет |
xywh |
116Только в свойствеoffset-path. |
116Только в свойствеoffset-path. |
122 | 102Только в свойствеoffset-path. |
17.2 | 116Только в свойствеoffset-path. |
122 | 78Только в свойствеoffset-path. |
17.2 | 24.0Только в свойствеoffset-path. |
116Только в свойствеoffset-path. |
См. также
- Свойства, использующие этот тип данных:
clip-path,offset-path,shape-outside, - Модуль CSS shapes
- Обзор CSS фигур
- Редактирование путей фигур в CSS — инструменты разработчика Firefox
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/basic-shape