Spec-Zone.ru › CSS

CSS-свойство `mask`

Базовая поддержка Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с декабря 2023 года.

mask — CSS-свойство короткой записи, которое скрывает элемент (полностью или частично), маскируя или обрезая указанную область изображения. Это короткая запись для всех свойств mask-*. Свойство принимает одно или несколько значений, разделённых запятыми; каждое значение соответствует <mask-layer>.

Составные свойства

Это свойство является короткой записью для следующих свойств CSS:

  • mask-clip
  • mask-composite
  • mask-image
  • mask-mode
  • mask-origin
  • mask-position
  • mask-repeat
  • mask-size

Синтаксис

/* Keyword values */
mask: none;

/* Image values */
mask: url("mask.png"); /* Raster image used as mask */
mask: url("masks.svg#star"); /* SVG used as mask */

/* Combined values */
mask: url("masks.svg#star") luminance; /* Luminance mask */
mask: url("masks.svg#star") 40px 20px; /* Mask positioned 40px from the top and 20px from the left */
mask: url("masks.svg#star") 0 0/50px 50px; /* Mask with a width and height of 50px */
mask: url("masks.svg#star") repeat-x; /* Horizontally-repeated mask */
mask: url("masks.svg#star") stroke-box; /* Mask extends to the inside edge of the stroke box */
mask: url("masks.svg#star") exclude; /* Mask combined with background using non-overlapping parts */

/* Multiple masks */
mask:
  url("masks.svg#star") left / 16px repeat-y,
  /* 16px-wide mask on the left side */ url("masks.svg#circle") right / 16px
    repeat-y; /* 16px-wide mask against right side */

/* Global values */
mask: inherit;
mask: initial;
mask: revert;
mask: revert-layer;
mask: unset;

Значения

<mask-layer>
Один или несколько слоёв маски, разделённых запятыми и состоящих из следующих компонентов:
<mask-reference>
Задаёт источник изображения маски. См. mask-image.
<masking-mode>
Задаёт режим маскирования изображения маски. См. mask-mode.
<position>
Задаёт положение изображения маски. См. mask-position.
<bg-size>
Задаёт размер изображения маски. См. mask-size.
<repeat-style>
Задаёт повторение изображения маски. См. mask-repeat.
<geometry-box>
Если указано только одно значение <geometry-box>, оно задаёт значения свойств mask-origin и mask-clip. Если указаны два значения <geometry-box>, первое задаёт mask-origin, а второе — mask-clip.
<geometry-box> | no-clip
Задаёт область, на которую влияет изображение маски. См. mask-clip.
<compositing-operator>
Задаёт операцию композитинга для текущего слоя маски. См. mask-composite.

Описание

Свойство короткой записи mask скрывает часть элемента, к которому оно применено, или весь элемент. Какие части элемента будут скрыты, видны или частично видны, зависит от непрозрачности (альфа-канала маски) или яркости (светимости) маски. При альфа-маскировании непрозрачные области маски показывают элемент, а прозрачные — скрывают его. При маскировании по светимости светлые непрозрачные области маски показывают элемент, а тёмные или прозрачные — скрывают его.

Необязательно задавать все составляющие свойства маски, однако значения пропущенных свойств по умолчанию устанавливаются в их начальные значения:

mask-image: none;
mask-mode: match-source;
mask-position: 0% 0%;
mask-size: auto;
mask-repeat: repeat;
mask-origin: border-box;
mask-clip: border-box;
mask-composite: add;

Внутри каждого <mask-layer> компонент mask-size должен следовать после значения mask-position; эти значения разделяются косой чертой (/).

Если указаны два значения <geometry-box>, первое является значением mask-origin, а второе — значением mask-clip. Если указано одно значение <geometry-box> и ключевое слово no-clip, <geometry-box> является значением свойства mask-origin, поскольку no-clip допустимо только для свойства mask-clip. В этом случае порядок двух значений не имеет значения. Если указано только одно значение <geometry-box> (без ключевого слова no-clip), это значение используется для свойств mask-origin и mask-clip.

Поскольку короткая запись mask сбрасывает все свойства mask-border-* в их значение initial, следует объявлять эти свойства — или короткую запись mask-border — после любых объявлений mask. При указании mask в блоке объявлений также неявно задаются следующие свойства:

mask-border-source: none;
mask-border-mode: alpha;
mask-border-outset: 0;
mask-border-repeat: stretch;
mask-border-slice: 0;
mask-border-width: auto;

По этой причине спецификация рекомендует использовать короткую запись mask вместо отдельных составляющих свойств, чтобы переопределять маски, заданные ранее в каскаде. Это гарантирует, что mask-border также будет сброшено.

