在我的应用中,我加载了不同的SVG文件,并需要对其进行缩放。如我所见,我需要将转换矩阵应用于元素以使其缩放,但这不适用于SVG元素,因此我需要将所有内容包装在<g>中并进行转换。

所以我的问题是这样做安全吗?是否允许像<defs>这样的元素不是<svg>的直接子元素?在这种情况下,最外面的<g>上的转换会影响<defs>内部的元素吗?如果将所有内容包装在<g>中,还会出现什么其他问题?

最佳答案

是的,您可以在任何需要的地方使用<defs>,尽管建议将其保留为根元素的直接子代。问问自己是否真的需要将样式继承到<defs>内容中。通常,<defs>中的内容由其他元素引用,例如<use>,因此在大多数情况下,<defs>的放置位置并不重要。

<g>元素上的转换不会直接影响子<defs>,因为该转换不会被继承。但是,这可能会影响某些SVG DOM调用的返回值,但是通常,如果您要询问<defs>中元素的详细信息,则无论如何都需要小心,因为通常需要更多上下文来正确计算结果,例如百分比和objectBoundingBox单元分别取决于视口和引用元素。

如果随附的SVG片段的css样式规则选择了例如root元素或svg元素的子元素,则可能会遇到问题。

09-19 04:47