shape()
Baseline
2026
Newly available
Since February 2026, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
shape() 㯠CSS ã®é¢æ°ã§ãclip-path ããã³ offset-path ããããã£ã®å³å½¢ãå®ç¾©ããããã«ä½¿ç¨ããã¾ããããã¯ãå³å½¢ã®ãã¹ãå®ç¾©ããä¸é£ã®ã·ã§ã¤ãã³ãã³ãã¨èµ·ç¹ãçµã¿åããããã®ã§ããshape() 颿°ã¯ã<basic-shape> ãã¼ã¿åã®ã¡ã³ãã¼ã§ãã
æ§æ
/* <fill-rule> */
clip-path: shape(nonzero from 0 0, line to 10px 10px);
/* <move-command>, <line-command>, close */
offset-path: shape(from 10px 10px, move by 10px 5px, line by 20px 40%, close);
/* <hvline-command> */
offset-path: shape(from 10px 10px, hline by 50px, vline to 5rem);
/* <curve-command> */
offset-path: shape(
from 10px 10px,
curve to 80px 80px with 160px 1px / 20% 16px
);
/* <smooth-command> */
offset-path: shape(from 10px 10px, smooth to 100px 50pt);
/* <arc-command> */
offset-path: shape(
from 5% 0.5rem,
arc to 80px 1pt of 10% ccw large rotate 25deg
);
/* CSS ç®è¡é¢æ°ãä½¿ç¨ */
offset-path: shape(
from 5px -5%,
hline to 50px,
vline by calc(0% + 160px),
hline by 70.5px,
close,
vline by 60px
);
clip-path: shape(
evenodd from 10px 10px,
curve to 60px 20% with 40px 0,
smooth to 90px 0,
curve by -20px 60% with 10% 40px / 20% 20px,
smooth by -40% -10px with -10px 70px,
close
);
弿°
<fill-rule>çç¥å¯-
å³å½¢ã®éãªãåãé åã®å¡ãã¤ã¶ãæ¹æ³ãæå®ãã¾ãã使ç¨å¯è½ãªå¤ã¯æ¬¡ã®ã¨ããã§ãã
-
nonzero: ããç¹ãå³å½¢ã®å å´ã«ããã¨ã¿ãªãããã®ã¯ãç¹ããæç»ãããå ç·ããã¹åºéãå·¦ããå³ã¸ééããæ°ãå³ããå·¦ã¸ééããæ°ãããå¤ãããã®çµæãã¼ã以å¤ã®å¤ã¨ãªãå ´åã§ãããããã<fill-rule>ãçç¥ãããå ´åã®ããã©ã«ãå¤ã§ãã -
evenodd: ããç¹ãå³å½¢ã®å å´ã«ããã¨ã¿ãªãããã®ã¯ããã®ç¹ããå¼ãããå ç·ã横åããã¹åºéã®æ°ã奿°ã®å ´åã§ããããã¯ãå ç·ãå³å½¢ã«å ¥ããã³ã«ãåæ°ã®åæ°ã ãåºã¦ããªããã¨ãæå³ãã対å¿ããåºå£ã®ãªã奿°ã®é²å ¥åæ°ã示ãã¾ãã
è¦å:
<fill-rule>ã¯offset-pathã§ã¯å¯¾å¿ãã¦ãããã使ç¨ããã¨ããããã£ãç¡å¹ã«ãªãã¾ãã -
from <coordinate-pair>-
æåã®
<shape-command>ã®èµ·ç¹ããåç §ããã¯ã¹ ã®å·¦ä¸è§ããæ¸¬å®ããã座æ¨ã®ãã¢ã¨ãã¦å®ç¾©ãã¾ãã座æ¨ã¯ç©ºç½åºåãã§æå®ããã<x> <y>ã®<length-percentage>å¤ã§ãããããããå·¦ãªãã»ããã¨ä¸ãªãã»ããã表ãã¾ãããã¼ã»ã³ãå¤ã¯ãããããè¦ç´ ã®åç §ããã¯ã¹ã®å¹ ã¨é«ãããã®ç¸å¯¾å¤ã§ãããã®å¼æ°ã®å¾ã«ã«ã³ãã追å ãã¾ãã <shape-command>-
å³å½¢ãå®ç¾©ãããã«ã³ãåºåãã®1ã¤ä»¥ä¸ã®ã³ãã³ãã®ãªã¹ããæå®ãã¾ããæ§æã¯ SVG ãã¹ã³ãã³ãã¨åæ§ã§ããã³ãã³ãã«ã¯
<move-command>ã<line-command>ã<hv-line-command>ã<curve-command>ã<smooth-command>ã<arc-command>ãcloseãããã¾ããããããã®ã³ãã³ãã®èµ·ç¹ã¯ååã®ã³ãã³ãã®çµç¹ã§ãããå³å½¢ã®æåã®ç¹ã¯from <coordinate-pair>弿°ã§å®ç¾©ããã¾ãã
ã·ã§ã¤ãã³ãã³ã
ã»ã¨ãã©ã®ã·ã§ã¤ãã³ãã³ãã®æ§æã¯ãmove ã line ãªã©ã®ãã£ã¬ã¯ãã£ãã¨ãªããã¼ã¯ã¼ãã«ãby ã¾ã㯠to ãã¼ã¯ã¼ããããã¦åº§æ¨ã®ã»ãããç¶ãå½¢å¼ã§ãã
by:<coordinate-pair>ãã³ãã³ãã®èµ·ç¹ã«å¯¾ããç¸å¯¾åº§æ¨ï¼ãç¸å¯¾ãå¤ï¼ã§ãããã¨ã示ãã¾ããto:<coordinate-pair>ãåç §ããã¯ã¹ã®å·¦ä¸è§ãåºæºã¨ããç¸å¯¾åº§æ¨ã§ãããã¨ã示ãã¾ãï¼ã絶対ã座æ¨å¤ï¼ã
ã¡ã¢:
<coordinate-pair>å
ã®åº§æ¨ããã¼ã»ã³ãå¤ã§æå®ããã¦ããå ´åããã®å¤ã¯åç
§ããã¯ã¹ã®å¯¾å¿ããå¹
ã¾ãã¯é«ããåºæºã«è¨ç®ããã¾ãã
次㮠<shape-command> ãæå®ã§ãã¾ãã
<move-command>-
move [by | to] <coordinate-pair>ã®å½¢ã§æå®ãã¾ãããã®ã³ãã³ãã¯ã·ã§ã¤ãã³ãã³ãã®ãªã¹ãã« MoveTo ã³ãã³ãã追å ãã¾ããä½ãæç»ãããã代ããã«æ¬¡ã®ã³ãã³ãã®èµ·ç¹ãæå®ãã¾ããbyã¾ãã¯toãã¼ã¯ã¼ãã¯ããããã<coordinate-pair>ã®ç¹ãç¸å¯¾åº§æ¨ã絶対座æ¨ããæå®ãã¾ãã<ç§»åã³ãã³ã>ãcloseã³ãã³ãã«ç¶ãå ´åãæ¬¡ã®å³å½¢ã¾ãã¯ãµããã¹ã®èµ·ç¹ãèå¥ãã¾ãã <line-command>-
line [by | to] <coordinate-pair>ã®å½¢ã§æå®ãã¾ãããã®ã³ãã³ãã¯ã·ã§ã¤ãã³ãã³ãã®ãªã¹ãã« LineTo ã³ãã³ã ã追å ãã¾ããã³ãã³ãã®èµ·ç¹ããçµç¹ã¾ã§ç´ç·ãæç»ãã¾ããbyã¾ãã¯toãã¼ã¯ã¼ãã¯ã<coordinate-pair>ã§æå®ãããçµç¹ãç¸å¯¾åº§æ¨ã絶対座æ¨ããããããæå®ãã¾ãã <hv-line-command>-
[hline | vline] [by | to] <length-percentage>ã®å½¢ã§æå®ãã¾ãããã®ã³ãã³ãã¯ãã·ã§ã¤ãã³ãã³ãã®ãªã¹ãã«æ°´å¹³ç· (hline) ã¾ãã¯åç´ç· (vline) ã® LineTo ã³ãã³ãã追å ãã¾ããhlineã§ã¯ãã³ãã³ãã®èµ·ç¹ãã<length-percentage>ã§å®ç¾©ãããxä½ç½®ã¾ã§ãã¾ãã¯xä½ç½®ãã<length-percentage>ã§å®ç¾©ãããyä½ç½®ã¾ã§æ°´å¹³ç·ãæç»ããã¾ããvlineã§ã¯ãã³ãã³ãã®èµ·ç¹ãã<length-percentage>ã§å®ç¾©ãããyä½ç½®ã¾ã§ãã¾ãã¯yä½ç½®ãã<length-percentage>ã§å®ç¾©ãããxä½ç½®ã¾ã§åç´ç·ãæç»ããã¾ããbyã¾ãã¯toãã¼ã¯ã¼ãã¯ãããããç¸å¯¾çã¾ãã¯çµ¶å¯¾çãªçµç¹ã決å®ãã¾ãããã®ã³ãã³ãã¯ãåä¸ã®<length-percentage>ã§ä¸æ¹ã®åº§æ¨å¤ãæå®ãããã䏿¹ã®åº§æ¨å¤ãã³ãã³ãã®èµ·ç¹ãã夿´ãããªã<line-command>ã¨åçã§ãã <curve-command>-
curve [by | to] <end-point> with <control-point> [/ <control-point>]ã®å½¢ã§æå®ãã¾ãããã®ã³ãã³ãã¯ãã·ã§ã¤ãã³ãã³ãã®ãªã¹ãã« ãã¸ã§æ²ç·ã³ãã³ã ã追å ãã¾ããbyã¾ãã¯toãã¼ã¯ã¼ãã¯ã<end-point>ã§æå®ãããæ²ç·ã®çµç¹ãç¸å¯¾åº§æ¨ã絶対座æ¨ããæ±ºå®ãã¾ããwithãã¼ã¯ã¼ãã¯ããã¸ã§æ²ç·ã®å¶å¾¡ç¹ã次ã®ã¨ããæå®ãã¾ãã- åä¸ã®
<control-point>ã®ã¿ãæå®ãããå ´åããã®ã³ãã³ãã¯äºæ¬¡ãã¸ã§æ²ç·ãæç»ãã¾ãããã㯠3 ã¤ã®ç¹ï¼èµ·ç¹ãå¶å¾¡ç¹ãçµç¹ï¼ã«ãã£ã¦å®ç¾©ããã¾ãã - 2 ã¤ã®
<control-point>å¤ãæå®ãããå ´åãã³ãã³ã㯠4 ã¤ã®ç¹ï¼èµ·ç¹ã2 ã¤ã®å¶å¾¡ç¹ãçµç¹ï¼ã§å®ç¾©ããã 3 次ã¹ã¸ã§æ²ç·ãæç»ãã¾ãã
æå¹ãª
<end-point>ã®å¤ã«ã¯ä»¥ä¸ã®ãã®ãããã¾ãã<position>ãã¼ã¯ã¼ãã¾ãã¯<coordinate-value-pair>-
æ²ç·ã®çµç¹ã絶対ä½ç½®ã®å ´åï¼
toã使ç¨ãã¦æå®ï¼ã«ä½¿ç¨ã§ãã¾ãã <coordinate-value-pair>-
æ²ç·ã®çµç¹ãç¸å¯¾ä½ç½®ã®å ´åï¼
byã使ç¨ãã¦æå®ï¼ã«ä½¿ç¨ã§ãã¾ãã
æå¹ãª
<control-point>ã®å¤ã«ã¯ä»¥ä¸ã®ãã®ãããã¾ãã<position>-
ä½ç½®ãã¼ã¯ã¼ããæå®ãã¾ãããã®å¤ã¯ãæ²ç·ã®çµç¹ã絶対ä½ç½®ï¼
toã使ç¨ãã¦æå®ï¼ã®å ´åã«ã®ã¿æå¹ã§ãã <coordinate-value-pair>-
座æ¨ãå®ç¾©ãã
<length-percentage>å¤ã®ãã¢ãæå®ãã¾ãã <relative-control-point>-
<coordinate-value-pair>ãå®ç¾©ãããã®å¾ã«fromãã¼ã¯ã¼ãã¨æ¬¡ã®ãã¼ã¯ã¼ãã®ãããããç¶ãã¾ããstart-
å¶å¾¡ç¹ãç¾å¨ã®ã³ãã³ãã®èµ·ç¹ã«å¯¾ããç¸å¯¾ä½ç½®ã§ãããã¨ã示ãã¾ãã
end-
å¶å¾¡ç¹ãç¾å¨ã®ã³ãã³ãã®çµç¹ã«å¯¾ããç¸å¯¾ä½ç½®ã§ãããã¨ã示ãã¾ãã
origin-
å¶å¾¡ç¹ããå³å½¢ãæç»ããã¦ããã³ã³ããã¼ã®å·¦ä¸ã®ç¹ï¼åç¹ï¼ã«å¯¾ããç¸å¯¾ä½ç½®ã§ãããã¨ã示ãã¾ãã
ã¡ã¢:
<relative-control-point>ãã¼ã¯ã¼ããæå®ããã¦ããªãå ´åã<control-point>ã¯é常ã®<coordinate-value-pair>ã¨ãªãã座æ¨ã¯æ²ç·ã®èµ·ç¹ã«å¯¾ããç¸å¯¾åº§æ¨ã¨ãªãã¾ããè¨ãæããã°ãstartãããã©ã«ãè¨å®ã¨ãªãã¾ãã
- åä¸ã®
<smooth-command>-
smooth [by | to] <end-point> [with <control-point>]ã®å½¢å¼ã§æå®ããã¾ãããã®ã³ãã³ãã¯ãã·ã§ã¤ãã³ãã³ãã®ãªã¹ãã«æ»ãã㪠ãã¸ã§æ²ç·ã³ãã³ã ã追å ãã¾ããbyã¾ãã¯toãã¼ã¯ã¼ãã¯ã<end-point>ã§æå®ãããæ²ç·ã®çµç¹ãç¸å¯¾åº§æ¨ã絶対座æ¨ããæ±ºå®ãã¾ããwithãã¼ã¯ã¼ãã¯ããã¸ã§æ²ç·ã«å¯¾ãããªãã·ã§ã³ã®å¶å¾¡ç¹ãæå®ãã¾ããwith <control-point>ãçç¥ãããå ´åãã³ãã³ãã¯æ»ãããªäºæ¬¡ãã¸ã§æ²ç·ãæç»ãã¾ãããã®æ²ç·ã¯ãååã®ä½¿ç¨ãããå¶å¾¡ç¹ã¨ç¾å¨ã®çµç¹ãç¨ãã¦å®ç¾©ããã¾ãã- ãªãã·ã§ã³ã®
withãã¼ã¯ã¼ããè¨è¼ããã¦ããå ´åã<control-point>ãéãã¦æ²ç·ã®å¶å¾¡ç¹ãæå®ããåå¶å¾¡ç¹ãç¾å¶å¾¡ç¹ãããã³ç¾å¨ã®çµç¹ã«ãã£ã¦å®ç¾©ãããæ»ãã㪠3 次ã¹ã¸ã§æ²ç·ãæç»ãã¾ãã
æ»ãããªæ²ç·ã¯å³å½¢ããã®é£ç¶çãªæ¨ç§»ãå®ç¾ãã¾ãããäºæ¬¡æ²ç·ã¯ããã§ã¯ããã¾ãããæ»ãããªäºæ¬¡æ²ç·ã¯åä¸ã®å¶å¾¡ç¹ã使ç¨ãã¦ã·ã¼ã ã¬ã¹ãªæ¨ç§»ãç¶æãã䏿¹ãæ»ãããªä¸æ¬¡æ²ç·ã¯äºã¤ã®å¶å¾¡ç¹ã使ç¨ãã¦ããæ´ç·´ãããæ¨ç§»ãæä¾ãã¾ãã
<end-point>ã¨<control-point>æåã§æå¹ãªå¤ã¯ã<curve-command>ã¨åãã§ãã <arc-command>-
arc [by | to] <coordinate-pair> of <length-percentage> [<length-percentage>] [<arc-sweep> | <arc-size> | rotate <angle>]ã§æå®ãã¾ãããã®ã³ãã³ãã¯ãå½¢ç¶ã³ãã³ãã®ãªã¹ãã«æ¥åå¼§æ²ç·ã³ãã³ãã追å ãã¾ããèµ·ç¹ã¨çµç¹ã®éã«æ¥åå¼§ãæç»ãã¾ããbyã¾ãã¯toãã¼ã¯ã¼ãã¯ãæåã®<coordinate-pair>ã§æå®ãããæ²ç·ã®çµç¹ããããããç¸å¯¾åº§æ¨ã絶対座æ¨ããæ±ºå®ãã¾ããæ¥åå¼§æ²ç·ã³ãã³ãã¯ãèµ·ç¹ã¨çµç¹ã®ä¸¡æ¹ãéã 2 ã¤ã®æ¥åãå®ç¾©ããããããã®æ¥åãæè¨åãã¾ãã¯åæè¨åãã«ãã¬ã¼ã¹ã§ãã¾ããããã«ãããå¼§ã®ãµã¤ãºãæ¹åãè§åº¦ã«å¿ãã¦4ã¤ã®ç°ãªãå¼§ãçæããã¾ãã
ofãã¼ã¯ã¼ãã¯å¼§ãå°ãããæ¥åã®ãµã¤ãºãæå®ãã¾ããæåã®<length-percentage>ãæ¥åã®æ°´å¹³åå¾ããæ¬¡ã®<length-percentage>ãåç´åå¾ãããããæä¾ãã¾ããæ¬¡ã®å¼æ°ãæå®ãã¦ã4 ã¤ã®åå¼§ã®ãã¡ã©ãã使ç¨ãããã鏿ãã¦ãã ããã
<arc-sweep>: æå®ãããåå¼§ãæ¥åãæè¨åã (cw) ã§ãã¬ã¼ã¹ãããã®ãåæè¨åã (ccw) ã§ãã¬ã¼ã¹ãããã®ãã示ãã¾ããçç¥ãããå ´åãããã©ã«ãã¯ccwã§ãã<arc-size>: æ±ããåå¼§ãã2ã¤ã®åå¼§ã®ãã¡å¤§ããæ¹ (large) ãå°ããæ¹ (small) ãã示ãã¾ããçç¥ããå ´åãããã©ã«ãã¯smallã¨ãªãã¾ãã<angle>: æ¥åã x 軸ã«å¯¾ãã¦å転ãããè§åº¦ã度åä½ã§æå®ãã¾ããæ£ã®å¤ã¯æ¥åãæè¨åãã«ãè² ã®å¤ã¯åæè¨åãã«å転ããã¾ããçç¥ããå ´åãããã©ã«ãå¤ã¯0degã¨ãªãã¾ãã
ç¹å¥ãªç¶æ³ã¯æ¬¡ã®ã¨ããå¦çããã¾ãã
<length-percentage>ã 1 ã¤ã ãæå®ãããå ´åãæ°´å¹³åå¾ã¨åç´åå¾ã®ä¸¡æ¹ã«åãå¤ã使ç¨ãããå®è³ªçã«åã使ããã¾ãããã®å ´åã<arc-size>ã¨<angle>ã¯å½±é¿ãã¾ããã- ã©ã¡ããã®åå¾ãã¼ãã®å ´åããã®ã³ãã³ãã¯çµç¹ã¸ã®
<line-command>ã¨åçã«ãªãã¾ãã - ã©ã¡ããã®åå¾ãè² ã®å ´åããã®çµ¶å¯¾å¤ã代ããã«ä½¿ç¨ããã¾ãã
- æ°´å¹³åå¾ã¨åç´åå¾ããæå®ããã
<angle>ã§å転ãããå¾ãèµ·ç¹ã¨çµç¹ã®ä¸¡æ¹ã«äº¤ããã®ã«ååãªå¤§ããã®æ¥åãæããªãå ´åãæ¥åã両ç¹ã«äº¤ããã®ã«ã¡ããã©ååãªå¤§ããã«ãªãã¾ã§ãåå¾ã¯åä¸ã«å¤åããã¾ãã - åå¼§ã®èµ·ç¹ã¨çµç¹ãæ¥åã®å¯¾ç§°ä½ç½®ã«ããå ´åãå¯è½ãªæ¥å㯠1 ã¤ãå¯è½ãªå弧㯠2 ã¤ããåå¨ãã¾ããããã®å ´åã
<arc-sweep>ã鏿ããåå¼§ãæå®ãã<arc-size>ã¯å¹æãæã¡ã¾ããã
close-
ã·ã§ã¤ãã³ãã³ãã®ãªã¹ãã« ClosePath ã³ãã³ãã追å ãã¾ããç¾å¨ã®ä½ç½®ï¼ç´åã®ã³ãã³ãã®çµç¹ï¼ããã
from <coordinate-pair>弿°ã§å®ç¾©ããããã¹ã®æåã®ç¹ã¾ã§ç´ç·ãæç»ãã¾ããç·ãå¼ããã«å³å½¢ãéããã«ã¯ãéããã³ãã³ãã®åã«éå§åº§æ¨ãå«ã<move-command>ãè¨è¼ãã¾ããcloseã³ãã³ãã®ç´å¾ã«<move-command>ãç¶ãå ´åãããã¯æ¬¡ã®å³å½¢ã¾ãã¯ãµããã¹ã®èµ·ç¹ã¨ãã¦å®ç¾©ããã¾ãã
解説
shape() 颿°ã使ç¨ããã¨ãè¤éãªå³å½¢ãå®ç¾©ãããã¨ãã§ãã¾ãããã®é¢æ°ã¯ãããã¤ãã®æ¹æ³ã§ path() ã·ã§ã¤ã颿°ã¨ä¼¼ã¦ãã¾ãã
shape()颿°å ã®<fill-rule>弿°ã¯ãpath()颿°å ã®ååã®å¼æ°ã¨å ¨ãåæ§ã«åä½ãã¾ããshape()颿°ã§ã¯ã1 ã¤ä»¥ä¸ã®<shape-command>ãæå®ããå¿ è¦ãããã¾ããããããã®ã³ãã³ãã¯ãåºç¤ã¨ãªããã¹ã³ãã³ãã使ç¨ãã¾ããä¾ãã° MoveToãLineToãClosePath ãªã©ã§ãã
ãã ããshape() 㯠path() ã使ç¨ããå ´åã«æ¯ã¹ã¦ããã¤ãã®å©ç¹ãããã¾ãã
shape()ã¯æ¨æºã® CSS æ§æã使ç¨ããããããã®ã¹ã¿ã¤ã«ã·ã¼ãå ã§ç´æ¥å³å½¢ã使ããã夿´ããããããããªãã¾ãã䏿¹ãpath()㯠SVG ãã¹æ§æã使ç¨ãããããSVG ã«æ £ãã¦ããªãã¦ã¼ã¶ã¼ã«ã¯ç´æçã§ã¯ããã¾ãããshape()ã¯ãã¼ã»ã³ãå¤ãremãemãå«ãæ§ã 㪠CSS ã®åä½ã«å¯¾å¿ãã¦ãã¾ãã䏿¹ãpath()ã¯å³å½¢ãåä¸ã®æååã§å®ç¾©ããåä½ã¯pxã«éããã¾ããshape()ã§ã¯ãcalc()ãmax()ãabs()ãªã©ã® CSS æ°å¦é¢æ°ãåæã«ä½¿ç¨ã§ããå³å½¢ãå®ç¾©ããæè»æ§ãããã«é«ã¾ãã¾ãã
形弿æ³
<shape()> =
shape( <'fill-rule'>? from <position> , <shape-command># )
<fill-rule> =
nonzero |
evenodd
<position> =
<position-one> |
<position-two> |
<position-four>
<shape-command> =
<move-command> |
<line-command> |
close |
<horizontal-line-command> |
<vertical-line-command> |
<curve-command> |
<smooth-command> |
<arc-command>
<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}
<move-command> =
move <command-end-point>
<line-command> =
line <command-end-point>
<horizontal-line-command> =
hline [ to [ <length-percentage> | left | center | right | x-start | x-end ] | by <length-percentage> ]
<vertical-line-command> =
vline [ to [ <length-percentage> | top | center | bottom | y-start | y-end ] | by <length-percentage> ]
<curve-command> =
curve [ [ to <position> with <control-point> [ / <control-point> ]? ] | [ by <coordinate-pair> with <relative-control-point> [ / <relative-control-point> ]? ] ]
<smooth-command> =
smooth [ [ to <position> [ with <control-point> ]? ] | [ by <coordinate-pair> [ with <relative-control-point> ]? ] ]
<arc-command> =
arc <command-end-point> [ [ of <length-percentage>{1,2} ] && <arc-sweep>? && <arc-size>? && [ rotate <angle> ]? ]
<length-percentage> =
<length> |
<percentage>
<command-end-point> =
to <position> |
by <coordinate-pair>
<control-point> =
<position> |
<relative-control-point>
<coordinate-pair> =
<length-percentage>{2}
<relative-control-point> =
<coordinate-pair> [ from [ start | end | origin ] ]?
<arc-sweep> =
cw |
ccw
<arc-size> =
large |
small
ä¾
>shape() ã使ç¨ãã¦ãã¹ãå®ç¾©
ãã®ä¾ã§ã¯ãshape() 颿°ã offset-path ããããã£å
ã§ä½¿ç¨ããè¦ç´ ããã©ããã¹ã®å½¢ç¶ãå®ç¾©ããæ¹æ³ã示ãã¦ãã¾ãã
æåã®å³å½¢ shape1 ã¯ãcurve to ã³ãã³ãã§å®ç¾©ããã3次ã¹ã¸ã§æ²ç·ãã¹ã«æ²¿ã£ã¦æç»ããã¾ããæ¬¡ã« close ã³ãã³ãããæ²ç·ã®çµç¹ãã from ã³ãã³ãã§å®ç¾©ãããèµ·ç¹ã¾ã§ç´ç·ãå¼ãã¾ããæå¾ã« shape1 ã¯æ°ããä½ç½® 0px 150px ã«ç§»åããæ°´å¹³ç·ã«æ²¿ã£ã¦é²ã¿ã¾ãã
2 ã¤ç®ã®å³å½¢ shape2 ã¯ãæåã«æ°´å¹³ç·ã«æ²¿ã£ã¦ç§»åãããã®å¾ 50px 90px ã®èµ·ç¹ã«æ»ãã¾ããæ¬¡ã«åç´ç·ã«æ²¿ã£ã¦ç§»åããå¾ãçµè·¯ãéããèµ·ç¹ã«æ»ãã¾ãã
ã©ã¡ãã®å³å½¢ãå
ã®è²ããå§ã¾ããmove ã¢ãã¡ã¼ã·ã§ã³ã®çµããã¾ã§ã«å¾ã
ã«hotpinkã¸å¤åããã¢ãã¡ã¼ã·ã§ã³ãåéãããã¨å
ã®è²ã«æ»ãã¾ãããã®å¨æçãªè²ã®å¤åã«ãããã¢ãã¡ã¼ã·ã§ã³ã®é²è¡ç¶æ³ã¨åéãè¦è¦çã«ç¤ºããã¾ãã
.shape {
width: 50px;
height: 50px;
background: #2bc4a2;
position: absolute;
text-align: center;
line-height: 50px;
animation: move 6s infinite linear;
}
.shape1 {
offset-path: shape(
from 30% 60px,
curve to 180px 180px with 90px 190px,
close,
move by 0px 150px,
hline by 40%
);
}
.shape2 {
offset-path: shape(
from 50px 90px,
hline to 8em,
move to 50px 90px,
vline by 20%,
close
);
}
@keyframes move {
0% {
offset-distance: 0%;
}
100% {
offset-distance: 100%;
background-color: hotpink;
}
}
çµæ
shape() ã使ç¨ãã¦è¦ç´ ã®å¯è¦ç¯å²ãå®ç¾©
ãã®ä¾ã¯ãshape() 颿°ã clip-path ããããã£å
ã§ä½¿ç¨ãããã¨ãã§ãããã¨ã示ãã¦ãã¾ããããã«ãããã¯ãªããã³ã°é åã§ç°ãªãå³å½¢ãçæãããã¨ãã§ãã¾ããã¾ããæåã®å³å½¢ (shape1) ã¯ç´ç·ã§å®ç¾©ãããä¸è§å½¢ã使ç¨ãã¦ãã¾ãã2 ã¤ç®ã®å³å½¢ (shape2) ã¯æ²ç·ã¨æ»ãããªãã©ã³ã¸ã·ã§ã³ãè¨è¼ãã<move-command> ã使ç¨ãããã¨ã§ close ã³ãã³ãã®å¾ã«ã¯ãªããã³ã°é åã«ç©å½¢å³å½¢ã追å ããææ³ã示ãã¦ãã¾ãã
.shape {
width: 100%;
height: 100%;
background: #2bc4a2;
position: absolute;
text-align: center;
line-height: 50px;
}
/* ä¸è§å½¢ã®ã¯ãªããã³ã°é å */
.shape1 {
clip-path: shape(from 0% 0%, line to 100% 0%, line to 50% 100%, close);
}
/* æ²ç·ã¨åå¼§ã®é·ç§»ã使ç¨ãããã¼ãå½¢ã®ã¯ãªããã³ã°é åã¨ãæ°´å¹³ç·ã¨åç´ç·ã®ç§»åãä¼´ãããã¯ã¹ */
.shape2 {
clip-path: shape(
from 20px 70px,
arc to 100px 70px of 1% cw,
arc to 180px 70px of 1% cw,
curve to 100px 190px with 180px 130px,
curve to 20px 70px with 20px 130px,
close,
move to 150px 150px,
hline by 40px,
vline by 40px,
hline by -40px,
close
);
}
çµæ
shape() ã使ç¨ãã¦ç¸å¯¾å¶å¾¡ç¹ä»ãã®ã«ã¼ããæç»
ååã®ä¾ã¨åæ§ã«ããã®ä¾ã§ãè¦ç´ ã®ã¯ãªããã³ã°é åã«ç°ãªãå³å½¢ã使ããããã« clip-path ã使ç¨ãã¦ãã¾ããå³å½¢ã¯ <curve-command> 㨠<smooth-command> ã®çµã¿åããã§æå®ãããå¶å¾¡ç¹ã¯ <relative-control-point> ã®å¤ã§æå®ããã¾ãã
æåã®å³å½¢ (shape1) ã§ã¯ 2 ã¤ã® 3 次ã¹ã¸ã§æ²ç·ãæç»ããã¾ãã
- æåã®æ²ç·ã¯ãããã¯ã¹ã®å·¦ç«¯ã®ä¸å¿ããå§ã¾ããx è»¸ã«æ²¿ã£ã¦
200pxã®ä½ç½®ï¼ããã¯ã¹ã®å³ç«¯ã®ä¸å¿ï¼ã¾ã§æç»ããã¾ãããã®æ²ç·ã¯ãæ²ç·ã®èµ·ç¹ã«å¯¾ããå¶å¾¡ç¹ 1 ã¤ã¨ãåç¹ï¼ããã¯ã¹ã®å·¦ä¸é ï¼ã«å¯¾ããå¶å¾¡ç¹ 1 ã¤ã使ç¨ãã¾ãã - 2 çªç®ã®æ²ç·ã¯ããã¯ã¹ã®ä¸å¤®å³ããå§ã¾ããx è»¸ã«æ²¿ã£ã¦
-200pxã®ä½ç½®ï¼ããã¯ã¹ã®å·¦ç«¯ã®ä¸å¿ï¼ã«æç»ããã¾ãããã®æ²ç·ã¯ãåç¹ã«å¯¾ãã 1 ã¤ã®å¶å¾¡ç¹ã¨ãæ²ç·ã®èµ·ç¹ã«å¯¾ãã 1 ã¤ã®å¶å¾¡ç¹ã使ç¨ãã¾ãã
#shape1 {
width: 200px;
height: 200px;
background: green;
clip-path: shape(
from center left,
curve by 200px 0 with 50% -50% from start / 50% 0 from origin,
curve by -200px 0 with 50% 100% from origin / -50% 50% from start,
close
);
}
2 ã¤ç®ã®å³å½¢ (shape2) ã¯ã1 æ¬ã® 2 次ãã¸ã§æ²ç·ã¨ 1 æ¬ã® 3 次ã¹ã¸ã§æ²ç·ãæç»ããã¾ãã
- æåã®æ²ç·ã¯ãããã¯ã¹ã®å·¦ç«¯ã®ä¸å¿ããå§ã¾ããx 軸æ¹åã®åç¹ãã絶対座æ¨
200pxãy 軸æ¹åã®åç¹ãã絶対座æ¨100pxã®ä½ç½®ã«æç»ããã¾ããæ²ç·ã®èµ·ç¹ã«å¯¾ããç¸å¯¾ä½ç½®ã§ 1 ã¤ã®å¶å¾¡ç¹ã使ç¨ãã¾ãã - 2 ã¤ç®ã®æ²ç·ã¯ãååã®æ²ç·ã®çµç¹ããå§ã¾ããããã¯ã¹ã®å·¦ä¸å¤®ã¾ã§æç»ããã¾ããæ²ç·ã®èµ·ç¹ã«å¯¾ããå¶å¾¡ç¹ 1 ã¤ã¨ãçµç¹ã«å¯¾ããå¶å¾¡ç¹ 1 ã¤ã使ç¨ãã¾ãã
#shape2 {
width: 200px;
height: 200px;
background: purple;
clip-path: shape(
from center left,
curve to 200px 100px with 50% -80% from start,
curve to center left with 0% 70% from start / 20% 0% from end,
close
);
}
3 ã¤ç®ã®å³å½¢ (shape3) ã§ã¯ãsmooth ã³ãã³ãã使ç¨ããã2 次ãã¸ã§æ²ç· 1 æ¬ã¨ 3 次ã¹ã¸ã§æ²ç· 1 æ¬ãæç»ããã¾ãã
- æåã®æ²ç·ã¯ããã¯ã¹ã®å·¦ç«¯ã®ä¸å¿ããå§ã¾ããx è»¸ã«æ²¿ã£ã¦
200pxã®ä½ç½®ã¾ã§æç»ããã¾ããæ²ç·ã®èµ·ç¹ã«å¯¾ããç¸å¯¾ä½ç½®ã§ 1 ã¤ã®å¶å¾¡ç¹ã使ç¨ãã¾ãã - 2 ã¤ç®ã®æ²ç·ã¯ãååã®æ²ç·ã®çµç¹ããå§ã¾ããããã¯ã¹ã®ä¸å¿ã¾ã§æç»ããã¾ãããã®æ²ç·ã¯ãæ²ç·ã®èµ·ç¹ï¼ååã®æ²ç·ã®æå¾ã®å¶å¾¡ç¹ï¼ãåºæºã¨ããå¶å¾¡ç¹ã 1 ã¤ã¨ãåç¹ãåºæºã¨ããå¶å¾¡ç¹ã 1 ã¤ä½¿ç¨ãã¾ãã
#shape3 {
width: 200px;
height: 200px;
background: orangered;
clip-path: shape(
from center left,
curve by 200px 0px with 50% -80% from start,
smooth to center with 50% 100% from origin,
close
);
}
çµæ
仿§æ¸
| Specification |
|---|
| CSS Shapes Module Level 2> # shape-function> |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
clip-pathoffset-path- CSS ã·ã§ã¤ãã¢ã¸ã¥ã¼ã«
- ã·ã§ã¤ãã®æ¦è¦ã¬ã¤ã
- åºæ¬ã·ã§ã¤ãã¬ã¤ã