的周围的形状笔划总是的形状的精确的几何边界居中,因此通过半笔划宽度延伸超过所述形状。
如果因为任何原因您不想使用overflow:visible
,则另一个选项是调整形状的位置,以便在边缘有一点填充,等于笔画宽度的一半。 (当然,假设行程宽度将每次使用符号时间相同。)
请注意,您必须调整<path>
的位置<symbol>
内,而不仅仅是<symbol>
的位置内你的SVG。这是因为在它自己的视口中每个对符号元素is drawn as if it was a nested <svg>
element的引用具有固定的高度,宽度和“viewBox”坐标系。你没有在符号上设置这些属性,所以它们最终成为嵌套SVG的默认值:宽度和高度等于父级的100%,默认坐标系统(0,0)在左上角视口。
然后,将“嵌套SVG”定位,使其左上角位于<use>
元素中指定的(x,y)位置,但就符号内的图形内容而言,矩形边该视口是绘图表面的边缘。当然,除非你特别允许溢出,正如@helderdarocha建议的那样。 (顺便说一下,符号被绘制为嵌套SVG的想法可能是为什么你需要为Firefox指定svg{ overflow:visible;}
,但它确实应该通过直接设置符号的属性来工作;我会称这是一个Firefox错误。)
在您的其他问题:<g>
元素可以嵌套多次没有问题。对于<symbol>
元素,它不是很清楚。 The specs表示符号非常像<g>
元素,但(a)它们具有视口并且(b)符号不是直接绘制的,它仅可用于<use>
元素的引用。
现在,这表明<symbol>
可以嵌套像<g>
元素。并在Chrome上运行。在Firefox上,不是那么多。我假定当Firefox复制外部<symbol>
的内部内容时,它会将内部<symbol>
元素视为它们只是符号定义,而不像它们是效果器那些符号。
I.e.这样
<svg>
<defs>
<symbol id="complicated">
<symbol id="firstPart">
<path d="...."/>
</symbol>
<symbol id="secondPart">
<path d="...."/>
</symbol>
</symbol>
</defs>
<use xlink:href="#complicated"/>
</svg>
代码被呈现,如果它是
<svg>
<defs>
<symbol id="complicated">
<symbol id="firstPart">
<path d="...."/>
</symbol>
<symbol id="secondPart">
<path d="...."/>
</symbol>
</symbol>
</defs>
<g> <!-- The <use> element is drawn as if it was a <g> element -->
<svg> <!-- The <symbol> element is drawn as if it was a nested <svg> -->
<symbol id="firstPart"> <!-- the internal symbol is copied as-is -->
<path d="...."/>
</symbol>
<symbol id="secondPart"> <!-- but symbols aren't drawn directly! -->
<path d="...."/>
</symbol>
<svg>
</g>
</svg>
...这实在不应该在所有渲染成任何东西。这个我不会称火狐为“bug”,只是对规格的字面解释,对嵌套的符号元素没有给予任何特殊的处理。
有一个办法却得到符号窝,那就是在符号定义中使用<use>
元素:
<svg>
<defs>
<symbol id="firstPart">
<path d="...."/>
</symbol>
<symbol id="secondPart">
<path d="...."/>
</symbol>
<symbol id="complicated">
<use xlink:href="#firstPart"/>
<use xlink:href="#secondPart"/>
</symbol>
</defs>
<use xlink:href="#complicated"/>
</svg>
这是你的小提琴与结构更新:http://jsfiddle.net/vGNMu/6/
“因此,”另一个选项是调整形状的位置,以便在边缘上有一点填充“,即为什么我在'use'标记中添加了'x =”10“y =”10“',那是不对的? !而且两者'溢出:visible'和_nested_'symbol'标签铬工作,但不能在Firefox :( – rps
当我巢'symbol'或'g'标签没有出现在FF27 – rps
嵌套''要素应该总是工作 - 给我一个例子,它没有!嵌套符号元素我不确定(规格不明确),这就是为什么我创建了小提琴 - 但我显然应该测试它跨浏览器! LL更新纠正 - 并添加一些澄清,为什么你的填充尝试不工作 –
AmeliaBR