对于“内联”SVG 元素,您必须在 svg 元素本身内应用样式。
在<defs></defs> 标签内。由于它有自己的 DOM[文档对象模型],因此从外部应用到它的 Css 将不起作用。
您有几个不同的选项来嵌入 SVG,您可以使用它inline,如在您的 html/php 文档中声明 <svg></svg> 的示例中,或者您可以使用下面列出的许多其他方法之一;
嵌入:.................................................. ..<img src="../pathtoyourSvg"></img>
嵌入为带有后备选项的 img:<img src="logo.png" srcset="logo.svg" alt="My logo">
使用:.................................................. ........<object type="image/svg+xml" data="image.svg">
<!-- Your fall back here -->
<img src="image.svg" />
</object>
采用: ................................................ .........<embed type="image/svg+xml" src="image.svg" />
使用:.................................................. .....<iframe></iframe>
使用 Javascript 将 Svg 嵌入到画布元素中:
var img = new Image();
img.onload = function() {
ctx.drawImage(img, 0, 0);
}
img.src = "path2your.svg";
您还可以使用 Css 背景图像嵌入 Svg,
即:
.mySvgContainer{
background-image:url('PathToMySvg');
}
但是从我读过的 cmets & Questions 来看,这需要是 Url 或 Base64 编码的,这似乎有点 Hacky 并且不是很方便。
他们每个人都有自己的优点和缺点。
出于安全原因,一些 SVG 嵌入方法会阻止对外部资源的访问,包括 CSS、字体和 javascript。特别是当我们有多个图像时,理想情况下我们的嵌入方法应该能够引用单个 CSS、字体或 javascript 文件(以节省资源)并能够操作我们嵌入的 SVG。
另外值得一提的是,如果你有 display:flex;附加到 elemnet 或其父级,则宽度和高度值将不会影响弹性项目。所以它可能在控制台中显示为 0, 0。
一些有用的信息和相关问题:
Svg Coords & Units w3.org
Svg Width - Height
Applying Styles to an embedded Svg