html - 带有负坐标的 SVG viewBox
问题描述
我想创建可重复使用的形状,这些形状在使用时会自动缩放以适应给定视口的大小。
我的方法是将形状包含在一个“符号”元素中,并给它一个与形状本身大小相同的 viewBox。
这似乎适用于圆形和矩形,但我在使用路径绘制的菱形时遇到了问题。
我通过创建 (-1, -1, width+2, height+2) 的 viewBox 找到了解决方案,但我想知道这是否受到官方支持,或者是否有更好的解决方案。
在下面的示例中,第一个形状是直接绘制的,第二个形状是从“使用”元素派生的。如果 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 指定为viewbox
而不是viewBox
,所以 viewBox 甚至没有被应用。检查你的大小写!
推荐阅读
- r - 如何从组合变量名称创建新的分类变量
- javascript - JS - TextEncoder().encode 何时与从每个 char 的 charCode 生成的数组不同
- xslt - 使用 XSLT 如何让我的输出重复而不是只返回第一个实例?
- excel - 7.70 64 位中的错误“调用的对象已断开连接”(在 32 位中工作)
- javascript - Material UI 的 Stepper StepLabel 图标问题未定义
- python - 为什么数据库的响应周围有括号?
- javascript - window.open with width and height 打开一个没有实际宽度和高度的窗口
- linux - Linux中不同的终端文件颜色是什么意思
- django - 如何链接 django 信号和 ajax
- javascript - 隐藏 Safari 浏览器内置图标