HTML中嵌入SVG圖片的N種方式
https://segmentfault.com/a/1190000010942431
最近用到了個SVG圖片,裡面還是帶<image>
標籤的,想要把它嵌入到HTML中還是有些工作要做的。
經歷
最初的圖片是這樣寫的:
<?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. 先拿百度的圖片來湊個數
顯示效果應該是:
但是通過<img>
標籤插入到HTML中後卻變成了這樣:
W.T.F!
查了半天MDN,也沒有什麼收穫。
最後在 StackOverflow 上找到了一個解決方案:即使用<embed>
標籤。
修改成<embed src="./test.svg" style="display:block;width:330px;height:240px" />
後卻顯示成了:
只顯示了圖片左上角那部分有木有!這張圖片是按2倍圖做的,應該要縮小一半,雖然給<embed>
的元素加了寬高,但是卻沒能把svg內容給縮放!
怎辦?又找了半天解決方案,發現這種情況應該設定svg圖片的viewBox -- 在<svg>
元素上增加viewBox="0 0 660 342"
即可解決這個問題:
viewBox屬性允許指定一個給定的一組圖形伸展以適應特定的容器元素。
-- viewBox - MDN
完美!
總結HTML中嵌入SVG圖片的N種方式
在解決這個問題的過程中,順便查了下,發現除了<img>
和<embed>
外還有幾種嵌入SVG圖片的方法。在此總結下:
0. 使用svg
標籤
即直接把svg整個標籤內容(除了開頭的xml和doctype宣告外的svg檔案內容)都丟到 HTML 中即可。
可惜不適合本例 -- 我們這次的svg是外部的,不好放入HTML中。
1. 使用img
標籤
<img src="./test.svg" style="display:block;width:330px;height:240px" />
這個是最容易想到的 -- 因為svg圖片也是圖片嘛。
需要注意的是,svg裡面帶的<image>
標籤將無法正常顯示。<img>
標籤適合顯示純向量+文字的SVG圖片。
2. 使用iframe
標籤
<iframe src="./test.svg" style="display:block;width:330px;height:240px;border:none;" ></iframe>
萬能的iframe當然什麼都能顯示,但是無法控制內容大小 -- viewBox也搞不定,估計只能用百分比來定位了,太麻煩了,不建議使用。
3. 使用embed
標籤
<embed src="./test.svg" style="display:block;width:330px;height:240px" />
注意使用viewBox,<embed>
標籤的相容性也很不錯的,是個不錯的選擇。
4. 使用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.
5. 使用div
的背景圖片
<div style="display:block;width:330px;height:240px;background: url(./test.svg) no-repeat;background-size: 100%;" ></div>
svg圖片是可以作為背景圖片的。不過和<img>
標籤一樣,無法顯示SVG內嵌的<image>
.
6. 使用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...,轉載請註明出處
相關文章
- HTML中嵌入SVG圖片的N種方式,及設定大小HTMLSVG
- HTML頁面插入SVG的多種方式HTMLSVG
- JS嵌入html的方式及各種方式的比較JSHTML
- 【工具篇】在.Net中實現HTML生成圖片或PDF的幾種方式HTML
- Java 中拼接 String 的 N 種方式Java
- Html中引用其他html頁面的幾種方式HTML
- 實現圖片染色效果的三種方式
- html中如何使用svg?HTMLSVG
- vue通訊的N種方式Vue
- svg圖片 填充顏色SVG
- Vue中圖片的載入方式Vue
- 本地HTML中圖片下載HTML
- N 種僅僅使用 HTML/CSS 實現各類進度條的方式HTMLCSS
- 如何在 CSS 背景圖片中對 SVG 圖片進行著色 ,修改svg圖片顏色CSSSVG
- 實現圖片懶載入的三種方式
- UIView設定背景圖片幾種方式UIView
- 用SVG的圖片格式如何劃入更改圖片的顏色?SVG
- 解鎖canvas匯出圖片跨域的N種姿勢~Canvas跨域
- 動態更改svg圖片的顏色SVG
- 修改SVG圖片的大小和顏色SVG
- CSS 顏色混合的N種方式CSS
- 在JPEG圖片中嵌入HTMLHTML
- 正規表示式匹配html中的圖片HTML
- 流程圖渲染方式:Canvas vs SVG流程圖CanvasSVG
- 使用Vue實現圖片上傳的三種方式Vue
- 【HTML】04圖片HTML
- 部署Go語言程式的N種方式Go
- 使用icomoon把svg圖片生成字型圖示SVG
- css實現圖片自適應容器的幾種方式CSS
- Html2canvas——圖片空白的幾種排查解決方案HTMLCanvas
- ☀️SVG對映反爬示例練習⚡直接提取SVG文字圖片的文字⚡SVG
- Overleaf中插入pdf圖片只顯示圖片路徑的解決方式
- win11 下 利用 PowerShell 提取 wps 表格中嵌入的圖片
- 用Vue來實現圖片上傳多種方式Vue
- html input type=file 選擇圖片,圖片預覽 純html js實現圖片預覽HTMLJS
- HTML轉換到PDF的三種方式HTML
- CSS & SVG 繪製寫作網格線的3種方式CSSSVG
- SVG動畫應用-酷炫的圖片展示效果SVG動畫