【发布时间】:2019-05-06 04:33:07
【问题描述】:
我正在尝试使用 <path> SVG 元素创建响应式 SVG 剪辑路径。但是,我无法让它工作。
我已经使用更基本的形状(例如<circle>)让它工作,但不是<path> 元素。我还使用带有 <path> 元素的静态尺寸使其工作。
我使用此处的说明作为参考:https://www.smashingmagazine.com/2015/05/creating-responsive-shapes-with-clip-path/。我还查看了有关 StackOverflow 和其他示例的类似问题,但它们主要处理基本形状而不是路径变量。
我使用的 SVG 形状是从 Adobe Illustrator 导出的雨滴形状。
这是我的代码:
HTML
<svg id="raindropSVG" viewBox="0 0 810 1012">
<defs>
<clipPath id="raindropClipPath" clipPathUnits="objectBoundingBox">
<path d="M0,604.4C0,523.7,30.7,408.8,97.5,320,217,160.9,409.2,0,409.2,0S597.2,167.8,717,331c63,85.7,93,196.4,93,274,0,224.5-181.3,407-405,407S0,829.5,0,604.4Z"/>
</clipPath>
</defs>
</svg>
<img src="clipped-image.jpg" alt="" class="clipped-img">
CSS
.clipped-img {
clip-path: url(#raindropClipPath);
width: 100%;
height: auto;
}
#raindropSVG {
width: 0;
height: 0;
}
这个想法是改变.clipped-img的宽度(或高度)应该相应地缩放雨滴形状。
使用clipPathUnits="objectBoundingBox" 是使clipPath 响应的必要条件。但是,一旦我添加了这个,剪辑的图像就会消失。
我认为我哪里出错了
我怀疑 path 元素指定的路径不是相对单位,但是我不知道如何将单位更改为相对单位。
提前感谢所有回复!
【问题讨论】:
-
objectBoundingBox 单位范围从 0 到 1。M0,604.4 太大了。想象一下,您将单位从 3 英寸更改为 3 公里,您不会期望这是相同的距离。
-
@RobertLongson 感谢您的回复。我如何将这些单位更改为相对单位?处理基本形状时,这很简单,但是如何使用示例中的更复杂的形状来完成此操作?
-
当图像的纵横比发生变化时,有两种方法可以实现:剪辑路径的纵横比适应图像的纵横比(扭曲形状),或者剪辑路径保持不变它的纵横比,但不会拉伸到图像的所有边框。您希望它以哪种方式工作?
-
@ccprog 我会选择第一种方式,因为这是我所期望的。不过,无论哪种方式都很好。