如何将SVG剪辑路径的大小调整为与图像大小相同

时间:2018-01-08 14:28:11

标签: html css svg clip-path

我调整svg剪辑路径大小以适应图像大小没什么问题。

我有这样的代码:

<svg id="image-svg" class="clip">
     <img class="main-img" src="http://25.media.tumblr.com/tumblr_m5nre6cxkQ1qbs7p5o1_r1_500.jpg" alt="" />
</svg>
<svg class="clip">
     <clipPath id="clipPolygon">
          <polygon points="52 0,100 45,50 100,0 50">
          </polygon>
     </clipPath>
</svg>

然后我正在使用这样的CSS:

#image-svg {
  left:0;
  top:0;
}
.main-img {
  clip-path: url('#clipPolygon');
  width:90%;
}

一切正常,但剪辑路径比图像本身小得多。如何解决这个问题?这是我的工作小提琴:

https://jsfiddle.net/7egbccpw/

2 个答案:

答案 0 :(得分:1)

解决方案是直接使用CSS指定路径,并使用%作为值

.main-img {
  clip-path: polygon(50% 0%, 100% 45%, 50% 100%, 0 50%);
}
<img class="main-img" src="https://lorempixel.com/200/200/" alt="" />
<img class="main-img" src="https://lorempixel.com/100/100/" alt="" />
<img class="main-img" src="https://lorempixel.com/50/50/" alt="" />

答案 1 :(得分:0)

首先,您的示例已损坏,因为SVG中没有<img>元素。您需要<image>元素。

&#13;
&#13;
#image-svg {
  left:0;
  top:0;
}
.main-img {
  clip-path: url('#clipPolygon');
  width:90%;
}
&#13;
<svg id="image-svg" class="clip">
  <image class="main-img" xlink:href="http://25.media.tumblr.com/tumblr_m5nre6cxkQ1qbs7p5o1_r1_500.jpg" alt="" />
</svg>

<svg class="clip">
  <clipPath id="clipPolygon">
    <polygon points="52 0,100 45,50 100,0 50"></polygon>
  </clipPath>
</svg>
&#13;
&#13;
&#13;

现在我认为你的意思是你希望剪辑路径自动适合图像大小。否则我猜你会让剪辑路径坐标更大。

在SVG中执行此操作的方法是使用objectBoundingBox坐标。当objectBoundingBox坐标模式生效时,坐标被缩放,以便(0,0)表示目标元素的左上角,(1,1)表示目标元素的右下角。在这种情况下,目标元素是图像。

要将此模式用于剪辑路径,您需要设置clipPathUnits="objectBoundingBox"。然后,您只需要缩放所有多边形坐标值,使其介于0和1之间。

&#13;
&#13;
#image-svg {
  width: 500px;
  height: 500px;
}
.main-img {
  clip-path: url('#clipPolygon');
  width:90%;
  height: 90%;
}
&#13;
<svg id="image-svg" class="clip">
  <image class="main-img" xlink:href="http://25.media.tumblr.com/tumblr_m5nre6cxkQ1qbs7p5o1_r1_500.jpg" alt="" />
</svg>

<svg class="clip">
  <clipPath id="clipPolygon" clipPathUnits="objectBoundingBox">
    <polygon points="0.52 0 1 0.45 0.5 1 0 0.5"></polygon>
  </clipPath>
</svg>
&#13;
&#13;
&#13;