HTML中嵌入SVG图片的N种方式

最近用到了个SVG图片,里面还是带标签的,想要把它嵌入到HTML中还是有些工作要做的。

经历

最初的图片是这样写的:





    

    

    这是百度
    ?

p.s. 先拿百度的图片来凑个数

显示效果应该是:

HTML中嵌入SVG图片的N种方式_第1张图片

但是通过标签插入到HTML中后却变成了这样:

HTML中嵌入SVG图片的N种方式_第2张图片

W.T.F!

查了半天MDN,也没有什么收获。

最后在 StackOverflow 上找到了一个解决方案:即使用标签。

修改成后却显示成了:

HTML中嵌入SVG图片的N种方式_第3张图片

只显示了图片左上角那部分有木有!这张图片是按2倍图做的,应该要缩小一半,虽然给的元素加了宽高,但是却没能把svg内容给缩放!

怎办?又找了半天解决方案,发现这种情况应该设置svg图片的viewBox -- 在元素上增加viewBox="0 0 660 342"即可解决这个问题:

viewBox属性允许指定一个给定的一组图形伸展以适应特定的容器元素。
-- viewBox - MDN

HTML中嵌入SVG图片的N种方式_第4张图片

完美!

总结HTML中嵌入SVG图片的N种方式

在解决这个问题的过程中,顺便查了下,发现除了外还有几种嵌入SVG图片的方法。在此总结下:

0. 使用svg标签

HTML中嵌入SVG图片的N种方式_第5张图片

即直接把svg整个标签内容(除了开头的xml和doctype声明外的svg文件内容)都丢到 HTML 中即可。
可惜不适合本例 -- 我们这次的svg是外部的,不好放入HTML中。

1. 使用img标签

HTML中嵌入SVG图片的N种方式_第6张图片

这个是最容易想到的 -- 因为svg图片也是图片嘛。
需要注意的是,svg里面带的标签将无法正常显示。标签适合显示纯矢量+文本的SVG图片。

2. 使用iframe标签

HTML中嵌入SVG图片的N种方式_第7张图片

万能的iframe当然什么都能显示,但是无法控制内容大小 -- viewBox也搞不定,估计只能用百分比来定位了,太麻烦了,不建议使用。

3. 使用embed标签

HTML中嵌入SVG图片的N种方式_第8张图片

注意使用viewBox,标签的兼容性也很不错的,是个不错的选择。

4. 使用object标签

HTML中嵌入SVG图片的N种方式_第9张图片


    

类似,也要注意配置viewBox.

5. 使用div的背景图片

HTML中嵌入SVG图片的N种方式_第10张图片

svg图片是可以作为背景图片的。不过和标签一样,无法显示SVG内嵌的.

6. 使用picture标签

HTML中嵌入SVG图片的N种方式_第11张图片


    
    

标签是HTML5新增的一个专门显示图片的标签。

注意设置标签的属性srcset而非src. 此外必需要添加一个标签,不过可以在标签中指定另外一张图片,以便在浏览器无法显示指定的图片的时候显示标签中的图片。

一样,无法显示SVG内嵌的.

附完整带测试代码:

效果展示:https://clarencep.github.io/f...

源代码:https://github.com/clarencep/...

首发地址:https://www.clarencep.com/201...,转载请注明出处

你可能感兴趣的:(HTML中嵌入SVG图片的N种方式)