作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将一个图案应用于几个 svg 元素,该图案应该从每个元素的 (0,0) 点开始应用。
首先我尝试像 this 这样的代码
<svg width="400" height="400">
<defs>
<pattern id="pattern1"
x="0" y="0" width="25" height="25"
patternUnits="userSpaceOnUse"
>
<circle cx="10" cy="10" r="10" style="stroke: none; fill: #0000ff" />
</pattern>
</defs>
<rect x="10" y="10" width="100" height="100"
style="stroke: #000000; fill: url(#pattern1);" />
<rect x="110" y="17" width="100" height="100"
style="stroke: #000000; fill: url(#pattern1);" />
<rect x="210" y="0" width="100" height="100"
style="stroke: #000000; fill: url(#pattern1);" />
<rect x="0" y="110" width="100" height="100"
style="stroke: #000000; fill: url(#pattern1);" />
</svg>
此示例中的问题是每个元素的模式从 svg 文档的 (0,0) 点开始,而不是每个元素的。
好的,让我们尝试(将 patternUnits="objectBoundingBox"
属性设置为模式定义,以便模式的坐标系从每个元素的 (0,0) 点开始)[ https://jsfiddle.net/gwrgd1wf/1/]
坐标系起点已按我的需要更改,但图案已停止平铺且图案的 width
和 height
属性无法正常工作。你可以看到我设置了 height="2"
,但它并没有改变图案的高度。
所以我的问题是如何正确使用 patternUnits="objectBoundingBox"
属性?
最佳答案
在 objectBoundingBox 单位中,1 个单位是形状的大小,所以如果你写 2,这意味着图案是形状大小的 2 倍,所以 1/2 的图案填充形状,你不会得到平铺。
如果您想要平铺,您需要使图案小于形状,例如使用 0.2,您将显示 5 个圆圈。例如
<svg width="400" height="400">
<defs>
<pattern id="pattern1"
x="0" y="0" width="0.2" height="0.2"
patternUnits="objectBoundingBox"
>
<circle cx="10" cy="10" r="10" style="stroke: none; fill: #0000ff" />
</pattern>
</defs>
<rect x="10" y="10" width="100" height="100"
style="stroke: #000000; fill: url(#pattern1);" />
<rect x="110" y="17" width="100" height="100"
style="stroke: #000000; fill: url(#pattern1);" />
<rect x="210" y="0" width="100" height="100"
style="stroke: #000000; fill: url(#pattern1);" />
<rect x="0" y="110" width="100" height="100"
style="stroke: #000000; fill: url(#pattern1);" />
</svg>
关于svg - 如何为 svg 元素正确使用 patternContentUnits ="objectBoundingBox"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31802219/
我是一名优秀的程序员,十分优秀!