4.在Web浏览器中显示SVG
可以通过如下几个方法在Web浏览器(如Chrome,Firefox和IE)中显示SVG:
直接在浏览器中打开SVG文件
将SVG嵌入HTML页面
你也可以通过下面几个方法将SVG图片嵌套在HTML文件中:
使用
iframe
元素使用
img
元素使用SVG图片作为背景图片
使用
svg
元素使用
embed
元素
教程视频版
如果你喜欢看视频版教程,我在此做了一个链接:
iframe
由于如果你输入SVG图像的URL,浏览器可以显示SVG图像,你也可以在HTML页面中使用iframe
标签,引入SVG图像,示例代码如下:
img
可以像使用其他类型的图片一样,使用img
元素嵌套SVG图片。可以将SVG图片的URL作为img
元素的src
属性:
SVG图片会像其他图片一样,在HTML页面中显示。
SVG作为背景图片
由于浏览器会像处理位图一样处理SVG图像,所以你可以通过CSS来使用SVG图片作为背景图片:
可能需要为SVG图像设置背景大小,以告知浏览器如何缩放。你可以前往我写的关于背景图片的教程(CSS背景图片教程)了解更多。
HTML嵌套svg元素
可以通过在HTML页面中嵌套svg
元素来嵌套SVG图片:
这里的div
元素只是为了表示svg
元素可以直接嵌入HTML。虽然svg
元素不需要嵌套在div
元素中。
使用SVG元素,你可以直接将SVG嵌入HTML页面,而不必将SVG图片保存为单独的文件。你可以为svg
元素添加width
和height
属性来设置SVG图片的宽度和高度。
使用svg
元素,你也可以在浏览器中使用JavaScript直接生成SVG。D3.js库非常适合。jQuery提供的API也可以实现。
在使用svg
元素时,你也可以像使用其他HTML元素一样使用CSS为svg
和它的子元素添加样式。需要注意的是,SVG元素的某些CSS属性有时会和HTML元素的属性名称不同。
embed
早些时候,你可以使用embed
元素嵌套SVG图片。后来,不是所有的浏览器都支持,现如今,我会建议你使用img
或svg
元素。下面是一个embed
元素的例子:
将此元素放置在你希望SVG图像显示在HTML文件中的位置。src
属性应该指向SVG图片的URL。
请注意pluginspage
属性,这在不能显示SVG的旧版本的浏览器中是有必要的。这些浏览器需要Adobe的SVG查看器插件来显示图片。在IE7和Firefox3.0.5中,这个属性是不必要的,但是包含它也没什么影响。
宽度和高度
不管你用来嵌套SVG图片的是img
、svg
或embed
元素,你都可以使用width
和height
属性设置图片的高度和宽度。如果SVG文件里的图片比设置的宽度更宽,比设置的高度更高,SVG图片只会显示一部分。确保设置足够的宽度和高度来显示完整的SVG图片(或你喜欢显示的大小)。
使用SVG作为HTML元素的背景图片
你也可以使用CSS的background-image
属性为HTML元素设置SVG背景图片。可以像其它图片文件一样,指向SVG图片文件。不是所有的浏览器都支持,可以在你想要支持的浏览器里测试下面的代码:
浏览器支持
IE9及以后的版本能显示SVG。在写作这本书时,Firefox、Chrome、Safari、Opera和Android浏览器也已经能够显示SVG。iOS版的Safari,Opera的mini和移动浏览器已经Android版的Chrome也都支持。
Content Type
如果你浏览器指向的URL以.svg
结尾,浏览器会猜测SVG文件的MIME类型。但是,从servlets,JSP,PHP,ASP.NET页面或其它Web应用程序组件生成SVG时,URL结尾可能不总是.svg
。
要使浏览器仍然将文件解释为SVG文件,你必须将HTTP响应头中Content-Type设置为image/svg+xml
。
如果你看之前的<embed>
元素,你会发现我们设置了type
属性。设置<embed>
元素的Content-Type对于IE是足够了,但是不针对Firefox。你也必须在HTTP响应中设置响应头的Content-Type字段。
此外,如果你将浏览器直接链接到服务器上的SVG文件,没有<embed>
标签让你设置。所以你不得不设置HTTP响应头中的Content-Type。
下面是一个JSP的例子:
这种做法和servlets中做法类似。如果你使用除Java之外的一个不同的技术,只需要Google搜索设置HTTP响应的Content-Type的例子。将会有很多这样的例子。
最后更新于