CSS-свойство `mask-origin`
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с декабря 2023 года.
CSS-свойство mask-origin CSS задаёт начало координат маски. Это свойство определяет область позиционирования маски — область, в пределах которой размещается изображение маски. Маски HTML-элементов могут быть ограничены граничной рамкой содержимого, полем или областью содержимого, а маски SVG-элементов (у которых нет соответствующих блоков CSS-макета) могут быть ограничены областью заливки, обводки или областью просмотра. Для элементов, отрисовываемых в виде нескольких блоков, например текста в <span>, занимающего несколько строк, свойство mask-origin определяет, к каким блокам применяется свойство box-decoration-break для определения области позиционирования маски.
Синтаксис
/* Keyword values */ mask-origin: content-box; mask-origin: padding-box; mask-origin: border-box; mask-origin: fill-box; mask-origin: stroke-box; mask-origin: view-box; /* Multiple values */ mask-origin: padding-box, content-box; mask-origin: view-box, fill-box, border-box; /* Global values */ mask-origin: inherit; mask-origin: initial; mask-origin: revert; mask-origin: revert-layer; mask-origin: unset;
Значения
Свойство mask-origin принимает разделённый запятыми список ключевых слов <coord-box>, в который входят:
-
content-box - Положение определяется относительно области содержимого.
-
padding-box - Положение определяется относительно поля.
-
border-box - Положение определяется относительно граничной рамки.
-
fill-box - Положение определяется относительно ограничивающей рамки объекта.
-
stroke-box - Положение определяется относительно ограничивающей рамки обводки.
-
view-box - В качестве опорной рамки используется ближайшая область просмотра SVG. Если для элемента, создающего область просмотра SVG, задан атрибут
viewBox, опорная рамка располагается в начале системы координат, заданной атрибутомviewBox, а её размеры устанавливаются равными значениям ширины и высоты атрибутаviewBox.
Существуют три нестандартных значения, являющихся сокращёнными вариантами стандартных значений <coord-box>: content — псевдоним content-box, padding — псевдоним padding-box, а border — псевдоним border-box.
Описание
Свойство mask-origin очень похоже на свойство background-origin, но набор его значений и начальное значение отличаются. Начальное значение зависит от наличия связанного блока CSS-макета: если он есть, значением по умолчанию будет border-box. Для сравнения, значение по умолчанию для background-origin — padding-box.
Для SVG-элементов без связанного блока CSS-макета значения content-box, padding-box и border-box (значение по умолчанию) вычисляются как fill-box, то есть положение определяется относительно ограничивающей рамки объекта. Для HTML-элементов, если задано одно из значений, связанных с SVG, — fill-box, stroke-box или view-box, оно вычисляется как border-box.
К элементу можно применить несколько слоёв маски. Количество слоёв определяется количеством разделённых запятыми значений свойства mask-image (даже если одно или несколько из этих значений — none). Каждое значение mask-origin в разделённом запятыми списке сопоставляется со значением mask-image из разделённого запятыми списка в том же порядке.
Если количество значений в двух свойствах различается, лишние значения mask-origin не используются, когда у mask-origin значений больше, чем у mask-image. Если у mask-origin значений меньше, чем у mask-image, значения mask-origin повторяются.
Для элементов, отрисовываемых в виде одного блока, это свойство задаёт область позиционирования маски — или исходное положение — изображения, указанного свойством mask-image.
Для элементов, отрисовываемых в виде нескольких блоков, например встроенных блоков, занимающих несколько строк, свойство mask-origin определяет, к каким блокам применяется свойство box-decoration-break для определения области позиционирования маски.
Свойство mask-origin может привести к обрезке изображения слоя маски. Например, если свойству mask-clip задано значение padding-box, свойству mask-origin — значение border-box, а свойству mask-position — значение top left края, то изображение слоя маски будет обрезано по верхнему левому краю, если у элемента есть рамка.
Формальное определение
| Начальное значение | border-box |
|---|---|
| Применяется к | всем элементам; в SVG применяется к контейнерным элементам, кроме элемента <defs>, и ко всем графическим элементам |
| Наследуется | нет |
| Вычисленное значение | как задано |
| Тип анимации | дискретный |
Формальный синтаксис
mask-origin = <coord-box># <coord-box> = <paint-box> | view-box <paint-box> = <visual-box> | fill-box | stroke-box <visual-box> = content-box | padding-box | border-box
Примеры
Сравнение области содержимого, поля и граничной рамки
В этом примере показано базовое использование свойства mask-origin с тремя разными значениями.
HTML
Мы добавляем четыре элемента <section>, каждый из которых содержит один элемент <div>.
<section class="content"> <div></div> </section> <section class="padding"> <div></div> </section> <section class="border"> <div></div> </section> <section class="comparison"> <div></div> </section>
CSS
Для каждого элемента <div> мы задаём border, padding и margin. Они создают опорные точки для начала координат изображения маски. Краткая запись border включает border-color. Мы также задаём background-color. Они создают зелёный фон и синюю рамку для маски. Наконец, каждому элементу <div> задаётся mask-image.
div {
width: 100px;
height: 100px;
margin: 10px;
border: 10px solid blue;
background-color: #8cffa0;
padding: 10px;
mask-image: url("https://mdn.github.io/shared-assets/images/examples/mask-star.svg");
}
section {
border: 1px solid black;
}
Каждому элементу <div> задаём своё значение mask-origin.
.content div {
mask-origin: content-box;
}
.padding div {
mask-origin: padding-box;
}
.border div {
mask-origin: border-box;
}
.comparison div {
mask-image: none;
}
Кроме того, мы добавляем текст внутрь каждого элемента <section>, чтобы указать начало координат маски для каждого контейнера <div>.
section::before {
content: attr(class);
display: block;
text-align: center;
}
body {
display: flex;
flex-flow: row wrap;
gap: 10px;
}
Результат
Обратите внимание на различия между тремя значениями. В первых трёх блоках маска начинается соответственно:
- У внешнего края рамки.
- У внутреннего края рамки, совпадающего с внешним краем поля.
- У внутреннего края поля, совпадающего с внешним краем области содержимого.
Для четвёртого блока значение mask-image не задано: это эталонное изображение, которое помогает наглядно увидеть границы областей содержимого и поля.
Несколько значений
В этом примере показано, как задать разные значения mask-origin для разных mask-image, применённых к одному элементу.
HTML
Мы добавляем один элемент <div>.
<div></div>
CSS
Вместо одного мы задаём три изображения маски, каждое с отдельным значением mask-position. Также мы отключаем повторение изображений маски.
div {
width: 120px;
height: 120px;
margin: 10px;
border: 10px solid blue;
background-color: #8cffa0;
padding: 10px;
mask-image:
url("https://mdn.github.io/shared-assets/images/examples/mask-star.svg"),
url("https://mdn.github.io/shared-assets/images/examples/mask-star.svg"),
url("https://mdn.github.io/shared-assets/images/examples/mask-star.svg");
mask-position:
top left,
top right,
bottom center;
mask-repeat: no-repeat;
mask-origin: content-box, border-box;
}
Результаты
Задано три значения mask-image, но только два значения mask-origin. Это означает, что значения mask-origin повторяются, как если бы мы задали mask-origin: content-box, padding-box, content-box;. Звезда border-box — единственная маска, перекрывающая рамку; это звезда вверху справа.
Спецификации
| Спецификация |
|---|
| Модуль CSS Masking, уровень 1 # the-mask-origin |
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
mask-origin |
120
1
|
120
79
|
53 |
106
15
|
15.4
4
|
120
18
|
53 |
80
14
|
15.4
3.2
|
25.0
1.0
|
120
2
|
15.4
3.2
|
border |
1 |
79 |
Нет |
15 |
15.4
4
|
18 |
Нет |
14 |
15.4
3.2
|
1.0 |
2 |
15.4
3.2
|
border-box |
120 |
120 |
53 |
106 |
Нет |
120 |
53 |
80 |
Нет |
25.0 |
120 |
Нет |
content |
1 |
79 |
Нет |
15 |
15.4
4
|
18 |
Нет |
14 |
15.4
3.2
|
1.0 |
2 |
15.4
3.2
|
content-box |
120 |
120 |
53 |
106 |
Нет |
120 |
53 |
80 |
Нет |
25.0 |
120 |
Нет |
fill-box |
120 |
120 |
53 |
106 |
Нет |
120 |
53 |
80 |
Нет |
25.0 |
120 |
Нет |
padding |
1 |
79 |
Нет |
15 |
15.4
4
|
18 |
Нет |
14 |
15.4
3.2
|
1.0 |
2 |
15.4
3.2
|
padding-box |
120 |
120 |
53 |
106 |
Нет |
120 |
53 |
80 |
Нет |
25.0 |
120 |
Нет |
stroke-box |
120 |
120 |
53 |
106 |
Нет |
120 |
53 |
80 |
Нет |
25.0 |
120 |
Нет |
view-box |
120 |
120 |
53 |
106 |
Нет |
120 |
53 |
80 |
Нет |
25.0 |
120 |
Нет |
См. также
background-originmask-imagemask-positionmask-repeatmask-size-
Краткая запись
mask - Введение в маскирование CSS
- Свойства
maskCSS - Объявление нескольких масок
- Модуль маскирования 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/mask-origin