Формальное определение

Начальное значение как у каждого из свойств короткой записи:
  • mask-image
  • mask-mode
  • mask-repeat
  • mask-position
  • mask-clip
  • mask-origin
  • mask-size
  • mask-composite
Применяется к всем элементам; в SVG применяется к контейнерным элементам, за исключением элемента <defs>, и ко всем графическим элементам
Наследуется нет
Проценты как у каждого из свойств короткой записи:
  • mask-position
Вычисленное значение как у каждого из свойств короткой записи:
  • mask-image
  • mask-mode
  • mask-repeat
  • mask-position
  • mask-clip
  • mask-origin
  • mask-size
  • mask-composite
Тип анимации как у каждого из свойств короткой записи:
  • mask-image
  • mask-mode
  • mask-repeat
  • mask-position
  • mask-clip
  • mask-origin
  • mask-size
  • mask-composite

Формальный синтаксис

mask = 
  <mask-layer>#

<mask-layer> = 
  <mask-reference> ||
  <position> [ / <bg-size> ]? ||
  <repeat-style> ||
  <geometry-box> ||
  [ <geometry-box> | no-clip ] ||
  <compositing-operator> ||
  <masking-mode>

<mask-reference> = 
  none |
  <image> |
  <mask-source>

<position> = 
  [ [ left | center | right ] || [ top | center | bottom ] | [ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage> ]? | [ [ left | right ] <length-percentage> ] && [ [ top | bottom ] <length-percentage> ] ]

<bg-size> = 
  [ <length-percentage [0,∞]> | auto ]{1,2} |
  cover |
  contain

<repeat-style> = 
  repeat-x |
  repeat-y |
  [ repeat | space | round | no-repeat ]{1,2}

<geometry-box> = 
  <shape-box> |
  fill-box |
  stroke-box |
  view-box

<compositing-operator> = 
  add |
  subtract |
  intersect |
  exclude

<masking-mode> = 
  alpha |
  luminance |
  match-source

<image> = 
  <url> |
  <image()> |
  <image-set()> |
  <element()> |
  <paint()> |
  <cross-fade()> |
  <gradient>

<mask-source> = 
  <url>

<length-percentage> = 
  <length> |
  <percentage>

<shape-box> = 
  <visual-box> |
  margin-box

<image()> = 
  image( <image-tags>? [ <image-src>? , <color>? ]! )

