8

我想创建一个 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>

可能是我做错了什么。

请为这个问题提出任何解决方案。

4

1 回答 1

11

这是你的工作 - 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 来定义坐标系。

这是一个新示例,显示了应用于不同大小和纵横比的各种元素的模式,它也摆脱了第一个 svg 片段。

更新:我在 <pattern> 元素中添加了“preserveAspectRatio”,以及一个显示拉伸和缩放的新示例。

于 2012-12-17T14:12:19.707 回答