在我的应用中,我加载了不同的SVG文件,并需要对其进行缩放。如我所见,我需要将转换矩阵应用于元素以使其缩放,但这不适用于SVG元素,因此我需要将所有内容包装在<g>
中并进行转换。
所以我的问题是这样做安全吗?是否允许像<defs>
这样的元素不是<svg>
的直接子元素?在这种情况下,最外面的<g>
上的转换会影响<defs>
内部的元素吗?如果将所有内容包装在<g>
中,还会出现什么其他问题?
最佳答案
是的,您可以在任何需要的地方使用<defs>
,尽管建议将其保留为根元素的直接子代。问问自己是否真的需要将样式继承到<defs>
内容中。通常,<defs>
中的内容由其他元素引用,例如<use>
,因此在大多数情况下,<defs>
的放置位置并不重要。<g>
元素上的转换不会直接影响子<defs>
,因为该转换不会被继承。但是,这可能会影响某些SVG DOM调用的返回值,但是通常,如果您要询问<defs>
中元素的详细信息,则无论如何都需要小心,因为通常需要更多上下文来正确计算结果,例如百分比和objectBoundingBox单元分别取决于视口和引用元素。
如果随附的SVG片段的css样式规则选择了例如root元素或svg元素的子元素,则可能会遇到问题。