<basic-shape>
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æ.
* Some parts of this feature may have varying levels of support.
<basic-shape> 㯠CSS ã®ãã¼ã¿åã§ãclip-pathãshape-outsideãoffset-path ã®åããããã£ã§ä½¿ç¨ãããã·ã§ã¤ãã表ãã¾ãã
試ãã¦ã¿ã¾ããã
clip-path: inset(22% 12% 15px 35px);
clip-path: circle(6rem at 12rem 8rem);
clip-path: ellipse(115px 55px at 50% 40%);
clip-path: polygon(
50% 2.4%,
34.5% 33.8%,
0% 38.8%,
25% 63.1%,
19.1% 97.6%,
50% 81.3%,
80.9% 97.6%,
75% 63.1%,
100% 38.8%,
65.5% 33.8%
);
clip-path: path("M 50,245 A 160,160 0,0,1 360,120 z");
<section class="default-example" id="default-example">
<div class="transition-all" id="example-element"></div>
</section>
#default-example {
background: #ffee99;
}
#example-element {
background: linear-gradient(to bottom right, #ff5522, #0055ff);
width: 100%;
height: 100%;
}
æ§æ
<basic-shape> ãã¼ã¿åã¯ãã³ã³ããã¼ã®è¾ºããã®è·é¢ã座æ¨è·é¢ãä¸é£ã®å¯¸æ³ã«ãã£ã¦çæããç©å½¢ãåãæ¥åãå¤è§å½¢ããã¹ãããã«ä½æè
ãçæããã·ã§ã¤ããªã©ãçæãã¾ãããããã®åºæ¬ã·ã§ã¤ãã¯ã1 ã¤ã® <basic_shape> CSS 颿°ã使ç¨ãã¦å®ç¾©ãããããããã®å¤ã«ã¯ã·ã§ã¤ãåºæã®æ§æã«å¾ã弿°ãå¿
è¦ã§ãã
å ±éã®å¼æ°
ããã¤ãã®åºæ¬ã·ã§ã¤ã颿°ã«å ±éãã弿°ã«ã¯ã以ä¸ã®ãã®ãããã¾ãã
round <'border-radius'>-
è§ä¸¸ãå®ç¾©ãã¾ããã³ã³ããã¼ã®è¾ºããã®è·é¢ã«ããç©å½¢ã è·é¢ã«ããç©å½¢ãããã³å¯¸æ³ã«ããç©å½¢ãå®ç¾©ãã¾ããããã㯠CSS ã®
border-radius䏿¬æå®ããããã£ã¨åãæ§æã使ç¨ãã¾ãã <shape-radius>-
åã¾ãã¯æ¥åã®åå¾ãå®ç¾©ãã¾ããæå¹ãªå¤ã«ã¯ã
<length>ã<percentage>ãclosest-sideï¼ããã©ã«ãï¼ãfarthest-sideãããã¾ããè² ã®å¤ã¯ç¡å¹ã§ããclosest-sideãã¼ã¯ã¼ãå¤ã¯ãã·ã§ã¤ãã®ä¸å¿ããåç §ããã¯ã¹ã®æãè¿ã辺ã¾ã§ã®è·é¢ãç¨ãã¦åå¾ã®é·ãã使ãã¾ããfarthest-sideãã¼ã¯ã¼ãå¤ã¯ãã·ã§ã¤ãã®ä¸å¿ããåç §ããã¯ã¹ã®æãé ã辺ã¾ã§ã®è·é¢ãç¨ãã¾ãã <position>-
åã¾ãã¯æ¥åã®ä¸å¿ä½ç½® (
<position>) ãå®ç¾©ãã¾ããçç¥ããå ´åãããã©ã«ãã¯centerã§ãã <fill-rule>-
å¡ãã¤ã¶ãã«ã¼ã« (
fill-rule) ãè¨å®ãã¾ããããã¯åºæ¬ã·ã§ã¤ãã®å¤è§å½¢ããã¹ãã·ã§ã¤ãã§å®ç¾©ãããã·ã§ã¤ãã®å é¨ãå¡ãã¤ã¶ãæ¹æ³ã決å®ãã¾ããå¯è½ãªå¤ã¯nonzeroï¼ããã©ã«ãï¼ã¨evenoddã§ããã¡ã¢:
<fill-rule>ã¯offset-pathã§ã¯å¯¾å¿ãã¦ãããã使ç¨ããã¨ããããã£ãç¡å¹ã«ãªãã¾ãã
ç©å½¢ã®æ§æ: <basic-shape-rect>
<basic-shape-rect> å㯠<basic-shape> åã®ãµãã»ããã§ãããinset()ãrect()ãxywh() ãªã©ãç©å½¢ãçæãããã¨ã«éå®ãããåºæ¬ã·ã§ã¤ã颿°ã表ãã¾ãã
polygon()ãpath()ãshape() 颿°ãç©å½¢ãçæããããã«ä½¿ç¨ã§ãã¾ããããããã¯å辺形ãã¤ç´è§ã®å½¢ç¶ã«éå®ããã¾ããã
ã³ã³ããã¼ã®è¾ºããã®è·é¢ã«ããç©å½¢ã®æ§æ
inset() 颿°ã¯ãå¤ããã®è·é¢ã§ç©å½¢ãçæãã¾ãããã®ãµã¤ãºã¯ãã³ã³ããã¼ã® 4 ã¤ã®è¾ºããããããã®è·é¢ã«ãã£ã¦å®ç¾©ããããªãã·ã§ã³ã§è§ã丸ãããã¨ãã§ãã¾ãã
inset( <length-percentage>{1,4} [ round <'border-radius'> ]? )
æåã® 4 ã¤ã®å¼æ°ãä¸ããããã¨ãã¯ãåç
§ããã¯ã¹å
é¨ã®ããããä¸ãå³ãä¸ãå·¦ããã¿ããå
é¨ã®ç©å½¢ã«ãããå辺ã®ä½ç½®ãå®ç¾©ãããªãã»ããã表ãã¾ãããããã®å¼æ°ã¯ margin 䏿¬æå®ã®æ§æã«å¾ãã1 ã¤ã2 ã¤ã3 ã¤ã4 ã¤ã®å¤ã§å
¨å辺ãè¨å®ãããã¨ãã§ãã¾ãã
ãã寸æ³ã«å¯¾ãã辺ããã®è·é¢ã®ãã¢ã®åè¨ããã®å¯¸æ³ã® 100% ãè¶
ããå ´åã両æ¹ã®å¤ã¯æ¯ä¾ãã¦ç¸®å°ããããã®åè¨ã 100% ã«ãªãããã«èª¿æ´ããã¾ããä¾ãã°ãinset(90% 10% 60% 10%) ã®å¤ã§ã¯ãä¸é¨ã®è¾ºããã®è·é¢ã 90%ãä¸é¨ã®è¾ºããã®è·é¢ã 60% ã¨ãªãã¾ãããããã®å¤ã¯ inset(60% 10% 40% 10%) ã«æ¯ä¾ãã¦ç¸®å°ããã¾ããé åãå²ã¾ããshape-margin ãæããªããã®ãããªã·ã§ã¤ãã¯ãæãè¿ãã«å½±é¿ãä¸ãã¾ããã
座æ¨ã«ããç©å½¢ã®æ§æ
rect() 颿°ã¯ãåç
§ããã¯ã¹ã®ä¸ç«¯ããã³å·¦ç«¯ããã®æå®è·é¢ãç¨ãã¦ç©å½¢ãå®ç¾©ãããªãã·ã§ã³ã§è§ã丸ãããã¨ãã§ãã¾ãã
rect( [ <length-percentage> | auto ]{4} [ round <'border-radius'> ]? )
rect()颿°ã使ç¨ããå ´åãç©å½¢ã®å¹
ã¨é«ããå®ç¾©ãã¾ããã代ããã«ãåç
§ããã¯ã¹ã®ãµã¤ãºã¨ 4 ã¤ã®ãªãã»ããå¤ã«ãã£ã¦æ±ºå®ãããç©å½¢ã使ããããã«ã4 ã¤ã®å¤ãæå®ãã¾ããããããã®å¤ã¯ <length>ã<percentage>ããã¼ã¯ã¼ãå¤ auto ã®ããããã§ããauto ãã¼ã¯ã¼ãã¯ãä¸è¾ºã¨å·¦è¾ºã®å¤ã§ã¯ 0%ãä¸è¾ºã¨å³è¾ºã®å¤ã§ã¯ 100% ã¨ãã¦è§£éããã¾ãã
寸æ³ã«ããç©å½¢ã®æ§æ
xywh() 颿°ã¯ãåç
§ããã¯ã¹ã®å·¦ç«¯ (x) ããã³ä¸ç«¯ (y) ããã®æå®è·é¢ã«ä½ç½®ããæå®ãããå¹
(w) ã¨é«ã (h) ã§å¤§ãããå®ç¾©ãããç©å½¢ãå®ç¾©ãã¾ããè§ã®ä¸¸ãã¯ãªãã·ã§ã³ã§ãã
xywh( <length-percentage>{2} <length-percentage [0,â]>{2} [ round <'border-radius'> ]? )
åã®æ§æ
circle() 颿°ã¯ãåå¾ã¨ä½ç½®ã使ç¨ãã¦åãå®ç¾©ãã¾ãã
circle( <shape-radius>? [ at <position> ]? )
弿° <shape-radius> ã¯åã®åå¾ã <length> ã¾ã㯠<percentage> ã§è¡¨ãã¾ããããã§ãã¼ã»ã³ãå¤ã¯ãåç
§ããã¯ã¹ã®å¹
ã¨é«ãã使ç¨ã㦠sqrt(width^2+height^2)/sqrt(2) ã¨ãã¦ã®å²åã«ãªãã¾ããçç¥ãããå ´åãåå¾ã¯ closest-side ã§å®ç¾©ããã¾ãã
æ¥åã®æ§æ
ellipse() 颿°ã¯ã2 ã¤ã®åå¾ã¨ä½ç½®ãç¨ãã¦æ¥åãå®ç¾©ãã¾ãã
ellipse( [ <shape-radius>{2} ]? [ at <position> ]? )
弿° <shape-radius> ã¯ãrx 㨠ryãã¤ã¾ãæ¥åã® X 軸åå¾ã¨ Y 軸åå¾ãããã®é ã§è¡¨ãã¾ãããããã®å¤ã¯ <length> ã¾ã㯠<percentage> ã§æå®ãã¾ããããã§ãã¼ã»ã³ãå¤ãæå®ããã¨ãåç
§ããã¯ã¹ã®ä½¿ç¨å¹
ï¼rx å¤ï¼ããã³ä½¿ç¨é«ï¼ry å¤ï¼ã«å¯¾ãã¦è§£æ±ºããã¾ããåå¾å¤ã 1 ã¤ããæå®ããã¦ããªãå ´åãellipse() ã·ã§ã¤ã颿°ã¯ä¸æ£ã¨ãªãã¾ããå¤ãæå®ããã¦ããªãå ´åã¯ã50% 50% ã使ç¨ããã¾ãã
å¤è§å½¢ã®æ§æ
polygon() 颿°ã¯ãå¡ãã¤ã¶ãã«ã¼ã«ï¼SVG ã® fill-ruleï¼ã¨åº§æ¨ã®éåã使ç¨ãã¦å¤è§å½¢ãå®ç¾©ãã¾ãã
polygon( <'fill-rule'>? , [ <length-percentage> <length-percentage> ]# )
ãã®é¢æ°ã¯ãã«ã³ãåºåãã®åº§æ¨ãã¢ã®ãªã¹ããåãåãã¾ããããããã®ãã¢ã¯ç©ºç½ã§åºåããã 2 ã¤ã® <length-percentage> å¤ã§æ§æãããxi 㨠yi ã®ãã¢ã表ãã¾ãããããã®å¤ã¯ãä½ç½® iï¼2 æ¬ã®ç·ã交ããé ç¹ï¼ã«ãããå¤è§å½¢ã® x 軸ããã³ y 軸座æ¨ã表ãã¾ãã
ãã¹ã®æ§æ
path() 颿°ã¯ãSVG ã®å¡ãã¤ã¶ãã«ã¼ã« (fill-rule) ã¨ãã¹å®ç¾©ã使ç¨ãã¦ã·ã§ã¤ããå®ç¾©ãã¾ãã
path( <'fill-rule'>? , <string> )
å¿
é ã® <string> ã¯ãå¼ç¨ç¬¦ã§å²ã¾ããæååã¨ãã¦æå®ããã [SVG ãã¹] (/ja/docs/Web/SVG/Reference/Attribute/d) ã§ããpath() 颿°ã¯ shape-outside ããããã£ã®å¤ã¨ãã¦ã¯æå¹ã§ã¯ããã¾ããã
ã·ã§ã¤ãã®æ§æ
shape() 颿°ã¯ãæåã®å§ç¹ã¨ä¸é£ã®ã·ã§ã¤ãã³ãã³ããç¨ãã¦ã·ã§ã¤ããå®ç¾©ãã¾ãã
shape( <'fill-rule'>? from <coordinate-pair> , <shape-command># )
from <coordinate-pair> 弿°ã¯æåã®ã·ã§ã¤ãã³ãã³ãã®å§ç¹ã表ãã<shape-command> 㯠1 ã¤ä»¥ä¸ã®ã·ã§ã¤ãã³ãã³ããå®ç¾©ãã¾ããããã㯠SVG ãã¹ã³ãã³ã ã«é¡ä¼¼ãã¦ãã¾ããshape() 颿°ã¯ shape-outside ããããã£ã®å¤ã¨ãã¦ã¯æå¹ã§ã¯ããã¾ããã
解説
ã·ã§ã¤ããå®ç¾©ããéãåç
§ããã¯ã¹ã¯ <basic-shape> ã®å¤ã使ç¨ããããããã£ã«ãã£ã¦è¦å®ããã¾ããã·ã§ã¤ãã®åº§æ¨ç³»ã¯ãããã©ã«ãã§è¦ç´ ã®ãã¼ã¸ã³ããã¯ã¹ã®å·¦ä¸è§ãåç¹ã¨ããx軸ã¯å³æ¹åãy軸ã¯ä¸æ¹åã«åããã¾ãããã¼ã»ã³ãå¤ã§è¡¨ç¾ããããã¹ã¦ã®é·ãã¯ãåç
§ããã¯ã¹ã®ãµã¤ãºãã解決ããã¾ãã
ããã©ã«ãã®åç
§ããã¯ã¹ã¯ margin-box ã§ãããä¸è¨ç»åã«ç¤ºããéãã§ãããã®ç»å㯠shape-outside: circle(50%) ã使ç¨ãã¦çæãããåã示ãããã©ã¦ã¶ã¼ã®éçºè
ãã¼ã«ã§ç¢ºèªã§ããããã¯ã¹ã¢ãã«ã®ç°ãªãé¨åã強調ãã¦ãã¾ããããã§å®ç¾©ããã¦ããã·ã§ã¤ãã¯ãã¼ã¸ã³ããã¯ã¹ãåç
§ãã¦å®ç¾©ããã¦ãã¾ãã

åºæ¬ã·ã§ã¤ãã®è¨ç®å¤
<basic-shape> 颿°ã®ã«ãããå¤ã¯ã以ä¸ã®æ¡ä»¶ãé¤ãã°ãè¦å®éãã«è¨ç®ããã¾ãã
- çç¥ãããå¤ã¯ãããã©ã«ãå¤ãç¨ãããã¾ãã
<position>å¤ãcircle()ã¾ãã¯ellipse()ã§ä½¿ç¨ãããã¨ãåç §ããã¯ã¹ã®å·¦ä¸è§ããã®ãªãã»ããã®ãã¢ã¨ãã¦è¨ç®ããã¾ããæåã®ãªãã»ããã¯æ°´å¹³æ¹åã2ã¤ç®ã®ã¯åç´æ¹åã§ããããããã®ãªãã»ããã¯<length-percentage>å¤ã§æå®ããã¾ãã<border-radius>ã®å¤ãinset()ã§ä½¿ç¨ãããã¨ãå ¨ 8 ã¤ã®<length>ã¾ãã¯<percentage>ã®ãªã¹ãã¨ãã¦å±éããã¾ããinset()ãrect()ãxywh()颿°ã¯åçã®inset()颿°ã«è¨ç®ããã¾ãã
åºæ¬ã·ã§ã¤ãã®è£é
2 ã¤ã® <basic-shape> 颿°éã§ã¢ãã¡ã¼ã·ã§ã³ãè¡ãå ´åã以ä¸ã®è£éå¦çã«ã¼ã«ãç¶ãã¾ããããããã® <basic-shape> 颿°ã®å¼æ°å¤ã¯ãªã¹ããå½¢æãã¾ãã2 ã¤ã®ã·ã§ã¤ãéã§ã®è£éå¦çãè¡ãããããã«ã¯ã両æ¹ã®ã·ã§ã¤ããåãåç
§ããã¯ã¹ã使ç¨ãã両æ¹ã® <basic-shape> ãªã¹ãå
ã®å¤ã®æ°ã¨ç¨®é¡ãä¸è´ãã¦ããå¿
è¦ãããã¾ãã
2 ã¤ã® <basic-shape> 颿°ã®ãªã¹ãå
ã®ããããã®å¤ã¯ããã®è¨ç®å¤ã <number>ã<length>ã<percentage>ã<angle>ãcalc() ã¨ãã¦è¨ç®ãããå¤ã«åºã¥ãã¦è£éå¦çãè¡ããã¾ããå¤ããããã®ãã¼ã¿åã«è©²å½ããªãå ´åã§ããè£é対象㮠2 ã¤ã®åºæ¬ã·ã§ã¤ã颿°éã§å¤ãåä¸ã§ããå ´åï¼nonzero ãªã©ï¼ãè£éå¦çãè¡ããããã¨ãããã¾ãã
-
両æ¹ã®ã·ã§ã¤ãã
ellipse()ã¾ãã¯circle()åã®å ´å: è£éå¦çã¯ãããããã®å¯¾å¿ããå¤ã®åå¾ã<length>ã¾ãã¯<percentage>ï¼closest-sideãfarthest-sideãªã©ã®ãã¼ã¯ã¼ãã§ã¯ãªãï¼ã§æå®ããã¦ããå ´åã«é©ç¨ããã¾ãã -
両æ¹ã®ã·ã§ã¤ãã
inset()åã®å ´å: ããããã®å¯¾å¿ããå¤ã®éã«è£éå¦çãé©ç¨ããã¾ãã -
両æ¹ã®ã·ã§ã¤ãã
polygon()åã®å ´å: è£éå¦çã¯ã対å¿ããããããã®å¤ãåã<fill-rule>ã使ç¨ããã«ã³ãåºåãã®åº§æ¨ãã¢ã®æ°ãåãå ´åã«é©ç¨ããã¾ãã -
両æ¹ã®ã·ã§ã¤ãã
path()åã®å ´å: è£éå¦çã¯ã両æ¹ã®å³å½¢ã®ãã¹æååã®ãã¹ãã¼ã¿ã³ãã³ãã®æ°ã種é¡ãé åºãä¸è´ããå ´åãããããã®å¼æ°ã«å¯¾ãã¦<number>ã¨ãã¦é©ç¨ããã¾ãã -
両æ¹ã®ã·ã§ã¤ãã
shape()åã®å ´å: 対å¿ããããããã®å¤éã§è£éå¦çãé©ç¨ããã¾ãããããã¯åä¸ã®ã³ãã³ããã¼ã¯ã¼ããæã¡ãåã<by-to>ãã¼ã¯ã¼ãã使ç¨ãã¦ããå ´åã«éãã¾ããclip-pathããããã£ã§shape()ã使ç¨ããã¦ããå ´åã2 ã¤ã®å³å½¢ã¯åæã«åã<fill-rule>ãæã£ã¦ããå ´åã«è£éããã¾ãã-
<curve-command>ã¾ãã¯<smooth-command>ã使ç¨ããå ´åã¯ãå¶å¾¡ç¹ã®æ°ãä¸è´ããã¨è£éå¦çãè¡ããã¾ãã -
<arc-command>ãç°ãªã<arc-sweep>æ¹åã§ä½¿ç¨ããå ´åãè£éçµæã¯æè¨åã (cw) ã«ãªãã¾ããç°ãªã<arc-size>ãã¼ã¯ã¼ãã使ç¨ããå ´åããµã¤ãºã¯largeå¤ãç¨ãã¦è£éããã¾ãã
-
-
䏿¹ã®å³å½¢ã
path()åã§ããã䏿¹ãshape()åã§ãã£ãå ´å: ãã¹ãã¼ã¿ã³ãã³ãã®ãªã¹ããæ°ã¨é åºã®ä¸¡æ¹ã§åä¸ã§ããå ´åãããããã®å¯¾å¿ããå¤ã®éã«è£éå¦çãé©ç¨ããã¾ããè£éãããå³å½¢ã¯shape()颿°ã§ãããåããã¹ãã¼ã¿ã³ãã³ãã®ãªã¹ããç¶æãã¾ãã
ãã以å¤ã®å ´åãè£éå¦çã¯è¡ããããã¢ãã¡ã¼ã·ã§ã³ã¯é¢æ£çã«ãªãã¾ãã
ä¾
>ã¢ãã¡ã¼ã·ã§ã³ããå¤è§å½¢
ãã®ä¾ã§ã¯ã@keyframes ã¢ããã«ã¼ã«ã使ç¨ãã¦ã2 ã¤ã®å¤è§å½¢ã®éã§ã¯ãªãããã¹ãã¢ãã¡ã¼ã·ã§ã³ãã¾ãããªããã©ã¡ãã®å¤è§å½¢ãåãæ°ã®è§ãæã¤ãã¨ãããã®ç¨®ã®ã¢ãã¡ã¼ã·ã§ã³ãåä½ããããã«å¿ è¦ã§ãã
HTML
<div></div>
CSS
div {
width: 300px;
height: 300px;
background: repeating-linear-gradient(red, orange 50px);
clip-path: polygon(
50% 0%,
60% 40%,
100% 50%,
60% 60%,
50% 100%,
40% 60%,
0% 50%,
40% 40%
);
animation: 4s poly infinite alternate ease-in-out;
margin: 10px auto;
}
@keyframes poly {
from {
clip-path: polygon(
50% 0%,
60% 40%,
100% 50%,
60% 60%,
50% 100%,
40% 60%,
0% 50%,
40% 40%
);
}
to {
clip-path: polygon(
50% 30%,
100% 0%,
70% 50%,
100% 100%,
50% 70%,
0% 100%,
30% 50%,
0% 0%
);
}
}
çµæ
仿§æ¸
| Specification |
|---|
| CSS Shapes Module Level 1> # basic-shape-functions> |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
- ãã®ãã¼ã¿åã使ç¨ããããããã£:
clip-path,offset-path,shape-outside - SVG ã®ã·ã§ã¤ãè¦ç´ :
<circle>,<ellipse>,<line>,<polygon>,<polyline>,<rect> - CSS ã·ã§ã¤ãã®æ¦è¦
- CSS ã·ã§ã¤ãã¢ã¸ã¥ã¼ã«
- CSS ãã¹ã¯å ¥é
- CSS ãã¹ã¯ã¢ã¸ã¥ã¼ã«
- CSS ã·ã§ã¤ãã®ãã¹ãç·¨éãã â Firefox éçºè ãã¼ã«