mask
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2023å¹´12æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
mask 㯠CSS ã®ä¸æ¬æå®ããããã£ã§ãç»åã®æå®ããé åããã¹ã¯ã¾ãã¯ã¯ãªãããã¦ãè¦ç´ ãï¼é¨åçã«ã¾ãã¯å®å
¨ã«ï¼é表示ã«ãã¾ããããã¯ããã¹ã¦ã® mask-* ããããã£ã®ä¸æ¬æå®ã§ãããã®ããããã£ã¯ãã«ã³ãã§åºåããã 1 ã¤ä»¥ä¸ã®å¤ãåãå
¥ããåå¤ã¯ <mask-layer> ã«å¯¾å¿ãã¾ãã
æ§æè¦ç´ ã®ããããã£
ãã®ããããã£ã¯ä»¥ä¸ã® CSS ããããã£ã®ä¸æ¬æå®ã§ãã
æ§æ
/* ãã¼ã¯ã¼ãå¤ */
mask: none;
/* ç»åå¤ */
mask: url("mask.png"); /* ãã¹ã¯ã¨ãã¦ä½¿ç¨ããããã¯ã»ã«ç»å */
mask: url("masks.svg#star"); /* ãã¹ã¯ã¨ãã¦ä½¿ç¨ããã SVG ã°ã©ãã£ãã¯å
ã®è¦ç´ */
/* çµã¿åããå¤ */
mask: url("masks.svg#star") luminance; /* è¼åº¦ãã¹ã¯ã¨ãã¦ä½¿ç¨ããã SVG ã°ã©ãã£ãã¯å
ã®è¦ç´ */
mask: url("masks.svg#star") 40px 20px; /* ãã¹ã¯ã¨ãã¦ä½¿ç¨ããã ä¸ãã 40pxãå·¦ãã 20px ã®ä½ç½®ã«é
ç½®ããã¦ãã */
mask: url("masks.svg#star") 0 0/50px 50px; /* å¹
ã¨é«ãã 50px ã®ãã¹ã¯ã¨ãã¦ä½¿ç¨ããã SVG ã°ã©ãã£ãã¯å
ã®è¦ç´ */
mask: url("masks.svg#star") repeat-x; /* æ°´å¹³æ¹åã«ç¹°ãè¿ããããã¹ã¯ã¨ãã¦ä½¿ç¨ããã SVG ã°ã©ãã£ãã¯å
ã®è¦ç´ */
mask: url("masks.svg#star") stroke-box; /* ã¹ããã¼ã¯ã§å²ã¾ããããã¯ã¹ã«æ¡å¼µãããã¹ã¯ã¨ãã¦ä½¿ç¨ããã SVG ã°ã©ãã£ãã¯å
ã®è¦ç´ */
mask: url("masks.svg#star") exclude; /* SVGã°ã©ãã£ãã¯å
ã®è¦ç´ ããã¹ã¯ã¨ãã¦ä½¿ç¨ããééè¤é¨åã使ç¨ãã¦èæ¯ã¨çµã¿åããã */
/* è¤æ°ã®ãã¹ã¯ */
mask:
url("masks.svg#star") left / 16px repeat-y,
/* å¹
16px ã®å·¦ç«¯ã®ãã¹ã¯ */ url("masks.svg#circle") right / 16px repeat-y; /* å¹
16px ã®å³ç«¯ã®ãã¹ã¯ */
/* ã°ãã¼ãã«å¤ */
mask: inherit;
mask: initial;
mask: revert;
mask: revert-layer;
mask: unset;
å¤
<mask-layer>-
ã«ã³ãã§åºåããã 1 ã¤ä»¥ä¸ã®ãã¹ã¯ã¬ã¤ã¤ã¼ã§ã以ä¸ã®è¦ç´ ã§æ§æããã¾ãã
<mask-reference>-
ãã¹ã¯ç»åã®ã½ã¼ã¹ãè¨å®ãã¾ãã
mask-imageãåç §ãã¦ãã ããã <masking-mode>-
ãã¹ã¯ç»åã®ãã¹ã¯ã¢ã¼ããè¨å®ãã¾ãã
mask-modeãåç §ãã¦ãã ããã <position>-
ãã¹ã¯ç»åã®ä½ç½®ãè¨å®ãã¾ãã
mask-positionãåç §ãã¦ãã ããã <bg-size>-
ãã¹ã¯ç»åã®å¤§ãããè¨å®ãã¾ãã
mask-sizeãåç §ãã¦ãã ããã <repeat-style>-
ãã¹ã¯ç»åã®å復ãè¨å®ãã¾ãã
mask-repeatãåç §ãã¦ãã ããã <geometry-box>-
<geometry-box>å¤ã 1 ã¤ã®ã¿ãä¸ããããå ´åã¯ãmask-originã¨mask-clipã®ä¸¡æ¹ãè¨å®ããã¾ãã2 ã¤ã®<geometry-box>å¤ãåå¨ããå ´åã1 ã¤ç®ã®å¤ã¯mask-originãè¨å®ãã2 ã¤ç®ã®å¤ã¯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 å¤ã®å¾ãã«ã 2 ã¤ãã¹ã©ãã·ã¥ (/) ã§åºåã£ã¦è¨è¿°ããå¿
è¦ãããã¾ãã
2 ã¤ã® <geometry-box> å¤ãåå¨ããå ´åã¯ãæåã®å¤ã mask-origin å¤ã 2 ã¤ç®ã®å¤ã mask-clip å¤ã¨ãªãã¾ãã 1 ã¤ã® <geometry-box> å¤ã¨ no-clip ãã¼ã¯ã¼ããåå¨ããå ´åã <geometry-box> 㯠mask-origin ããããã£ã®å¤ã¨ãªãã¾ãã no-clip 㯠mask-clip ããããã£ã«ã®ã¿æå¹ã§ããããã§ãããã®å ´åã2 ã¤ã®å¤ã®é åºã¯é¢ä¿ããã¾ããã 1 ã¤ã® <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 ã確å®ã«ãªã»ããããã¾ãã
å ¬å¼å®ç¾©
| åæå¤ | 䏿¬æå®ã®æ¬¡ã®åããããã£ã¨ãã¦
|
|---|---|
| é©ç¨å¯¾è±¡ | ãã¹ã¦ã®è¦ç´ ã SVG ã®å ´å㯠<defs> è¦ç´ ããã¹ã¦ã®ã°ã©ãã£ãã¯è¦ç´ ãé¤ããã³ã³ããã¼è¦ç´ ã«é©ç¨ããã |
| ç¶æ¿ | ãªã |
| ãã¼ã»ã³ãå¤ | 䏿¬æå®ã®æ¬¡ã®åããããã£ã¨ãã¦
|
| è¨ç®å¤ | 䏿¬æå®ã®æ¬¡ã®åããããã£ã¨ãã¦
|
| ã¢ãã¡ã¼ã·ã§ã³ã®ç¨®é¡ | 䏿¬æå®ã®æ¬¡ã®åããããã£ã¨ãã¦
|
| éãåããã³ã³ããã¹ãã®çæ | ãã |
形弿æ³
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> =
<position-one> |
<position-two> |
<position-four>
<bg-size> =
[ <length-percentage [0,â]> | auto ]{1,2} |
cover |
contain
<repeat-style> =
repeat-x |
repeat-y |
repeat-block |
repeat-inline |
<repetition>{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()> |
<cross-fade()> |
<element()> |
<gradient>
<mask-source> =
<url>
<position-one> =
left |
center |
right |
top |
bottom |
x-start |
x-end |
y-start |
y-end |
block-start |
block-end |
inline-start |
inline-end |
<length-percentage>
<position-two> =
[ left | center | right | x-start | x-end ] && [ top | center | bottom | y-start | y-end ] |
[ left | center | right | x-start | x-end | <length-percentage> ] [ top | center | bottom | y-start | y-end | <length-percentage> ] |
[ block-start | center | block-end ] && [ inline-start | center | inline-end ] |
[ start | center | end ]{2}
<position-four> =
[ [ left | right | x-start | x-end ] <length-percentage> ] && [ [ top | bottom | y-start | y-end ] <length-percentage> ] |
[ [ block-start | block-end ] <length-percentage> ] && [ [ inline-start | inline-end ] <length-percentage> ] |
[ [ start | end ] <length-percentage> ]{2}
<length-percentage> =
<length> |
<percentage>
<repetition> =
repeat |
space |
round |
no-repeat
<shape-box> =
<visual-box> |
margin-box |
half-border-box
<image()> =
image( <image-tags>? [ <image-src>? , <color>? ]! )
<image-set()> =
image-set( <image-set-option># )
<cross-fade()> =
cross-fade( <cf-image># )
<element()> =
element( <id-selector> )
<visual-box> =
content-box |
padding-box |
border-box
<image-tags> =
ltr |
rtl
<image-src> =
<url> |
<string>
<image-set-option> =
[ <image> | <string> ] [ <resolution> || type( <string> ) ]?
<cf-image> =
[ <image> | <color> ] &&
<percentage [0,100]>?
<id-selector> =
<hash-token>
ä¾
>ç»åã®ãã¹ã¯
ãã®ä¾ã§ã¯ã CSS ã§çæãããç¹°ãè¿ãæå½¢ã°ã©ãã¼ã·ã§ã³ããã¹ã¯ã½ã¼ã¹ã¨ãã¦ä½¿ç¨ãã¦ãç»åããã¹ã¯ãã¦ãã¾ããæ¯è¼ã®ããã«ãã°ã©ãã¼ã·ã§ã³ãèæ¯ç»åã¨ãã¦ã表示ããã¦ãã¾ãã
HTML
<img> ããã³ç©ºã® <div> è¦ç´ ãè¨ç½®ãã¦ãã¾ãã
<img
src="https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt="Pride flag" />
<div></div>
CSS
åã borderãpaddingãããã³ãµã¤ãºã <img> 㨠<div> ã®ä¸¡æ¹ã«è¨å®ãã¾ãã
img,
div {
border: 20px dashed rebeccapurple;
box-sizing: content-box;
padding: 20px;
height: 220px;
width: 220px;
}
次ã«ã<img> ã«ãã¹ã¯ãé©ç¨ãã¾ããmask-image ã¯ãrepeating-conic-gradient() 颿°ã使ç¨ãã¦çæããã¾ããããããç»åã® content-box ã®å·¦ä¸é
ããç¹°ãè¿ããã 100px à 100px ã®ã°ã©ãã¼ã·ã§ã³ã¨ãã¦å®ç¾©ãã¾ãã 2 ã¤ã® <geometry-box> å¤ãå«ã¾ãã¾ããæåã®å¤ã¯ mask-origin ãè¨å®ãã 2 ã¤ç®ã®å¤ã¯ 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;
}
æå¾ã«ã <div> ã® background 䏿¬æå®ããããã£ã«ã mask ã§ä½¿ç¨ããã®ã¨åãå¤ã使ç¨ãã¾ãã
div {
background: repeating-radial-gradient(
circle,
transparent 0 5px,
lightgreen 15px 20px
)
content-box border-box 0% 0% / 100px 100px repeat;
}
çµæ
仿§æ¸
| 仿§æ¸ |
|---|
| CSS Masking Module Level 1 > # the-mask > |