我想创建可重复使用的形状,当使用时会自动缩放以适应给定视口的大小。
我的方法是将形状包含在“symbol”元素中,并为其提供与形状本身相同大小的“viewBox”。
这似乎适用于圆形和矩形,但我在使用路径绘制的菱形上遇到了麻烦。
我通过创建(-1,-1,width+2,height+2)的viewBox找到了一个解决方案,但我想知道它是否得到了官方支持,或者是否有更好的解决方案。
在下面的示例中,第一个形状直接绘制,第二个形状派生自“use”元素。如果viewBox以“0, 0”开头,则左侧和顶部像素会丢失。
最初的回答:我想创建可重复使用的形状,当使用时会自动缩放以适应给定视口的大小。
我的方法是将形状包含在“symbol”元素中,并为其提供与形状本身相同大小的“viewBox”。
这似乎适用于圆形和矩形,但我在使用路径绘制的菱形上遇到了麻烦。
我通过创建(-1,-1,width+2,height+2)的viewBox找到了一个解决方案,但我想知道它是否得到了官方支持,或者是否有更好的解决方案。
在下面的示例中,第一个形状直接绘制,第二个形状派生自“use”元素。如果viewBox以“0, 0”开头,则左侧和顶部像素会丢失。
我的方法是将形状包含在“symbol”元素中,并为其提供与形状本身相同大小的“viewBox”。
这似乎适用于圆形和矩形,但我在使用路径绘制的菱形上遇到了麻烦。
我通过创建(-1,-1,width+2,height+2)的viewBox找到了一个解决方案,但我想知道它是否得到了官方支持,或者是否有更好的解决方案。
在下面的示例中,第一个形状直接绘制,第二个形状派生自“use”元素。如果viewBox以“0, 0”开头,则左侧和顶部像素会丢失。
最初的回答:我想创建可重复使用的形状,当使用时会自动缩放以适应给定视口的大小。
我的方法是将形状包含在“symbol”元素中,并为其提供与形状本身相同大小的“viewBox”。
这似乎适用于圆形和矩形,但我在使用路径绘制的菱形上遇到了麻烦。
我通过创建(-1,-1,width+2,height+2)的viewBox找到了一个解决方案,但我想知道它是否得到了官方支持,或者是否有更好的解决方案。
在下面的示例中,第一个形状直接绘制,第二个形状派生自“use”元素。如果viewBox以“0, 0”开头,则左侧和顶部像素会丢失。
<html>
<svg width="200" height="200"
style="margin:20px; border: 1px solid gray">
<path d="M 80 0 L 0 80 L 80 160 L 160 80 Z"
stroke="black" stroke-width="2"
stroke-linejoin="round" fill="transparent"
transform="translate(20, 20)"/>
</svg>
<svg style="display:none">
<symbol id="gw" viewBox="-1 -1 162 162">
<path d="M 80 0 L 0 80 L 80 160 L 160 80 Z"
stroke="black" stroke-width="2"
stroke-linejoin="round" fill="transparent"/>
</symbol>
</svg>
<svg width="200" height="200"
style="margin:20px; border: 1px solid gray">
<use href="#gw" width="160" height="160" transform="translate(20, 20)"/>
</svg>
</html>
viewBox="0 0 160 160"
添加到 SVG 元素中并删除transform
属性。需将 viewBox 的大小设置为菱形的边界框大小。要获取 SVG 元素的边界框,您可以使用 JavaScript 中的getBBox()
方法:lozenge.getBBox()
。 - enxanetasvg{overflow:visible}
。 - enxaneta