这是一个值得了解的区别。它们看起来非常相似。它们可以做一些相同的事情。但是,一个很容易覆盖,另一个则不容易。
内联样式可能更熟悉一些
<div style="width: 300px; height: 300px;">
Inline styles on an HTML element.
</div>
SVG 也可以做到这一点
<svg style="width: 300px;">
Inline styles on an SVG element.
</svg>
但是 SVG 也具有演示属性的概念,这意味着我们可以这样做
<svg width="300px" height="300px">
Presentational attributes on an SVG element.
</svg>
区别是什么?
演示属性在 CSS 中很容易被覆盖
任何 CSS 都会起作用。
/* These styles will override the presentational attributes */
svg {
width: 250px;
height: 250px;
}
内联样式只能被 CSS 中的 !important 样式覆盖
覆盖内联样式的唯一方法是使用 !important 规则
svg {
width: 250px !important;
height: 250px !important;
}
一个粗略的图表来强调重点

我发现,这确实会在日常开发中出现。例如,Illustrator 会询问您希望如何设置导出 SVG 的样式

我相信
width
和height
属性的值应该是无单位的。例如
<svg width="300" height="300">
而不是<svg width="300px" height="300px">
嗨,Thierry,
对于 SVG 的 width/height 演示属性,您可以使用无单位数字(视为 px)或任何有效的 CSS 单位或百分比。这与 SVG 中的演示属性只是设置样式属性的另一种方式是一致的。
对于 HTML 上的
<img>
、<object>
等 width/height 演示属性,您只能使用无单位数字。带单位或不带单位(px)的
width
和height
属性的值都可以工作,例如:<svg width="300" height="300">
和<svg width="300px" height="300px">
会得到相同的结果。谢谢 AmeliaBR!
两种方式都是有效的。不带单位时,它只是静态值,但带单位时,您也可以使用百分比宽度。
嗨,AmeliaBR,
在
<img>
标签中,width
和height
的带单位或无单位数字都可以正常工作。嗨,Pranab,
它“有效”是因为浏览器知道如何从这种类型的错误中“恢复”。
<image>
也起作用,但这并不意味着我们应该使用它。实际上,正是因为作者犯了这种类型的错误,浏览器才不得不支持这种标记。