path()
Baseline 广泛可用 *
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%;
}
语法
css
path("M 10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80")
/* When used in clip-path only */
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 值提供,以创建球沿其移动的椭圆形路径。
html
<div id="path">
<div id="ball"></div>
</div>
<button>animate</button>
css
#path {
margin: 40px;
width: 400px;
height: 200px;
/* draw the gray ramp */
background: radial-gradient(at 50% 0%, transparent 70%, grey 70%, grey 100%);
}
#ball {
width: 30px;
height: 30px;
background-color: red;
border-radius: 50%;
/* mark the elliptical path */
offset-path: path("M 15 15 A 6 5.5 10 0 0 385 15");
}
js
const btn = document.querySelector("button");
const ball = document.getElementById("ball");
btn.addEventListener("click", () => {
btn.setAttribute("disabled", true);
setTimeout(() => btn.removeAttribute("disabled"), 6000);
ball.animate(
// animate the offset path
{ offsetDistance: [0, "100%"] },
{
duration: 1500,
iterations: 4,
easing: "cubic-bezier(.667,0.01,.333,.99)",
direction: "alternate",
},
);
});
修改 SVG 路径 d 属性的值
path() 可用于修改 SVG d 属性的值,该值在 CSS 中也可以设置为 none。
如果 d 作为 CSS 属性受支持,则当您将鼠标悬停在“V”符号上时,它将垂直翻转。
CSS
css
html,
body,
svg {
height: 100%;
}
/* This path is displayed on hover */
#svg_css_ex1:hover path {
d: path("M20,80 L50,20 L80,80");
}
HTML
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>
结果
规范
| 规范 |
|---|
| CSS Shapes Module Level 1 # funcdef-basic-shape-path |
浏览器兼容性
加载中…
另见
<shape-outside>- CSS 形状模块
- CSS 形状概述
- SVG
path语法:带插图的指南,来自 CSS-tricks (2021)