Clip-path 的初始实现:path();

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。从 200 美元的免费积分 开始!

我一直感到惊讶(和悲伤)的是,clip-path 属性 虽然很棒,但只接受少量值。circle()ellipse() 函数很好,但使用 border-radius 隐藏溢出和圆角通常已经可以做到。可能最有用的值是 polygon(),因为它允许我们用任意点的直线绘制形状。

更新:现在所有三个浏览器引擎都支持 clip-path: path()。太棒了!

下面是每个值的演示

令人沮丧的是,clip-path 不接受 path()。它明明带了 path路径语法 来自 SVG,是终极语法。它允许我们绘制任何形状。

更令人困惑的是,已经存在一个 path() 函数,这是诸如 offset-path 等属性所接受的。

我曾经对这一切感到非常震惊,以至于我把它变成了一个完整的会议演讲

演讲提到了 shape-outside 属性,以及它无法使用 path()。它还提到了我们可以更改文字 <path>d 属性。

不过我不怪任何人。这很奇怪,并且由不同的团队实现,不可避免地会导致不同的结果。即使 SVG 在 <path d=""> 语法中使用无单位的值也是有点奇怪,并且在 CSS 领域是一种异常。它的行为方式、带单位的值如何表现、允许和禁止使用什么逗号语法,以及 DOM 在被询问时返回的内容,足以让你头晕。

总之!Firefox 推出了实现!

支持

这是 Firefox 中的标记 (layout.css.clip-path-path.enabled)

更新!

下面是一个演示…

您将在不支持的浏览器中看到一个正方形,而在支持 clip-path: path(); 的浏览器中看到一个心形 — 在撰写本文时,这仅限于启用了标记的 Firefox Nightly。

A screenshot of clip-path: path() working in Firefox Nightly

现在,我们只需要

  • clip-path 能够指向 SVG 中 <path> 的 URL,例如 url("#clip-path");
  • shape-outside 能够使用 path()
  • shape-outside 能够指向 <path>
  • offset-path 能够接受所有其他形状函数
  • 可能需要很多规范才能确保这一切都能得到干净的处理(祝好运,团队!)
  • 浏览器来实现这一切

😉