Each feature in detail MDN The clip CSS property defines a visible portion of an element. The clip property applies only to absolutely positioned elements — that is, elements with position:absolute or position:fixed .
Live preview Example from MDN
.dotted-border {
border : dotted ;
position : relative ;
width : 390 px ;
height : 400 px ;
}
#top-left ,
#middle ,
#bottom-right {
position : absolute ;
top : 0 ;
}
#top-left {
left : 400 px ;
clip : rect ( 0 , 130 px , 90 px , 0 );
}
#middle {
left : 270 px ;
clip : rect ( 100 px , 260 px , 190 px , 130 px );
}
#bottom-right {
left : 140 px ;
clip : rect ( 200 px , 390 px , 290 px , 260 px );
} < p class = "dotted-border" >
< img src = "macarons.png" alt = "Original graphic" />
< img id = "top-left" src = "macarons.png" alt = "Graphic clipped to upper left" />
< img id = "middle" src = "macarons.png" alt = "Graphic clipped towards middle" />
< img
id = "bottom-right"
src = "macarons.png"
alt = "Graphic clipped to bottom right" />
</ p > Syntax <rect()> | auto Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial auto Applies to Absolutely positioned elements. In SVG, it applies to elements which establish a new viewport, pattern elements and mask elements. Inherited no Percentages n/a Computed value as specified Canonical order per grammar Animation type by computed value Browser support First browser version supporting clip Chrome 1 Edge 12 Firefox 1 Safari 1 Chrome Android 18 Safari iOS 1
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The clip-path CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.
Live preview Example from MDN
clip-path: circle(40%); clip-path: ellipse(130px 140px at 10% 20%); clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%); clip-path: path("M 0 200 L 0,75 A 5,5 0,0,1 150,75 L 200 200 z"); clip-path: rect(5px 145px 160px 5px round 20%); clip-path: xywh(0 5px 100% 75% round 15% 0);
section {
align-items : flex-start ;
}
.example-container {
text-align : left ;
padding : 20 px ;
}
#example-element {
float : left ;
width : 150 px ;
margin : 20 px ;
} < section class = "default-example" id = "default-example" >
< div class = "example-container" >
< img
class = "transition-all"
id = "example-element"
src = "https://developer.mozilla.org/shared-assets/images/examples/balloon-small.jpg"
width = "150" />
We had agreed, my companion and I, that I should call for him at his house,
after dinner, not later than eleven o'clock. This athletic young Frenchman
belongs to a small set of Parisian sportsmen, who have taken up "ballooning"
as a pastime. After having exhausted all the sensations that are to be found
in ordinary sports, even those of "automobiling" at a breakneck speed, the
members of the "Aéro Club" now seek in the air, where they indulge in all
kinds of daring feats, the nerve-racking excitement that they have ceased to
find on earth.
</ div >
</ section > Syntax <clip-source> | [ <basic-shape> || <geometry-box> ] | none Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial none Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages n/a Computed value as specified, but with <url> values made absolute Canonical order per grammar Animation type by computed value Browser support First browser version supporting clip-path Chrome 55 Edge 79 Firefox 3.5 Safari 9.1 Chrome Android 55 Safari iOS 9.3
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The clip-rule CSS property determines, when parts of the path overlap other parts, which pixels in a mask's box are inside the clipping shape defined by a clip path and which are outside.
Live preview Example from MDN
body {
display : flex ;
gap : 20 px ;
}
svg {
width : 110 px ;
height : 110 px ;
}
#star1 path {
clip-rule : evenodd ;
}
#star2 path {
clip-rule : nonzero ;
}
#star3 path {
fill : none ;
stroke : black ;
stroke-width : 1 ;
} < svg >
< clipPath id = "star1" >
< path d = "M50,0 21,90 98,35 2,35 79,90z" />
</ clipPath >
< rect clip-path = "url(#star1)" width = "95" height = "95" />
</ svg >
< svg >
< clipPath id = "star2" >
< path d = "M50,0 21,90 98,35 2,35 79,90z" />
</ clipPath >
< rect clip-path = "url(#star2)" width = "95" height = "95" />
</ svg >
< svg id = "star3" >
< path d = "M50,0 21,90 98,35 2,35 79,90z" />
</ svg > Syntax nonzero | evenodd Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial nonzero Applies to Applies to SVG graphics elements Inherited yes Percentages n/a Computed value as specified Canonical order per grammar Animation type discrete Browser support First browser version supporting clip-rule Chrome ≤15 Edge 79 Firefox 3.5 Safari ≤5 Chrome Android 18 Safari iOS ≤4.2
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask CSS shorthand property hides an element (partially or fully) by masking or clipping a specified area of the image. It is a shorthand for all the mask-* properties. The property accepts one or more comma-separated values, where each value corresponds to a <mask-layer> .
Live preview Example from MDN
img ,
div {
border : 20 px dashed rebeccapurple ;
box-sizing : content-box ;
padding : 20 px ;
height : 220 px ;
width : 220 px ;
}
img {
mask : repeating-radial-gradient (
circle ,
transparent 0 5 px ,
lightgreen 15 px 20 px
)
content-box border-box 0 % 0 % / 100 px 100 px repeat ;
}
div {
background : repeating-radial-gradient (
circle ,
transparent 0 5 px ,
lightgreen 15 px 20 px
)
content-box border-box 0 % 0 % / 100 px 100 px repeat ;
} < img
src = "https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt = "Pride flag" />
< div ></ div > Syntax <mask-layer># Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial see individual properties Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages see individual properties Computed value see individual properties Canonical order per grammar Animation type see individual properties Longhands mask-image , mask-position , mask-size , mask-repeat , mask-origin , mask-clip , mask-composite , mask-mode Browser support First browser version supporting mask Chrome 120 Edge 120 Firefox 53 Safari 15.4 Chrome Android 120 Safari iOS 15.4
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-border CSS shorthand property lets you create a mask along the edge of an element's border.
Live preview Example from MDN
.masked {
width : 200 px ;
background-color : lavender ;
border : 18 px solid salmon ;
padding : 10 px ;
-webkit-mask-box-image : url ( "https://mdn.github.io/shared-assets/images/examples/mask-border-diamonds.png" )
30 fill / /* slice */
20 px / /* width */
1 px /* outset */
round ; /* repeat */
mask-border :
url ( "https://mdn.github.io/shared-assets/images/examples/mask-border-diamonds.png" )
30 fill / /* slice */
20 px / /* width */
1 px /* outset */
round ; /* repeat */
} < div class = "masked" >
This element is surrounded by a bitmap-based mask border! Pretty neat, isn't
it?
</ div > Syntax <'mask-border-source'> || <'mask-border-slice'> [ / <'mask-border-width'>? [ / <'mask-border-outset'> ]? ]? || <'mask-border-repeat'> || <'mask-border-mode'> Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Browser support First browser version supporting mask-border Chrome 1 Edge 79 Firefox No Safari 17.2 Chrome Android 18 Safari iOS 17.2
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-border-mode CSS property specifies the blending mode used in a mask border .
Syntax luminance | alpha Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial alpha Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages n/a Computed value as specified Canonical order per grammar Animation type discrete Specification ↗ MDN reference ↗
MDN The mask-border-outset CSS property specifies the distance by which an element's mask border is set out from its border box.
Syntax <'border-image-outset'> Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial 0 Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages n/a Computed value all <length>s made absolute, otherwise as specified Canonical order per grammar Animation type by computed value Browser support First browser version supporting mask-border-outset Chrome 1 Edge 79 Firefox No Safari 17.2 Chrome Android 18 Safari iOS 17.2
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-border-repeat CSS property specifies how the images for the sides and the middle part of the mask border image are scaled and tiled.
Syntax <'border-image-repeat'> Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial stretch Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages n/a Computed value as specified Canonical order per grammar Animation type discrete Browser support First browser version supporting mask-border-repeat Chrome 1 Edge 79 Firefox No Safari 17.2 Chrome Android 18 Safari iOS 17.2
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-border-slice CSS property divides the image set by mask-border-source into regions. These regions are used to form the components of an element's mask border .
Syntax <'border-image-slice'> Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial 0 Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages refer to size of the mask border image Computed value as specified Canonical order per grammar Animation type by computed value Browser support First browser version supporting mask-border-slice Chrome 1 Edge 79 Firefox No Safari 17.2 Chrome Android 18 Safari iOS 17.2
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-border-source CSS property sets the source image used to create an element's mask border .
Syntax <'border-image-source'> Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial none Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages n/a Computed value they keyword none or the computed <image> Canonical order per grammar Animation type discrete Browser support First browser version supporting mask-border-source Chrome 1 Edge 79 Firefox No Safari 17.2 Chrome Android 18 Safari iOS 17.2
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-border-width CSS property sets the width of an element's mask border .
Syntax <'border-image-width'> Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial auto Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages relative to width/height of the mask border image area Computed value all <length>s made absolute, otherwise as specified Canonical order per grammar Animation type by computed value Browser support First browser version supporting mask-border-width Chrome 1 Edge 79 Firefox No Safari 17.2 Chrome Android 18 Safari iOS 17.2
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-clip CSS property determines the area which is affected by a mask. The painted content of an element must be restricted to this area.
Live preview Example from MDN
div {
width : 100 px ;
height : 100 px ;
background-color : #8cffa0 ;
margin : 10 px ;
border : 20 px solid #8ca0ff ;
padding : 20 px ;
mask-image : url ( "https://mdn.github.io/shared-assets/images/examples/mdn.svg" );
mask-size : 100 % 100 % ;
}
.content-box {
mask-clip : content-box ;
}
.border-box {
mask-clip : border-box ;
}
.padding-box {
mask-clip : padding-box ;
}
div ::before {
content : attr ( class );
position : relative ;
top : -10 px ;
}
body {
display : flex ;
flex-flow : row wrap ;
} < div class = "border-box" ></ div >
< div class = "padding-box" ></ div >
< div class = "content-box" ></ div > Syntax [ <coord-box> | no-clip ]# Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial border-box Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages n/a Computed value list, each item the keyword as specified Canonical order per grammar Animation type discrete Browser support First browser version supporting mask-clip Chrome 120 Edge 120 Firefox 53 Safari 15.4 Chrome Android 120 Safari iOS 15.4
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-composite CSS property represents a compositing operation used on the current mask layer with the mask layers below it.
Live preview Example from MDN
div {
width : 100 px ;
height : 100 px ;
background-color : red ;
mask-image :
url ( "https://mdn.github.io/shared-assets/images/examples/mdn.svg" ),
url ( "https://mdn.github.io/shared-assets/images/examples/mask-star.svg" );
mask-size : 100 % 100 % ;
mask-composite : subtract ;
} Syntax <compositing-operator># Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial add Applies to All elements. In SVG, it applies to container elements without the defs element and all graphics elements Inherited no Percentages n/a Computed value list, each item the keyword as specified Canonical order per grammar Animation type discrete Browser support First browser version supporting mask-composite Chrome 120 Edge 120 Firefox 53 Safari 15.4 Chrome Android 120 Safari iOS 15.4
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-image CSS property sets the image that is used as the mask layer for an element, hiding sections of the element on which the masking image is set based on the alpha channel of the mask image and, depending on the mask-mode property value, the luminance of the mask image's colors.
Live preview Example from MDN
img {
mask-image : radial-gradient ( black 50 % , transparent 60 % );
} < img
src = "https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt = "Pride flag" /> Syntax <mask-reference># Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial none Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages n/a Computed value list, each item the keyword none, a computed <image>, or a computed <url> Canonical order per grammar Animation type discrete Browser support First browser version supporting mask-image Chrome 120 Edge 120 Firefox 53 Safari 15.4 Chrome Android 120 Safari iOS 15.4
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-mode CSS property is set on the element being masked. It sets whether the mask reference defined by the mask-image is treated as a luminance or alpha mask.
Live preview Example from MDN
div {
background : blue linear-gradient ( red , blue );
mask-image : url ( "https://mdn.github.io/shared-assets/images/examples/mdn.svg" );
}
.alpha {
mask-mode : alpha ;
}
.luminance {
mask-mode : luminance ;
}
.matchSource {
mask-mode : match-source ;
}
div {
width : 227 px ;
height : 200 px ;
float : left ;
text-align : center ;
line-height : 65 px ;
color : white ;
text-shadow : 1 px 1 px 2 px black ;
font-family : sans-serif ;
} < div class = "alpha" >ALPHA</ div >
< div class = "luminance" >LUMINANCE</ div >
< div class = "matchSource" >MATCH-SOURCE</ div > Syntax <masking-mode># Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial match-source Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages n/a Computed value list, each item the keyword as specified Canonical order per grammar Animation type discrete Browser support First browser version supporting mask-mode Chrome 120 Edge 120 Firefox 53 Safari 15.4 Chrome Android 120 Safari iOS 15.4
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-origin CSS property sets the origin of a mask. This property determines the mask positioning area: the area within which a mask image is positioned. HTML elements can have masks contained within their content border box, padding box, or content box, whereas SVG elements (which don't have the associated CSS layout boxes) can have masks contained inside their fill, stroke, or view box. For elements rendered as multiple boxes, such as a <span> of text that spans more than one line, the mask-origin property specifies which boxes the box-decoration-break property operates on to determine the mask positioning area.
Live preview Example from MDN
div {
width : 100 px ;
height : 100 px ;
margin : 10 px ;
border : 10 px solid blue ;
background-color : #8cffa0 ;
padding : 10 px ;
mask-image : url ( "https://mdn.github.io/shared-assets/images/examples/mask-star.svg" );
}
section {
border : 1 px solid black ;
}
.content div {
mask-origin : content-box ;
}
.padding div {
mask-origin : padding-box ;
}
.border div {
mask-origin : border-box ;
}
.comparison div {
mask-image : none ;
}
section ::before {
content : attr ( class );
display : block ;
text-align : center ;
}
body {
display : flex ;
flex-flow : row wrap ;
gap : 10 px ;
} < section class = "content" >
< div ></ div >
</ section >
< section class = "padding" >
< div ></ div >
</ section >
< section class = "border" >
< div ></ div >
</ section >
< section class = "comparison" >
< div ></ div >
</ section > Syntax <coord-box># Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial border-box Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages n/a Computed value list, each item the keyword as specified Canonical order per grammar Animation type discrete Browser support First browser version supporting mask-origin Chrome 120 Edge 120 Firefox 53 Safari 15.4 Chrome Android 120 Safari iOS 15.4
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-position CSS property sets the initial position, relative to the mask position layer set by mask-origin , for each defined mask image.
Live preview Example from MDN
section {
border : 1 px solid black ;
width : 250 px ;
height : 250 px ;
}
div {
width : 250 px ;
height : 250 px ;
margin-bottom : 10 px ;
background : blue linear-gradient ( red , blue );
mask-image : url ( "https://developer.mozilla.org/shared-assets/images/examples/mask-star.svg" );
mask-repeat : no-repeat ;
mask-position : top right ;
} < section >
< div ></ div >
</ section > Syntax <position># Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial 0% 0% Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages refer to size of mask painting area minus size of mask layer image; see text background-position [CSS3BG] Computed value list, each item consists of two keywords representing the origin and two offsets from that origin, each given as an absolute length (if given a <length>), otherwise as a percentage. Canonical order per grammar Animation type repeatable list Browser support First browser version supporting mask-position Chrome 120 Edge 120 Firefox 53 Safari 15.4 Chrome Android 120 Safari iOS 15.4
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-repeat CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.
Live preview Example from MDN
div {
width : 250 px ;
height : 250 px ;
background-image : linear-gradient ( red , blue );
mask-image : url ( "https://developer.mozilla.org/shared-assets/images/examples/mask-star.svg" );
mask-size : 100 px 100 px ;
mask-repeat : round space ;
} Syntax <repeat-style># Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial repeat Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages n/a Computed value list, each item a pair of keywords, one per dimension Canonical order per grammar Animation type discrete Browser support First browser version supporting mask-repeat Chrome 120 Edge 120 Firefox 53 Safari 15.4 Chrome Android 120 Safari iOS 15.4
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-size CSS property specifies the sizes of specified mask images. Mask image sizes can be fully or partially constrained to preserve their intrinsic aspect ratios .
Live preview Example from MDN
div {
width : 200 px ;
height : 400 px ;
background : blue linear-gradient ( red , blue );
mask-image : url ( "https://developer.mozilla.org/shared-assets/images/examples/mdn.svg" );
}
.width {
mask-size : 50 % ;
}
.height {
mask-size : auto 50 % ;
}
body {
display : flex ;
gap : 20 px ;
} < div class = "width" ></ div >
< div class = "height" ></ div > Syntax <bg-size># Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial auto Applies to All elements. In SVG, it applies to container elements excluding the defs element, all graphics elements and the use element Inherited no Percentages n/a Computed value list, each item as specified, but with lengths made absolute Canonical order per grammar Animation type repeatable list Browser support First browser version supporting mask-size Chrome 120 Edge 120 Firefox 53 Safari 15.4 Chrome Android 120 Safari iOS 15.4
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗
MDN The mask-type CSS property applies to the SVG mask element. It defines whether to use the luminance (brightness) or alpha (transparency) content of the mask. This property may be overridden by the mask-mode property. The mask-type property has no effect on image or gradient masks.
Live preview Example from MDN
mask #alphaMask {
mask-type : alpha ;
}
mask #luminanceMask {
mask-type : luminance ;
}
img .alphaMaskType {
mask-image : url ( "#alphaMask" );
}
img .luminanceMaskType {
mask-image : url ( "#luminanceMask" );
} < img
class = "alphaMaskType"
src = "https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt = "Pride flag" />
< img
class = "luminanceMaskType"
src = "https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt = "Pride flag" />
< svg height = "0" width = "0" >
< mask id = "alphaMask" >
< path
d = "M20,70 A40,40,0,0,1,100,70 A40,40,0,0,1,180,70 Q180,130,100,190 Q20,130,20,70 Z"
fill = "green"
stroke = "white"
stroke-width = "20" />
< circle
cx = "170"
cy = "170"
r = "40"
fill = "rgb(0 0 0 / 0.5)"
stroke = "rgb(255 255 255 / 0.5)"
stroke-width = "20" />
</ mask >
< mask id = "luminanceMask" >
< path
d = "M20,70 A40,40,0,0,1,100,70 A40,40,0,0,1,180,70 Q180,130,100,190 Q20,130,20,70 Z"
fill = "green"
stroke = "white"
stroke-width = "20" />
< circle
cx = "170"
cy = "170"
r = "40"
fill = "rgb(0 0 0 / 0.5)"
stroke = "rgb(255 255 255 / 0.5)"
stroke-width = "20" />
</ mask >
</ svg > Syntax luminance | alpha Formal grammar from the specification, as webref extracts it: the latest level's definition, sometimes ahead of what browsers implement.
Definition Initial luminance Applies to mask elements Inherited no Percentages n/a Computed value as specified Canonical order per grammar Animation type discrete Browser support First browser version supporting mask-type Chrome 24 Edge 79 Firefox 35 Safari 7 Chrome Android 25 Safari iOS 7
First version with support, from MDN browser-compat-data.
Specification ↗ MDN reference ↗