clip-rule
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since â¨2020å¹´1æâ©.
clip-rule 㯠CSS ã®ããããã£ã§ããã¹ã®ä¸é¨ãä»ã®é¨åã¨éãªã£ãå ´åããã¹ã¯ã®ããã¯ã¹å
ã®ãã¯ã»ã«ããã¯ãªãããã¹ã§å®ç¾©ãããã¯ãªããããã·ã§ã¤ãã®å
å´ã«ããããå¤å´ã«ããããæ±ºå®ãã¾ãã
clip-rule ããããã£ã¯ã <clipPath> è¦ç´ å
ã«å«ã¾ãã SVG è¦ç´ ã«ã®ã¿é©ç¨ãããè¦ç´ ã® clip-rule 屿§ã®å¤ãããå ´åã¯ããã䏿¸ããã¾ãã clip-rule ããããã£ã¯ãåºæ¬çã« fill-rule ããããã£ã¨åãããã«æ©è½ãã¾ããã <clipPath> å®ç¾©ã«é©ç¨ãããç¹ãç°ãªãã¾ãã CSS ã® <basic-shape> ã«ã¯ä½ã®å¹æãããã¾ããã
æ§æ
/* ãã¼ã¯ã¼ã */
clip-rule: nonzero;
clip-rule: evenodd;
/* ã°ãã¼ãã«å¤ */
clip-rule: inherit;
clip-rule: initial;
clip-rule: revert;
clip-rule: revert-layer;
clip-rule: unset;
å¤
nonzero-
ã¯ãªãããã¹ã¯ã®ããã¯ã¹å ã®ãã¹ã¦ã®ç¹ã«ã¤ãã¦ãã©ã³ãã ãªæ¹åã«å ç·ãæç»ããã¾ããå ç·ãã¯ãªãããã¹ã®ä»»æã®é¨åã¨äº¤å·®ãããã³ã«ãã¯ãªãããã¹ã®é¨åãå ç·ãå·¦ããå³ã«ç§»åãã¦ããå ´åã¯ãã«ã¦ã³ãã 1 å¢å ãã¾ãã䏿¹ããã¹é¨åãå ç·ãå³ããå·¦ã«ç§»åãã¦ããå ´åã¯ãã«ã¦ã³ãã 1 æ¸å°ãã¾ããã«ã¦ã³ããæçµçã« 0 ã®å ´åããã®ç¹ã¯ãã¹ã®å½¢ç¶ã®å¤å´ã«ãããã¨ã«ãªãã¾ãããã以å¤ã®å ´åã¯ããã¹ã®å½¢ç¶ã®å å´ã«ãããã¨ã«ãªãã¾ãã
even-odd-
ã¯ãªããã³ã°ãã¹ã¯ã®ããã¯ã¹å ã®ãã¹ã¦ã®ç¹ã«ã¤ãã¦ãã©ã³ãã ãªæ¹åã«å ç·ãæç»ããã¾ããå ç·ãã¯ãªããã³ã°ãã¹ã®ä»»æã®é¨åã¨äº¤å·®ãããã³ã«ãã«ã¦ã³ãã 1 ãã¤å¢å ãã¾ããã«ã¦ã³ããæçµçã«å¶æ°ã®å ´åããã®ç¹ã¯ãã¹ã®å½¢ç¶ã®å¤å´ã«ãããã¨ã«ãªãã¾ãããã以å¤ã®å ´åã¯ããã¹ã®å½¢ç¶ã®å å´ã«ãããã¨ã«ãªãã¾ãã0 ã¯å¶æ°ã§ããã¨ã¿ãªããã¾ãã
形弿æ³
clip-rule =
nonzero |
evenodd
ä¾
>å¤ã®æ¯è¼
ãã®ä¾ã§ã¯ãé¡ä¼¼ã® SVG <path> è¦ç´ ã«ç°ãªã CSS clip-rule å¤ãé©ç¨ãã¦ãevenodd 㨠non-zero ã®å¤ã®éãã示ãã¾ãã
HTML
ãã¼ã¯ã¢ããã«ã¯è¤æ°ã® <svg> ã³ã³ããã¼ããããããããæã®å½¢ãå®ç¾©ãã <clipPath> è¦ç´ ã¨ããã®ä¸ã«æãæç»ãã <rect> è¦ç´ ãå«ã¾ãã¦ãã¾ããæã¯ãè¡ãéãã¦ä½æããã¦ãã¾ãã id 以å¤ã¯ãæåã® 2 ã¤ã® SVG è¦ç´ ã®ãã¼ã¯ã¢ããã¯ã¾ã£ããåãã§ãã3 çªç®ã® SVG ã«ã¯ <path> è¦ç´ ã®ã¿ãå«ã¾ãã¦ãããæã使ãããã¹ã®è¡ãã©ã®ããã«éãªã£ã¦ãããããããã¾ãã
<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>
CSS
æåã® SVG ã® <path> ã® clip-rule 㯠evenodd ã«è¨å®ããã¦ãã¾ãã2 ã¤ç®ã® SVG ã§ã¯ nonzero ã«è¨å®ããã¦ãã¾ãããã¹ã®ã¿ã® SVG ã§ã¯ãæ¢å®ã® fill ãé¤å»ããstroke è²ã¨ stroke-width ãå®ç¾©ãã¦ãéãªã£ã¦ãããã¹è¡ã表示ããããã«ãã¾ããã
#star1 path {
clip-rule: evenodd;
}
#star2 path {
clip-rule: nonzero;
}
#star3 path {
fill: none;
stroke: #000;
stroke-width: 1;
}
çµæ
åºæ¬ã·ã§ã¤ãå®ç¾©ã®å é¨
ãã®ä¾ã¯ã clip-rule 㯠CSS <basic-shape> ã«ã¯ä½ã®å¹æãæããªãããã·ã§ã¤ãã®ã½ã¼ã¹ã¨ãã¦ä½¿ç¨ããã <clipPath> ã«ã¯å½±é¿ãä¸ãããã¨ã示ãã¦ãã¾ãã
HTML
æã®å½¢ãå®ç¾©ãã 2 ã¤ã® <clipPath> è¦ç´ ãå«ã SVG ãè¨è¼ãã¾ãããããã®è¦ç´ ã¯ã id 屿§ã®å¤ä»¥å¤ã¯ãã¹ã¦åãã§ããã¾ããæã®å½¢ãå«ã 2 ã¤ã® <div> è¦ç´ ãè¨è¼ãã¾ãã
<svg height="0" width="0">
<defs>
<clipPath id="star1">
<path d="M100,0 42,180 196,70 4,70 158,180z" />
</clipPath>
<clipPath id="star2">
<path d="M100,0 42,180 196,70 4,70 158,180z" />
</clipPath>
</defs>
</svg>
<div></div>
<div></div>
CSS
<div> è¦ç´ ã« width ããã³ height ãè¨å®ãã conic-gradient() ã background-image å¤ã¨ãã¦è¿½å ãã¾ãã
div {
height: 200px;
width: 200px;
background-image: conic-gradient(
at center,
rebeccapurple,
green,
lightblue,
rebeccapurple
);
}
clip-path ããããã£ã使ç¨ãã¦ãããããã® <div> ã®ã¯ãªãããã¹ã¨ãã¦ãç°ãªã <clipPath> è¦ç´ ãè¨å®ãã¾ãã
div:first-of-type {
clip-path: url(#star1);
}
div:last-of-type {
clip-path: url(#star2);
}
æå¾ã«ã<clipPath> è¦ç´ ã® <path> ãã¨ã«ç°ãªã clip-rule å¤ãè¨å®ãã¾ãã
#star1 path {
clip-rule: evenodd;
}
#star2 path {
clip-rule: nonzero;
}
çµæ
æè¨åãã®ãã¹ãã¹ã¦ãå«ããã¹ã«å¯¾ããã«ã¼ã«ã®é¸æ
ãã® SVG ç»åã«ã¯ã2 ã¤ã®ã¯ãªãããããç©å½¢ãããããããã 1 ã¤ã®ã¯ãªããã«ã¼ã«ãé©ç¨ããã¦ãã¾ãã 2 ã¤ã® <clipPath> è¦ç´ ãããããã 1 ã¤ã¯ non-zero ã®ã¯ãªããã«ã¼ã«ã使ç¨ããããã«è¨å®ãããã 1 ã¤ã¯ even-odd ã«ã¼ã«ã使ç¨ããããã«è¨å®ãããã¨ãã§ãã¾ããã©ã¡ãã®ãã¹ããå
å´ã¨å¤å´ã®é¨åã®ä¸¡æ¹ã§æè¨åãã«æç»ããã¦ãã¾ãã
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 50">
<g stroke="#123" fill="#BCD">
<!-- 以ä¸ãåºæ¬çãªé·æ¹å½¢ã¨ã¯ãªãããã¹ã®è¦è¦å -->
<rect x="10" y="10" width="30" height="30" />
<path
d="M 65,5 l 20,20 -20,20 -20,-20 20,-20 m 0,10 l 10,10 -10,10 -10,-10 10,-10 z"
fill="none"
stroke-width="0.5" />
<!-- 以ä¸ãã¯ãªãããããé·æ¹å½¢ -->
<rect x="110" y="10" width="30" height="30" clip-path="url(#clipper1)" />
<rect x="160" y="10" width="30" height="30" clip-path="url(#clipper2)" />
</g>
<!-- 以ä¸ãã¯ãªãããããã¹ -->
<clipPath id="clipper1" clipPathUnits="objectBoundingBox">
<path
d="M 0.5 -0.15 l 0.65 0.65 -0.65,0.65 -0.65,-0.65 0.65,-0.65 m 0,0.33 l 0.33,0.33 -0.33,0.33 -0.33,-0.33 0.33,-0.33 z"
clip-rule="evenodd" />
</clipPath>
<clipPath id="clipper2" clipPathUnits="objectBoundingBox">
<path
d="M 0.5 -0.15 l 0.65 0.65 -0.65,0.65 -0.65,-0.65 0.65,-0.65 m 0,0.33 l 0.33,0.33 -0.33,0.33 -0.33,-0.33 0.33,-0.33 z"
clip-rule="nonzero" />
</clipPath>
</svg>
ã¯ãªãããããé·æ¹å½¢ã«é©ç¨ãããã¯ãªãããã¹ã«ã¯ãCSS ã® clip-rule ããããã£ã使ç¨ãã¦ã䏿¹ã®ãã¹ã«ã¯ nonzero ã«ã¼ã«ããã䏿¹ã®ãã¹ã«ã¯ evenodd ã«ã¼ã«ã使ç¨ããããã«è¨å®ãã¦ãã¾ããããã«ãããCSS ã§æå³çã« CSS ã®è¨å®ã¨å対ã®å¤ã«è¨å®ããã¦ãã SVG ã® clip-path 屿§ã®å¤ã䏿¸ãããã¾ãã
#clipper1 {
clip-rule: nonzero;
}
#clipper2 {
clip-rule: evenodd;
}
ãã¹ã®å
å´ã¨å¤å´ã®é¨åã¯ã©ã¡ããæè¨åãï¼å·¦ããå³ï¼æ¹åã«ç§»åããããã2 ã¤ã®ã¯ãªããã«ã¼ã«ã§ã¯ãçµæã®ã¯ãªããå½¢ç¶ãç°ãªãã¾ãã nonzero ã®å ´åãå½¢ç¶ã®å¤å´é¨åã«ããå
ç·ã¯ã1 ã¤ä»¥ä¸ã®å·¦ããå³ã¸ã®ãã¹ãã©ã°ã¡ã³ãã«ééãããããå¤ã 0 以ä¸ã®å¤ã«ãªãã¾ãã even-odd ã®å ´åããã¹ã® 2 ã¤ã®é¨åã®éã«ããç¹ã¯å¥æ°ãå
å´ã®ãã¹å
ã¾ãã¯å¤å´ã®é¨åã«ããç¹ã¯å¶æ°ã®å¤ã«ãªãã¾ãã
å·»ãè¾¼ã¿æ¹åã®ç°ãªããã¹ã«å¯¾ããã«ã¼ã«ã®é¸æ
ãã®ä¾ã§ã¯ãååã®ä¾ã¨åã SVG ã使ç¨ãã¦ãã¾ãããã¯ãªãããã¹ã®å å´ãåæè¨åãã«å·»ãè¾¼ãããã«å¤æ´ãã¦ãã¾ãã
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 50">
<g stroke="#123" fill="#BCD">
<!-- 以ä¸ãåºæ¬çãªé·æ¹å½¢ã¨ã¯ãªãããã¹ã®è¦è¦å -->
<rect x="10" y="10" width="30" height="30" />
<path
d="M 65,5 l 20,20 -20,20 -20,-20 20,-20 m 0,10 l 10,10 -10,10 -10,-10 10,-10 z"
fill="none"
stroke-width="0.5" />
<!-- 以ä¸ãã¯ãªãããããé·æ¹å½¢ -->
<rect x="110" y="10" width="30" height="30" clip-path="url(#clipper1)" />
<rect x="160" y="10" width="30" height="30" clip-path="url(#clipper2)" />
</g>
<!-- 以ä¸ãã¯ãªãããããã¹ -->
<clipPath id="clipper1" clipPathUnits="objectBoundingBox">
<path
d="M 0.5 -0.15 l 0.65 0.65 -0.65,0.65 -0.65,-0.65 0.65,-0.65 m 0,0.33 l -0.33,0.33 0.33,0.33 0.33,-0.33 -0.33,-0.33 z" />
</clipPath>
<clipPath id="clipper2" clipPathUnits="objectBoundingBox">
<path
d="M 0.5 -0.15 l 0.65 0.65 -0.65,0.65 -0.65,-0.65 0.65,-0.65 m 0,0.33 l 0.33,0.33 -0.33,0.33 -0.33,-0.33 0.33,-0.33 z" />
</clipPath>
</svg>
åã¨åã CSS ãé©ç¨ãã¾ãã
#clipper1 {
clip-rule: nonzero;
}
#clipper2 {
clip-rule: evenodd;
}
ãã®å ´åããã¹ã®å¤å´ã®é¨åã¯æè¨åãï¼å·¦ããå³ï¼æ¹åã«ç§»åãããã¹ã®å å´ã®é¨åã¯åæè¨åãï¼å³ããå·¦ï¼æ¹åã«ç§»åããããã使ç¨ããã¯ãªããã«ã¼ã«ã«é¢ä¿ãªããçµæã®ã¯ãªããå½¢ç¶ã¯åãã«ãªãã¾ãã
仿§æ¸
| Specification |
|---|
| CSS Masking Module Level 1 > # the-clip-rule > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
fill-ruleclip-path- CSS ã¯ãªããå ¥é
- CSS ãã¹ã¯ã¢ã¸ã¥ã¼ã«
- SVG ã®
clip-rule屿§ - SVG ã®
<clipPath>è¦ç´ - SVG ã®
fill-rule屿§