我想创建一个CSS类来填充带有图像的路径,该路径可以应用于任何SVG路径并用图像填充该路径。图像必须拉伸以适合该路径。
实现这一目标;我创建了一个带有图像标记的图案,并将宽度和高度设置为 100%。但是图像占据了整个屏幕的100%而不是容器的 objectBoundingBox (在这种情况下是 svg 标记)。
以下是示例代码:
.myClass {
fill: url(#image);
stroke: red;
stroke-width: 5;
}
<svg id='pattern' xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<pattern id='image' x=0 y=0 width="100%" height="100%" patternUnits='objectBoundingBox'>
<image xlink:href='myImage.png' x=0 y=0 width="100%" height="100%" preserveAspectRatio="none"></image>
</pattern>
</defs>
</svg>
<svg id='triangle' xmlns="http://www.w3.org/2000/svg" version="1.1" width='300px' height='300px'>
<path d='M0 0 L300 0 L300 300 Z' class='myClass'></path>
</svg>
可能是我做错了。
请为此问题提出任何解决方案。
答案 0 :(得分:9)
这是你的工作 - http://jsfiddle.net/eAfTc/
.myClass {
fill: url(#image);
stroke: red;
stroke-width: 5;
}
<svg id='pattern' xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<pattern id='image' width="1" height="1" viewBox="0 0 100 100" preserveAspectRatio="none">
<image xlink:href='http://dummyimage.com/600x400/abc/333' width="100" height="100" preserveAspectRatio="none"></image>
</pattern>
</defs>
</svg>
<svg id='triangle' xmlns="http://www.w3.org/2000/svg" version="1.1" width='300px' height='300px'>
<path d='M0 0 L300 0 L300 300 Z' class='myClass'></path>
</svg>
请注意,有一个patternContentUnits和一个patternUnits,他们会做不同的事情。我个人更喜欢使用viewBox来定义坐标系。
这是一个new example,显示应用于不同大小和宽高比的各种元素的模式,它也摆脱了第一个svg片段。
更新:我将'preserveAspectRatio'添加到&lt; pattern&gt;元素,以及显示拉伸和缩放的新示例。