SVG 是一种 vector 图像格式(基于 XML),因此它可以缩放到任何大小而不会模糊。您可以通过两种主要方式包含它,每种方式都有权衡。
Inline SVG — 直接在 HTML 中的标记
html
<svg width="24" height="24" = = =>
**优点:**您可以使用 CSS 为其设置样式(fill、stroke)、为其部分设置动画、通过 currentColor 更改颜色(继承文本颜色),并响应事件——因为它是真实的 DOM。没有额外的 HTTP 请求。
**缺点:**会增加 HTML 体积、无法单独缓存、重复的图标会重复标记。
<img> 的 SVG — 作为文件引用<img src="logo.svg" alt="Company logo" width="120" />
**优点:**由浏览器缓存、保持 HTML 简洁、使用简单。缺点:您无法使用 CSS/JS 对其内部进行样式设置或编写脚本——它是一个不透明的图像。
Need to recolor/animate/interact with the SVG → inline SVG
Static logo/illustration, want caching + clean HTML → <img src=".svg">
Many repeated icons → an SVG sprite (<use>) or an icon component
<svg role="img" aria-label="Settings">...</svg> <!-- meaningful icon -->
<svg aria-hidden="true">...</svg> <!-- decorative: hide from AT -->
选择 inline 还是 <img> SVG 归结为您是否需要 样式/动画 图形(inline)或只是 显示 它(<img>)。
在悬停时改变颜色或主题的图标应该是 inline 的(通常作为组件);静态品牌资产通过 <img> 使用。
无论哪种方式,向量在每个分辨率上都保持清晰——非常适合图标和徽标。