当前位置: 首页 > 知识库问答 >
问题:

在Safari中应用SVG剪辑路径时遇到的问题

蔺沛
2023-03-14

我正在尝试创建一个按钮的六边形边框。我的策略是使容器元素比按钮大几个像素,并在两个元素上使用相同的clip-mask。大小上的差异应该会产生一种边框效果。这在Firefox和Chrome中运行良好,但在Safari中不行。

document.getElementById("button").addEventListener("click", function(){alert("foo"); return false;});
div {
  width: 9rem;
  height: 8rem;
  position: relative;
  clip-path: url("#hexagon");
  -webkit-clip-path: url("#hexagon");
  background-color: #e2e3e5;
}

button {
  position: absolute;
  cursor: pointer;
  top: 2px;
  left: 2px;
  padding: calc(8rem * 0.1) calc(9rem * 0.2);
  width: calc(9rem - 4px);
  height: calc(8rem - 4px);
  clip-path: url("#hexagon");
  -webkit-clip-path: url("#hexagon");
  background-color: white;
  border: none;
}
<div id="div">
<button id="button">The button</button>
</div>

<svg width="0" height="0" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <clipPath id="hexagon" clipPathUnits="objectBoundingBox">
      <polygon points=".25 0, .75 0, 1 .5, .75 1, .25 1, 0 .5"/>
    </clipPath>
  </defs>
</svg>

如果没有-webkit-clip-path,Safari中的边框是一个矩形。添加后,得到的六边形的宽度比其他浏览器中的要大得多。看来剪辑路径覆盖的按钮比它应该覆盖的要多得多。有什么方法可以解决这个问题,使它在Safari中运行良好吗?

共有1个答案

华峰
2023-03-14

您可以使用clip-path:url()而不是使用clip-path:polygon()我在x上使用了您的点乘以10和偏移量乘以15,在y上使用了5。此外,我正在缩放按钮,因为“边框”几乎不可见。

document.getElementById("button").addEventListener("click", function(){alert("foo"); return false;});
div {
  width: 8rem;
  height: 6.6rem;
  position: relative;
  background-color: #ccc;
  -webkit-clip-path:polygon(40px 5px, 90px 5px, 115px 55px, 90px 105px,40px 105px, 15px 55px);
  clip-path:polygon(40px 5px, 90px 5px, 115px 55px, 90px 105px,40px 105px, 15px 55px);
}

button {
  position: absolute;
  cursor: pointer;
  text-align:center;
  width: 8rem;
  height: 6.6rem;
  -webkit-clip-path:polygon(40px 5px, 90px 5px, 115px 55px, 90px 105px,40px 105px, 15px 55px);
  clip-path:polygon(40px 5px, 90px 5px, 115px 55px, 90px 105px,40px 105px, 15px 55px);
  background-color: #fff;
  border:none;
  transform:scale(.97);
}
<div id="div">
<button id="button">The button</button>
</div>
 类似资料:
  • 问题内容: 在具有背景的元素上(图像或纯色并不重要): 我正在尝试使用SVG应用剪切路径。为了实现这一点,我将SVG内联到如下相同的元素中: 您可以运行下面的代码片段或检查JSFiddle。您可以看到原始的SVG图像(黑色)被插入行内,底部有弯曲,并且反应灵敏。相比之下,红色矩形显示的是与应用(或未应用)相同的图像。 我猜我误解了一个或一些属性,尽管在这里找不到确切的错误。任何帮助,将不胜感激。

  • SVG 路径 - <path> <path> 元素用于定义一个路径。 下面的命令可用于路径数据: M = moveto L = lineto H = horizontal lineto V = vertical lineto C = curveto S = smooth curveto Q = quadratic Bézier curve T = smooth quadratic Bézier c

  • 我想剪切我的图像在六边形形状我使用剪辑路径:剪辑路径:多边形(50%0%,100%25%,100%75%,50%100%,0%75%,0%25%)。所有这些样式都应用于img,但输出看起来像输出图像 所以请帮助我将所有图像剪切成六边形形状,就像我想要的输出一样

  • 我是一个Clojure和JVM初学者,构建工具对我来说有点混乱,所以请原谅我将要执行的愚蠢。我不知道“类路径”是什么...我只想要一个Lisp与许多库! 我使用启动项目,并且我的project.clj具有以下依赖项: 而来自my Core.clj的相关ns调用如下: 我的目录结构是leiningen用于新库的默认设置。 我在Java 1.8.0_45上使用Leiningen 2.5.1。我只是在学

  • SVG中的路径概念可以是一个形状的外框,也可以是用来裁剪的线条,这个线条可以被描边,封闭时还可以被填充。 路径和折线或多边形不同之处在于,路径可以是直线也可以曲线,因此使用路径可以构造更为复杂的几何图形。 我们可以把路径看成是手工绘图的笔迹,可以用点的集合和绘制方式(如线段或圆弧)来描述。 path 标签 path 标签用来创建一条路径,路径元素的基本属性是路径数据,用 d='path data'

  • 问题内容: 链接到示例PDF:单击此处。在这里您可以看到左侧的许多标签已被剪切(由于一些剪切说明) 当我使用PDFTextStripper时,它会打印示例PDF文件中实际剪切/隐藏的所有文本。我已经尝试过这里描述的解决方案,但是它使它变得非常有价值,因为它删除了顶部的许多文本,以及每行开头的一些文本。是否有其他方法可以使用PDFBox仅显示可见字符并跳过所有重叠的字符?也许还有其他工具只能返回可见