11

SVG可以作为一个独立的文件存在。但更多的时候,我们希望他能集成在某个更大的文档中,比如HTML。
将SVG插入到HTML中主要有以下3种方式:

  • 将SVG文件作为图片

  • 将SVG作为应用程序

  • 混合文档

将SVG文件作为图片

<img>tag

SVG本身作为一种图像格式,和其他图像一样通过指定<img>tag的src属性即可。并且可以通过css指定图像的尺寸和位置。
对于SVG图像来说,如果不指定图像(<img>)的尺寸,会按照以下情况进行显示:

  • SVG本身指定了明确的height和width,则他们作为图像的尺寸进行显示

  • SVG本身只指定了height或者width中的一个,如果SVG带有viewBox属性,则会根据viewBox计算宽高比,缩放后进行显示

  • SVG本身没有指定height或者width,如果SVG带有viewBox属性,则viewBox的height和width将被作为图像的尺寸进行显示

  • 如果SVG既没有指定height或width,且没有viewBox,则浏览器采用默认尺寸进行显示

css属性

和普通图片一样,SVG也可以作为background-image的属性的值进行显示。

background-image: url("image.svg");

不足

SVG作为图像引用时,

  • 大多数浏览器不会加载SVG自身引用的文件(其他图像,外部脚本,字体文件等)

  • 依据浏览器的安全策略,SVG中定义的脚本也可能不会执行

将SVG作为应用程序

SVG文件也可以作为<object>元素的data属性引入HTML中。
注意,MIME type必须是image/svg+xml

<object data="image.svg" type="image/svg+xml">
  ...
</object>

作为应用程序对象引入的SVG文件尺寸和作为<img>引入时类似,并且不会继承定义在父文档中的任何样式。
但是,与<img>不同的是,此方式可是包含外部文件,且脚本可以在object和父文档之间进行通信。

混合文档

可以直接将<svg>嵌入到XHTML或者HTML5文档中。
嵌入到XHTML需要为<svg>指定命名空间(xmlns),嵌入到HTML5则可以省略,解析器会自动识别<svg>tag。

<!DOCTYPE html>
<html>
  <body>
    <svg>
      ...
    </svg>
  </body>
</html>

直接嵌入的SVG会继承父文档的样式,默认情况下采用inline的方式进行显示。


BetaRabbit
1.4k 声望22 粉丝

全栈,猫奴