path()
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2020å¹´7æ.
* Some parts of this feature may have varying levels of support.
path() 㯠CSS ã®é¢æ°ã§ãSVG ãã¹æååãåãåãã CSS ã·ã§ã¤ãã CSS ã¢ã¼ã·ã§ã³ãã¹ã§æããããå³å½¢ãæå¹ã«ããããã«ä½¿ç¨ãã¾ããpath() 颿°ã¯ã<basic-shape> ãã¼ã¿åã®å¤ã§ããããã¯ãCSS ã® offset-path ããã³ clip-path ããããã£ãããã« SVG ã® d 屿§ã§ä½¿ç¨ã§ãã¾ãã
path() 颿°ã使ç¨ããéã«ã¯ããã¤ãã®å¶éãããã¾ãããã¹ã¯åä¸ã®æååã¨ãã¦å®ç¾©ããå¿
è¦ãããããã夿°ï¼var() 颿°ï¼ã使ç¨ãã¦ç¬èªã®ãã¹ã使ãããã¨ã¯ã§ãã¾ãããåæã«ããã¹å
ã®ãã¹ã¦ã®é·ãã¯æé»çã«ãã¯ã»ã« (px) åä½ã§å®ç¾©ããããã以å¤ã®åä½ã¯ä½¿ç¨ã§ãã¾ãããshape() 颿°ã¯ path() 颿°ãããæè»æ§ãããã¾ãã
試ãã¦ã¿ã¾ããã
clip-path: path(
"M 20 240 \
L 20 80 L 160 80 \
L 160 20 L 280 100 \
L 160 180 L 160 120 \
L 60 120 L 60 240 Z"
);
clip-path: path(
"M 20 240 \
C 20 0 300 0 300 240 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%;
}
æ§æ
path("M 10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80")
/* clip-path ã®ã¿ã§ä½¿ç¨ããã */
path(evenodd,"M 10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80")
弿°
<fill-rule>çç¥å¯-
ãã¹å ã®å¡ãã¤ã¶ãã«ã¼ã«ã§ããæå®å¯è½ãªå¤ã¯æ¬¡ã®éãã§ãã
-
nonzero: ããç¹ãå³å½¢ã®å å´ã«ããã¨ã¿ãªãããã®ã¯ãç¹ããæç»ãããå ç·ããã¹åºéãå·¦ããå³ã¸ééããæ°ãå³ããå·¦ã¸ééããæ°ãããå¤ãããã®çµæãã¼ã以å¤ã®å¤ã¨ãªãå ´åã§ãããããã<fill-rule>ãçç¥ãããå ´åã®ããã©ã«ãå¤ã§ãã -
evenodd: ããç¹ãå³å½¢ã®å å´ã«ããã¨ã¿ãªãããã®ã¯ããã®ç¹ããå¼ãããå ç·ã横åããã¹åºéã®æ°ã奿°ã®å ´åã§ããããã¯ãå ç·ãå³å½¢ã«å ¥ããã³ã«ãåæ°ã®åæ°ã ãåºã¦ããªããã¨ãæå³ãã対å¿ããåºå£ã®ãªã奿°ã®é²å ¥åæ°ã示ãã¾ãã
è¦å:
<fill-rule>ã¯offset-pathã§ã¯å¯¾å¿ãã¦ãããã使ç¨ããã¨ããããã£ãç¡å¹ã«ãªãã¾ãã -
<string>-
å¼ç¨ç¬¦ã«å²ã¾ãããã¼ã¿æååã§ãSVG ãã¹ãå®ç¾©ãã¾ããSVG ãã¹ãã¼ã¿æååã«ã¯ããã¹ã³ãã³ããå«ã¾ãã¦ãããæé»çã«ãã¯ã»ã«åä½ã使ç¨ãã¾ãã空ã®ãã¹ã¯ç¡å¹ã¨è¦ãªããã¾ãã
è¿å¤
<basic-shape> å¤ãè¿ãã¾ãã
形弿æ³
<path()> =
path( <'fill-rule'>? , <string> )
<fill-rule> =
nonzero |
evenodd
ä¾
>path() 颿°ã offset-path å¤ã¨ãã¦ä½¿ç¨
次ã®ä¾ã§ã¯ããã¼ã«ãç§»åããæ¥åå½¢ã®ãã¹ã使ããããã«ãpath() 颿°ã offset-path å¤ã¨ãã¦æå®ããã¦ãã¾ãã
<div id="path">
<div id="ball"></div>
</div>
<button>ã¢ãã¡ã¼ã·ã§ã³</button>
#path {
margin: 40px;
width: 400px;
height: 200px;
/* ç°è²ã®åãæç» */
background: radial-gradient(at 50% 0%, transparent 70%, grey 70%, grey 100%);
}
#ball {
width: 30px;
height: 30px;
background-color: red;
border-radius: 50%;
/* æ¥åå½¢ã®ãã¹ããã¼ã¯ */
offset-path: path("M 15 15 A 6 5.5 10 0 0 385 15");
}
const btn = document.querySelector("button");
const ball = document.getElementById("ball");
btn.addEventListener("click", () => {
btn.setAttribute("disabled", true);
setTimeout(() => btn.removeAttribute("disabled"), 6000);
ball.animate(
// ãªãã»ããã®ãã¹ãã¢ãã¡ã¼ã·ã§ã³
{ offsetDistance: [0, "100%"] },
{
duration: 1500,
iterations: 4,
easing: "cubic-bezier(.667,0.01,.333,.99)",
direction: "alternate",
},
);
});
SVG ãã¹ã§ d 屿§ã®å¤ã夿´ãã
path() 㯠SVG ã® d 屿§ ã®å¤ã夿´ããããã«ä½¿ç¨ãããã¨ãã§ãã¾ãã CSS ã§ none ã«è¨å®ãããã¨ãå¯è½ã§ãã
"V" ãã¼ã¯ã¯ã CSS ã®ããããã£ã¨ã㦠d ã対å¿ãã¦ããã°ãã«ã¼ã½ã«ãç½®ããã¨ãã«ç¸¦ã«å転ãã¾ãã
CSS
html,
body,
svg {
height: 100%;
}
/* ããã¼æã«ãã®ãã¹ã表示 */
#svg_css_ex1:hover path {
d: path("M20,80 L50,20 L80,80");
}
HTML
<svg id="svg_css_ex1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path fill="none" stroke="red" d="M20,20 L50,80 L80,20" />
</svg>
çµæ
仿§æ¸
| Specification |
|---|
| CSS Shapes Module Level 1> # funcdef-basic-shape-path> |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
<shape-outside>- CSS ã·ã§ã¤ãã¢ã¸ã¥ã¼ã«
- CSS ã·ã§ã¤ãã®æ¦è¦
- The SVG
pathsyntax: an illustrated guide - CSS-tricks (2021)