Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何使图像缩放以填充SVG路径的空间?_Html_Css_Svg - Fatal编程技术网

Html 如何使图像缩放以填充SVG路径的空间?

Html 如何使图像缩放以填充SVG路径的空间?,html,css,svg,Html,Css,Svg,我希望此图像(test.svg)显示在另一个svg的内部,以便可以缩放以填充该区域 test.svg <svg viewBox="0 0 2911 2521" xmlns="w3.org/2000/svg"> <path d="m0 0h2911v2521h-2911z"/> <path d="m204.5 367h2502v1787h-2502z" fill="#ff

我希望此图像(test.svg)显示在另一个svg的内部,以便可以缩放以填充该区域

test.svg

<svg viewBox="0 0 2911 2521" xmlns="w3.org/2000/svg">
  <path d="m0 0h2911v2521h-2911z"/>
  <path d="m204.5 367h2502v1787h-2502z" fill="#fff"/>
  <circle cx="1455.5" cy="1260.5" fill="#c00" r="468"/>
</svg>

HTML


#h13{fill:url(#test);}

您始终可以使用特定的类名设置元素的样式。在这里,我只是将类名
selected
添加到path元素中

我建议你有两层。背景层将有图像,前景层为十六进制(两者都可以是十六进制形状)。在这里,我在路径id=“13”的背景中插入了图像。它只是一个蓝色,并且有一个与十六进制形状匹配的剪辑路径。我建议您创建一个放置在x=0,y=0的十六进制形状,并将其用作所有(背景)图像的通用剪辑路径

我为父元素(
g
element with
id=“parent”
)创建了一个eventlistener。然后测试是否单击了正确的元素。现在不透明度覆盖了红色填充,但你可以做任何事情

let parent=document.getElementById('parent');
parent.addEventListener('click',e=>{
如果(e.target.nodeName=='path'){
//这是一个十六进制
e、 target.classList.add('selected');
}
});

g#父路径{fill:#bbb}
path.selected{填充:红色}
path.selected{不透明度:0}

您需要将patternUnits切换到objectBoundingBox,并将patternContentUnits集添加到objectBoundingBox。如果要在使视口适合较小的图像尺寸的同时保留原始纵横比,还需要在test.svg中添加一个preserveSpectratio/slice。下面是一个将test.svg转换为符号的版本

(请注意,这与上面的示例图像并不完全相同,因为您使用的图像不是用黑色左/右边框绘制的。如果您想要黑色左/右边框,则需要在测试svg中绘制它们。)


#h13{fill:url(#test);}

将背景放置在一个矩形内,其尺寸与最前端和匹配的视口相同:

注意:下面的图像仅用于使用方法

将其复制到空文档中,并将其另存为test.svg

然后可以将其擦除,并删除use元素

然后只需从放置test.svg的位置链接它

href指向test.svg的image元素在svg中第一个组下的组内进行注释


兰斯洛特·皮埃尔·布莱恩
.a24aad19-bdcd-4532-8371-4f54dd27ccbb、.b83eb350-0558-4ca5-ae05-cca66b3d1863{
填充:无;
}
.bbfd3ba8-bb9b-40e4-97f5-d0e2ca578bf5{
填充:#6c942e;
}
.b08cc7ea-c9bc-4979-a114-f4a4495297c6{
填充:#8ab345;
}
.aeffb10f-58ec-400a-9faa-24ec7e47cca5{
填充:#5a7231;
}
.a5ba573d-a1cd-48a8-804d-373b52dd7e8f{
填充:#8ab244;
}
.be31fd39-ad64-469e-992a-6102f2eedc17{
填充:#6b932e;
}
.a24aad19-bdcd-4532-8371-4f54dd27ccbb{
行程:5a7231;
笔划线头:圆形;
笔划线条连接:圆形;
笔画宽度:0;
}
.f8a8b876-3fc0-46ed-8a97-f915d88ee936{
填充:#FDFC;
}
.e696fb6a-331d-4674-9c1e-85312f6cdf42{
填写:#010101;
}
.a1484ab1-7cc7-4f07-a801-284d374b45ef{
填充:#020201;
}
.f4b5ea5a-4c49-4847-8d9b-472ed1ed7495{
填充:#060705;
}
.a9ec29d3-ed66-4142-94fa-4baf4c9d2d75{
填写:#040503;
}
.a6fea285-09b9-4de9-a3d2-af5e9e743554{
填充:#bd2a1d;
}
.e1938454-c009-441c-9022-7d5fd6d1e8d9{
填充:无;
行程:#000;
行程限制:10;
笔划宽度:0.25px;
}

图案解决方案不适合图像,请尝试Clippath。非常感谢您的回答;然而,我的问题的关键是我无法获得填充属性,以成功地显示缩放到六边形路径的图像。我将进一步调查,再次感谢您的贡献在我匆忙中,我还没有意识到蓝色背景是用base64编码的图像…它必须这样编码吗?如果我只想链接到目录中的一个图像怎么办?我还没能亲自测试一下,但我有机会在几个小时内测试一下。我对你的答案投了赞成票,在我检查完之后,我会标记这个问题是否有效。再次谢谢你,刚刚试过。当我将一个图像编码到base64时,它没有居中并缩放到十六进制路径的尺寸。@MichaelSwarts该图像不必是数据url。这只是一个例子。您可以链接到图像。我还尝试使用fill属性,但也无法使其工作,这似乎很接近,但不完全…我创建了一个示例SVG,它看起来垂直挤压。这里是供参考的:w3.org/2000/svg“>我用问题的屏幕截图更新了我的问题。如果你不想拉伸或剪裁,则填充图像的纵横比必须与六边形的纵横比匹配,即1:1.15。其他填充选项请参见这个问题:我评论的SVG示例的纵横比为1:1.15。问题一定出在别的地方了……也许可以发布一个完整的测试用例和一个示例图像,这样我们就不必猜测到底出了什么问题