CSS Portal

CSS mask Property

☕
Enjoying this site?

Help keep it running with a small coffee donation. Every bit of support is appreciated!

Buy us a coffee
mask
CSS PropertyThis property is supported by all modern browsers.
Updated 1st January 2026

Description

The mask property controls which parts of an element are visible by using an image, gradient, or SVG as an alpha (or luminance) mask: the mask’s transparency determines pixel-level visibility of the element it’s applied to. Instead of trimming content to a hard-edged shape, a mask can create soft, feathered edges and partial transparency, allowing smooth transitions between visible and transparent areas. Because masks operate on the element’s rendered pixels, they affect the element’s final compositing rather than its document layout.

A mask is often used alongside decorative and compositing techniques - for example, you can mask an element that also uses a complex background to create shaped or faded backgrounds without altering the underlying layout or markup. See background-image for how decorative images can interact with masked content. Compared with vector clipping, masks provide richer visual control: clip-path produces crisp geometric boundaries, while mask can express graduations of transparency, soft glows, and non-rectangular fades.

Under the hood, masks are applied during the compositing stage, which means browsers may rasterize masked layers and this can affect rendering performance for complex or animated content. For visual effects that alter appearance rather than visibility you might instead consider filter, but masks remain the most direct way to create per-pixel visibility control. When using masks in production, plan for fallbacks for environments where masking is limited, and avoid relying on masks to convey critical information (such as hiding important text) because they can affect readability and accessibility if not designed carefully.

Definition

Initial value
See individual properties
Applies to
all elements; In SVG, it applies to container elements excluding the <defs> element and all graphics elements
Inherited
no
Computed value
See individual properties
Animatable
See individual properties
JavaScript syntax
object.style.mask

Syntax

mask: <mask-image> || <mask-mode> || <mask-repeat> || <mask-position> || <mask-clip> || <mask-origin> || <mask-composite> || <mask-size> || <mask-type>;

Values

  • <mask-image>See mask-image CSS property for values.
  • <mask-mode>See mask-mode CSS property for values.
  • <mask-repeat> See mask-repeat CSS property for values.
  • <mask-position>See mask-position CSS property for values.
  • <mask-clip>See mask-clip CSS property for values.
  • <mask-origin>See mask-origin CSS property for values.
  • <mask-composite>See mask-composite CSS property for values.
  • <mask-size>See mask-size CSS property for values.
  • <mask-type>See mask-type CSS property for values.

Example

<div class="wrap">
<h1>CSS mask - radial spotlight</h1>
<div class="photo" role="img" aria-label="Scenic photo masked by a circular spotlight"></div>
<p class="caption">The circle is created with CSS mask (and -webkit-mask for Safari).</p>
</div>
/* Basic page layout */
* {
  box-sizing: border-box;
}

body {
  font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;
  background: linear-gradient(135deg, #f0f4ff, #ffffff);
  min-height: 100vh;
  margin: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 40px;
}

.wrap {
  text-align: center;
  width: 360px;
}

h1 {
  font-size: 18px;
  margin: 0 0 16px;
  color: #0b1220;
}

.photo {
  width: 360px;
  height: 240px;
  border-radius: 12px;
  background-image: url('https://images.unsplash.com/photo-1501785888041-af3ef285b470?auto=format&fit=crop&w=1200&q=80');
  background-size: cover;
  background-position: center;
  box-shadow: 0 8px 24px rgba(10, 10, 20, 0.12);

  /* CSS mask: a circular opaque area (black) with transparent outside */
  mask-image: radial-gradient(circle at 50% 40%, black 0%, black 36%, transparent 37%);
  -webkit-mask-image: radial-gradient(circle at 50% 40%, black 0%, black 36%, transparent 37%);
  mask-repeat: no-repeat;
  -webkit-mask-repeat: no-repeat;
  mask-position: center;
  -webkit-mask-position: center;
  mask-size: 70% 70%;
  -webkit-mask-size: 70% 70%;

  /* subtle animated movement of the mask to demonstrate dynamic masking */
  animation: floatMask 6s ease-in-out infinite;
}

@keyframes floatMask {
  0% {
    mask-position: 20% 30%;
    -webkit-mask-position: 20% 30%;
  }

  50% {
    mask-position: 80% 70%;
    -webkit-mask-position: 80% 70%;
  }

  100% {
    mask-position: 20% 30%;
    -webkit-mask-position: 20% 30%;
  }
}

.caption {
  font-size: 13px;
  color: #606680;
  margin-top: 12px;
}
Open in editor

Browser Support

The following information will show you the current browser support for the CSS mask property. Hover over a browser icon to see the version that first introduced support for this CSS property.

This property is supported by all modern browsers.

Desktop

Chrome
Edge
Firefox
Opera
Safari

Tablets & Mobile

Chrome Android
Firefox Android
Opera Android
Safari iOS
Samsung Internet
Android WebView
-
Supported Unknown Not supported
☕
Enjoying this site?

Help keep it running with a small coffee donation. Every bit of support is appreciated!

Buy us a coffee