我调整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%;
}
一切正常,但剪辑路径比图像本身小得多。如何解决这个问题?这是我的工作小提琴:
答案 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>
元素。
#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;
现在我认为你的意思是你希望剪辑路径自动适合图像大小。否则我猜你会让剪辑路径坐标更大。
在SVG中执行此操作的方法是使用objectBoundingBox
坐标。当objectBoundingBox坐标模式生效时,坐标被缩放,以便(0,0)表示目标元素的左上角,(1,1)表示目标元素的右下角。在这种情况下,目标元素是图像。
要将此模式用于剪辑路径,您需要设置clipPathUnits="objectBoundingBox"
。然后,您只需要缩放所有多边形坐标值,使其介于0和1之间。
#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;