最近用到了個SVG圖片,裏面仍是帶<image>
標籤的,想要把它嵌入到HTML中仍是有些工做要作的。html
最初的圖片是這樣寫的:git
<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" preserveAspectRatio="xMinYMin meet" width="660" height="342" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <image xlink:href="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png" width="660" height="342"/> <rect x="2" y="284" width="656" height="58" fill="rgba(0,0,0,0.6)" stroke-width="1" ></rect> <text text-anchor="start" font-family="Microsoft Yahei, sans-serif" font-size="28" x="20" y="322" fill="#fff">這是百度</text> <text text-anchor="end" font-family="Microsoft Yahei, sans-serif" font-size="28" x="640" y="322" fill="#fff">?</text> </svg>
p.s. 先拿百度的圖片來湊個數github
顯示效果應該是:chrome
可是經過<img>
標籤插入到HTML中後卻變成了這樣:瀏覽器
W.T.F!svg
查了半天MDN,也沒有什麼收穫。測試
最後在 StackOverflow 上找到了一個解決方案:即便用<embed>
標籤。url
修改爲<embed src="./test.svg" style="display:block;width:330px;height:240px" />
後卻顯示成了:spa
只顯示了圖片左上角那部分有木有!這張圖片是按2倍圖作的,應該要縮小一半,雖然給<embed>
的元素加了寬高,可是卻沒能把svg內容給縮放!3d
怎辦?又找了半天解決方案,發現這種狀況應該設置svg圖片的viewBox -- 在<svg>
元素上增長viewBox="0 0 660 342"
便可解決這個問題:
viewBox屬性容許指定一個給定的一組圖形伸展以適應特定的容器元素。
-- viewBox - MDN
完美!
在解決這個問題的過程當中,順便查了下,發現除了<img>
和<embed>
外還有幾種嵌入SVG圖片的方法。在此總結下:
svg
標籤即直接把svg整個標籤內容(除了開頭的xml和doctype聲明外的svg文件內容)都丟到 HTML 中便可。
惋惜不適合本例 -- 咱們此次的svg是外部的,很差放入HTML中。
img
標籤<img src="./test.svg" style="display:block;width:330px;height:240px" />
這個是最容易想到的 -- 由於svg圖片也是圖片嘛。
須要注意的是,svg裏面帶的<image>
標籤將沒法正常顯示。<img>
標籤適合顯示純矢量+文本的SVG圖片。
iframe
標籤<iframe src="./test.svg" style="display:block;width:330px;height:240px;border:none;" ></iframe>
萬能的iframe固然什麼都能顯示,可是沒法控制內容大小 -- viewBox也搞不定,估計只能用百分比來定位了,太麻煩了,不建議使用。
embed
標籤<embed src="./test.svg" style="display:block;width:330px;height:240px" />
注意使用viewBox,<embed>
標籤的兼容性也很不錯的,是個不錯的選擇。
object
標籤<object type="image/svg+xml" data="./test.svg" style="display:block;width:330px;height:240px" > <param name="src" value="./test.svg" > </object>
<object>
與<embed>
相似,也要注意配置viewBox.
div
的背景圖片<div style="display:block;width:330px;height:240px;background: url(./test.svg) no-repeat;background-size: 100%;" ></div>
svg圖片是能夠做爲背景圖片的。不過和<img>
標籤同樣,沒法顯示SVG內嵌的<image>
.
picture
標籤<picture > <source srcset="./test.svg" type="image/svg+xml"> <img src="./test.png" style="display:block;width:330px;height:240px"> </picture>
<picture>
標籤是HTML5新增的一個專門顯示圖片的標籤。
注意設置<source>
標籤的屬性srcset
而非src
. 此外必須要添加一個<img>
標籤,不過能夠在<img>
標籤中指定另一張圖片,以便在瀏覽器沒法顯示<source>
指定的圖片的時候顯示<img>
標籤中的圖片。
<picture>
和<img>
同樣,沒法顯示SVG內嵌的<image>
.
效果展現:https://clarencep.github.io/f...
源代碼:https://github.com/clarencep/...
首發地址:https://www.clarencep.com/201...,轉載請註明出處