<image-set()> = 
  image-set( <image-set-option># )

<element()> = 
  element( <id-selector> )

<paint()> = 
  paint( <ident>, <declaration-value>? )

<cross-fade()> = 
  cross-fade( <cf-mixing-image> , <cf-final-image>? )

<gradient> = 
  <linear-gradient()> |
  <repeating-linear-gradient()> |
  <radial-gradient()> |
  <repeating-radial-gradient()> |
  <conic-gradient()> |
  <repeating-conic-gradient()>

<visual-box> = 
  content-box |
  padding-box |
  border-box

<image-tags> = 
  ltr |
  rtl

<image-src> = 
  <url> |
  <string>

<color> = 
  <color-base> |
  currentColor |
  <system-color> |
  <light-dark()> |
  <deprecated-system-color>

<image-set-option> = 
  [ <image> | <string> ] [ <resolution> || type(<string>) ]

<id-selector> = 
  <hash-token>

<cf-mixing-image> = 
  <percentage>? &&
  <image>

<cf-final-image> = 
  <image> |
  <color>

<linear-gradient()> = 
  linear-gradient( [ <linear-gradient-syntax> ] )

<repeating-linear-gradient()> = 
  repeating-linear-gradient( [ <linear-gradient-syntax> ] )

<radial-gradient()> = 
  radial-gradient( [ <radial-gradient-syntax> ] )

<repeating-radial-gradient()> = 
  repeating-radial-gradient( [ <radial-gradient-syntax> ] )

<conic-gradient()> = 
  conic-gradient( [ <conic-gradient-syntax> ] )

<repeating-conic-gradient()> = 
  repeating-conic-gradient( [ <conic-gradient-syntax> ] )

<color-base> = 
  <hex-color> |
  <color-function> |
  <named-color> |
  <color-mix()> |
  transparent

<system-color> = 
  AccentColor |
  AccentColorText |
  ActiveText |
  ButtonBorder |
  ButtonFace |
  ButtonText |
  Canvas |
  CanvasText |
  Field |
  FieldText |
  GrayText |
  Highlight |
  HighlightText |
  LinkText |
  Mark |
  MarkText |
  SelectedItem |
  SelectedItemText |
  VisitedText

<light-dark()> = 
  light-dark( <color>, <color> )

<deprecated-system-color> = 
  ActiveBorder |
  ActiveCaption |
  AppWorkspace |
  Background |
  ButtonHighlight |
  ButtonShadow |
  CaptionText |
  InactiveBorder |
  InactiveCaption |
  InactiveCaptionText |
  InfoBackground |
  InfoText |
  Menu |
  MenuText |
  Scrollbar |
  ThreeDDarkShadow |
  ThreeDFace |
  ThreeDHighlight |
  ThreeDLightShadow |
  ThreeDShadow |
  Window |
  WindowFrame |
  WindowText

<linear-gradient-syntax> = 
  [ [ <angle> | <zero> | to <side-or-corner> ] || <color-interpolation-method> ]? , <color-stop-list>

<radial-gradient-syntax> = 
  [ [ [ <radial-shape> || <radial-size> ]? [ at <position> ]? ] || <color-interpolation-method> ]? , <color-stop-list>

<conic-gradient-syntax> = 
  [ [ [ from [ <angle> | <zero> ] ]? [ at <position> ]? ] || <color-interpolation-method> ]? , <angular-color-stop-list>

<color-function> = 
  <rgb()> |
  <rgba()> |
  <hsl()> |
  <hsla()> |
  <hwb()> |
  <lab()> |
  <lch()> |
  <oklab()> |
  <oklch()> |
  <color()>

<named-color> = 
  aliceblue |
  antiquewhite |
  aqua |
  aquamarine |
  azure |
  beige |
  bisque |
  black |
  blanchedalmond |
  blue |
  blueviolet |
  brown |
  burlywood |
  cadetblue |
  chartreuse |
  chocolate |
  coral |
  cornflowerblue |
  cornsilk |
  crimson |
  cyan |
  darkblue |
  darkcyan |
  darkgoldenrod |
  darkgray |
  darkgreen |
  darkgrey |
  darkkhaki |
  darkmagenta |
  darkolivegreen |
  darkorange |
  darkorchid |
  darkred |
  darksalmon |
  darkseagreen |
  darkslateblue |
  darkslategray |
  darkslategrey |
  darkturquoise |
  darkviolet |
  deeppink |
  deepskyblue |
  dimgray |
  dimgrey |
  dodgerblue |
  firebrick |
  floralwhite |
  forestgreen |
  fuchsia |
  gainsboro |
  ghostwhite |
  gold |
  goldenrod |
  gray |
  green |
  greenyellow |
  grey |
  honeydew |
  hotpink |
  indianred |
  indigo |
  ivory |
  khaki |
  lavender |
  lavenderblush |
  lawngreen |
  lemonchiffon |
  lightblue |
  lightcoral |
  lightcyan |
  lightgoldenrodyellow |
  lightgray |
  lightgreen |
  lightgrey |
  lightpink |
  lightsalmon |
  lightseagreen |
  lightskyblue |
  lightslategray |
  lightslategrey |
  lightsteelblue |
  lightyellow |
  lime |
  limegreen |
  linen |
  magenta |
  maroon |
  mediumaquamarine |
  mediumblue |
  mediumorchid |
  mediumpurple |
  mediumseagreen |
  mediumslateblue |
  mediumspringgreen |
  mediumturquoise |
  mediumvioletred |
  midnightblue |
  mintcream |
  mistyrose |
  moccasin |
  navajowhite |
  navy |
  oldlace |
  olive |
  olivedrab |
  orange |
  orangered |
  orchid |
  palegoldenrod |
  palegreen |
  paleturquoise |
  palevioletred |
  papayawhip |
  peachpuff |
  peru |
  pink |
  plum |
  powderblue |
  purple |
  rebeccapurple |
  red |
  rosybrown |
  royalblue |
  saddlebrown |
  salmon |
  sandybrown |
  seagreen |
  seashell |
  sienna |
  silver |
  skyblue |
  slateblue |
  slategray |
  slategrey |
  snow |
  springgreen |
  steelblue |
  tan |
  teal |
  thistle |
  tomato |
  turquoise |
  violet |
  wheat |
  white |
  whitesmoke |
  yellow |
  yellowgreen

<color-mix()> = 
  color-mix( <color-interpolation-method> , [ <color> && <percentage [0,100]>? ]#{2})

<side-or-corner> = 
  [ left | right ] ||
  [ top | bottom ]

<color-interpolation-method> = 
  in [ <rectangular-color-space> | <polar-color-space> <hue-interpolation-method>? | <custom-color-space> ]

<color-stop-list> = 
  <linear-color-stop> , [ <linear-color-hint>? , <linear-color-stop> ]#?

<radial-shape> = 
  circle |
  ellipse

<radial-size> = 
  <radial-extent> |
  <length [0,∞]> |
  <length-percentage [0,∞]>{2}

<angular-color-stop-list> = 
  <angular-color-stop> , [ <angular-color-hint>? , <angular-color-stop> ]#?

<rgb()> = 
  rgb( <percentage>#{3} , <alpha-value>? ) |
  rgb( <number>#{3} , <alpha-value>? ) |
  rgb( [ <number> | <percentage> | none ]{3} [ / [ <alpha-value> | none ] ]? )

<rgba()> = 
  rgba( <percentage>#{3} , <alpha-value>? ) |
  rgba( <number>#{3} , <alpha-value>? ) |
  rgba( [ <number> | <percentage> | none ]{3} [ / [ <alpha-value> | none ] ]? )

<hsl()> = 
  hsl( <hue>, <percentage>, <percentage>, <alpha-value>? ) |
  hsl( [ <hue> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? )

<hsla()> = 
  hsla( <hue>, <percentage>, <percentage>, <alpha-value>? ) |
  hsla( [ <hue> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? )

<hwb()> = 
  hwb( [ <hue> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? )

<lab()> = 
  lab( [<percentage> | <number> | none] [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ / [<alpha-value> | none] ]? )

<lch()> = 
  lch( [<percentage> | <number> | none] [ <percentage> | <number> | none] [ <hue> | none] [ / [<alpha-value> | none] ]? )

<oklab()> = 
  oklab( [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ / [<alpha-value> | none] ]? )

<oklch()> = 
  oklch( [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ <hue> | none] [ / [<alpha-value> | none] ]? )

<color()> = 
  color( [ from <color> ]? <colorspace-params> [ / [ <alpha-value> | none ] ]? )

<rectangular-color-space> = 
  srgb |
  srgb-linear |
  display-p3 |
  display-p3-linear |
  a98-rgb |
  prophoto-rgb |
  rec2020 |
  lab |
  oklab |
  xyz |
  xyz-d50 |
  xyz-d65

<polar-color-space> = 
  hsl |
  hwb |
  lch |
  oklch

<hue-interpolation-method> = 
  [ shorter | longer | increasing | decreasing ] hue

<custom-color-space> = 
  <dashed-ident>

<linear-color-stop> = 
  <color> <color-stop-length>?

<linear-color-hint> = 
  <length-percentage>

<radial-extent> = 
  closest-corner |
  closest-side |
  farthest-corner |
  farthest-side

<angular-color-stop> = 
  <color> <color-stop-angle>?

<angular-color-hint> = 
  <angle-percentage> |
  <zero>

<alpha-value> = 
  <number> |
  <percentage>

<hue> = 
  <number> |
  <angle>

<colorspace-params> = 
  [<custom-params> | <predefined-rgb-params> | <xyz-params>]

<color-stop-length> = 
  <length-percentage>{1,2}

<color-stop-angle> = 
  [ <angle-percentage> | <zero> ]{1,2}

<angle-percentage> = 
  <angle> |
  <percentage>

<custom-params> = 
  <dashed-ident> [ <number> | <percentage> | none ]+

<predefined-rgb-params> = 
  <predefined-rgb> [ <number> | <percentage> | none ]{3}

<xyz-params> = 
  <xyz> [ <number> | <percentage> | none ]{3}

Примеры

Маскирование изображения

В этом примере изображение маскируется с помощью повторяющегося конического градиента, созданного средствами CSS и используемого в качестве источника маски. Для сравнения мы также покажем этот градиент как фоновое изображение.

HTML

Мы добавляем элемент <img> и пустой элемент <div>.

<img
  src="https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
  alt="Pride flag" />
<div></div>

CSS

Для <img> и <div> задаём одинаковые border, padding и размеры.

img,
div {
  border: 20px dashed rebeccapurple;
  box-sizing: content-box;
  padding: 20px;
  height: 220px;
  width: 220px;
}

Затем мы применяем маску к <img>. mask-image создаётся с помощью функции repeating-conic-gradient(). Мы задаём градиент 100px на 100px, который повторяется, начинаясь в верхнем левом углу content-box изображения. Мы указываем два значения <geometry-box>: первое задаёт mask-origin, а второе определяет значение свойства mask-clip. Градиент меняется от прозрачного до сплошного lightgreen. Мы использовали lightgreen, чтобы показать, что важен не цвет маски, а её прозрачность.

img {
  mask: repeating-radial-gradient(
      circle,
      transparent 0 5px,
      lightgreen 15px 20px
    )
    content-box border-box 0% 0% / 100px 100px repeat;
}

Наконец, мы используем для короткого свойства background элемента <div> то же значение, что и для mask.

div {
  background: repeating-radial-gradient(
      circle,
      transparent 0 5px,
      lightgreen 15px 20px
    )
    content-box border-box 0% 0% / 100px 100px repeat;
}

Результат

Спецификации

Спецификация
Модуль маскирования CSS, уровень 1
# the-mask

Совместимость с браузерами

Настольные компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome для Android Firefox для Android Opera для Android Safari для iOS Samsung Internet WebView для Android WebView для iOS
mask
120
1Свойство с префиксом можно использовать в SVG и HTML с немного отличающимся синтаксисом, который позволяет задавать нестандартное свойство -webkit-mask-attachment.
1–120Хотя свойство распознаётся, применённые к нему значения не оказывают никакого эффекта.
120
79Свойство с префиксом можно использовать в SVG и HTML с немного отличающимся синтаксисом, который позволяет задавать нестандартное свойство -webkit-mask-attachment.
79–120Хотя свойство распознаётся, применённые к нему значения не оказывают никакого эффекта.
12–79
53
2–53Поддерживаются только mask: url(file.svg#mask_id) или mask: url(#mask_id), где URL является ссылкой на элемент <mask> SVG.
106
15Свойство с префиксом можно использовать в SVG и HTML с немного отличающимся синтаксисом, который позволяет задавать нестандартное свойство -webkit-mask-attachment.
15–106Хотя свойство распознаётся, применённые к нему значения не оказывают никакого эффекта.
15.4
3.1Свойство с префиксом можно использовать в SVG и HTML с немного отличающимся синтаксисом, который позволяет задавать нестандартное свойство -webkit-mask-attachment.
3.1–15.4Хотя свойство распознаётся, применённые к нему значения не оказывают никакого эффекта.
120
18Свойство с префиксом можно использовать в SVG и HTML с немного отличающимся синтаксисом, который позволяет задавать нестандартное свойство -webkit-mask-attachment.
18–120Хотя свойство распознаётся, применённые к нему значения не оказывают никакого эффекта.
53
4–53Поддерживаются только mask: url(file.svg#mask_id) или mask: url(#mask_id), где URL является ссылкой на элемент <mask> SVG.
80
14Свойство с префиксом можно использовать в SVG и HTML с немного отличающимся синтаксисом, который позволяет задавать нестандартное свойство -webkit-mask-attachment.
14–80Хотя свойство распознаётся, применённые к нему значения не оказывают никакого эффекта.
15.4
2Свойство с префиксом можно использовать в SVG и HTML с немного отличающимся синтаксисом, который позволяет задавать нестандартное свойство -webkit-mask-attachment.
2–15.4Хотя свойство распознаётся, применённые к нему значения не оказывают никакого эффекта.
25.0
1.0Свойство с префиксом можно использовать в SVG и HTML с немного отличающимся синтаксисом, который позволяет задавать нестандартное свойство -webkit-mask-attachment.
1.0–25.0Хотя свойство распознаётся, применённые к нему значения не оказывают никакого эффекта.
120
2Свойство с префиксом можно использовать в SVG и HTML с немного отличающимся синтаксисом, который позволяет задавать нестандартное свойство -webkit-mask-attachment.
2–120Хотя свойство распознаётся, применённые к нему значения не оказывают никакого эффекта.
15.4
2Свойство с префиксом можно использовать в SVG и HTML с немного отличающимся синтаксисом, который позволяет задавать нестандартное свойство -webkit-mask-attachment.
2–15.4Хотя свойство распознаётся, применённые к нему значения не оказывают никакого эффекта.
x-end
Нет
Нет
Нет
Нет
26
Нет
Нет
Нет
26
Нет
Нет
26
x-start
Нет
Нет
Нет
Нет
26
Нет
Нет
Нет
26
Нет
Нет
26
y-end
Нет
Нет
Нет
Нет
26
Нет
Нет
Нет
26
Нет
Нет
26
y-start
Нет
Нет
Нет
Нет
26
Нет
Нет
Нет
26
Нет
Нет
26

См. также

  • clip-path
  • filter
  • Введение в маскирование CSS
  • Свойства mask CSS
  • Объявление нескольких масок
  • Модуль маскирования CSS
  • Атрибут mask SVG
  • Применение эффектов SVG к содержимому HTML

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API