搜尋
首頁web前端H5教程HTML5之SVG 2D入門7—SVG元素的重複使用與引用_html5教學技巧

前面介紹了許多的圖形元素,如果很多圖形本身是一樣的,需要每次都去定義一個新的麼?我們能否共用一些圖形呢?這是這節的重點-SVG元素的重用。

組合-g元素
g元素是一種容器,它組合一組相關的圖形元素成為一個整體;這樣,我們就可以對這個整體進行操作。這個元素通常可以和desc和title元素一起使用,提供文件的結構資訊。結構良好的文件通常可讀性和渲染效率都不錯。看一個小範例:

複製程式碼
程式碼如下:


程式碼如下:



程式碼如下:

version="1.1"width="5cm"height="5cm">
Twogroups,eachoftworectangles






fill="none"stroke="blue" stroke-width=".02cm"/>




注意幾點1.xmlns="http://www. w3.org/2000/svg"顯示了整個svg元素預設的命名空間是svg。這個在無歧義的時候可以省略。這裡由於svg文檔是一個XML文檔,XML命名空間的相關規則這裡都是適用的。例如可以給svg顯示的指定命名空間,為命名空間提供別名等。
2.g元素是可以巢狀的。
3.組合起來的圖形元素就和單一的元素一樣,可以給id值,這樣,需要的時候(例如動畫和重用一組元素)只用引用這個id值就可以了。
4.組合一組圖形元素可以統一設定這組元素的相關屬性(fill,stroke,transform等),這也是使用組合的一種場景。


模板-symbol元素

symbol元素用來定義圖形模板(模板可以包含很多圖形),這個模板可以被use元素實例化。模板的功能與g元素很相似,都是提供一組圖形對象,但也有一些差異。與g元素不同的地方是:
1.symbol元素本身是不會被渲染的,只有symbol模板的實例會被渲染。
2.symbol元素可以擁有屬性viewBox和preserveAspectRatio,這些允許symbol縮放圖形元素。 從渲染角度來說,與symbol元素相似的元素是marker(定義箭頭和標號)和pattern(定義顏色)元素;這些元素不會直接被渲染;他們的使用方式基本上都是由use元素去實例化。正是這個原因,對於symbol來說,'display'屬性是沒有意義的。 下面這個修改過的程式碼顯示了symbol的使用方式:


複製程式碼


程式碼>

xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"width="5cm"height="5cm">
Twogroups,eachoftworectangles







fill="none "stroke="blue"stroke-width=".02cm"/>
定義-defs元素
SVG允許定義一組對象,然後重複使用這組對象(注意,而不僅僅是圖形對象)。最常見的例子如定義漸層色,然後再在其他的圖形物件中賦給fill屬性。漸層色定義的時候是不會渲染的,所以這類型的物件可以放到任何地方。重用對於圖形物件中也是經常存在的,而且我們也不希望定義的時候直接渲染,而是想在引用的地方渲染,這個可以用defs元素實現。

通常情況下,推薦的做法是:只要有可能,就把被引用的物件放到defs元素中。這些物件通常是:altGlyphDef,clipPath,cursor,filter,marker,mask,pattern,linearGradient,radialGradient,symbol和圖形物件等。把這些物件定義在defs元素中很容易理解,所以就提高了可訪問性。

其實作為容器物件的g元素、symbol元素、defs元素都不同程度上提供了重用的作用,只不過每個元素的特性可能少許不同:比如g元素是直接渲染的,symbol和defs不會直接渲染,symbol含有viewBox屬性,會創造新的視窗。

通常都會給在defs中定義的元素賦予id屬性,並在用到的地方直接使用。根據元素的不同,這些定義可以用到不同地方,例如下面的漸進色作為屬性來使用了:

複製程式碼
複製程式碼


代碼如下:


xmlns="http://www.w3.org/2000/svg"version="1.1 ">
LocalURIreferenceswithinancestor's'defs'element.





fill="url(#Gradient01)"/>

圖形相關元素的定義可以用use元素連結到文件。例如:
複製程式碼


程式碼如下:


xmlns="http://www.w3.org/2000/svg"xmlns:xlink="http://www.w3.org/1999 /xlink">
ExampleUse01-Simplecaseof'use'ona'rect'



fill="none"stroke="blue"stroke-width =".2"/>
在這裡請注意xlink名稱空間的使用。儘管大多數檢視器沒有它也將正確顯示這一項,但為了保持一致,xlink名稱空間應該在元素上定義。

引用-use元素
任何svg,symbol,g,單一的圖形元素和use元素本質上都可以作為模板物件被use元素引用(例如初始化)。 use引用的圖形內容會在指定的位置渲染。與image元素不同,use元素不能引用整個文件。
use元素也有x,y,width和height屬性,這些屬性可以省略,如果不省略的話,會將被引用的圖形內容座標或長度對應到目前的使用者座標空間。

use元素的作用過程就相當於把被引用的物件深拷貝一份到獨立的非公開的DOM樹中;這棵樹的父節點是use元素。雖然是非公開的DOM節點,但本質上還是DOM節點,所以被引用物件的所有屬性值、動畫、事件、CSS的相關設定等都會拷貝多來並都還是會起作用,而且這些節點也會繼承use元素和use祖先的相關屬性(注意引用元素是深拷貝,這些拷貝過來的元素與原來的元素已經無關係了,所以這裡不會繼承被引用元素祖先節點的屬性),如果這些節點本身有相關( CSS)屬性,也會覆寫繼承來的屬性,這些與普通的DOM節點是一致的,所以對use元素使用"visibility:hidden"時要小心,並不一定會起作用。但由於這部分節點是非公開的,在DOM操作中,也只能看到use元素,所以也只能操作到use元素。

從視覺效果來看,use元素更像是佔位符,渲染完成後的視覺效果就和直接用被引用對象渲染是一樣的:
1.use元素引用一個symbol元素
這種情況下,視覺效果就相當於:
(1)把use元素換成g元素;
(2)把use的除x,y,width, height,xlink:href外的屬性全部移到g元素;
(3)把use的x,y屬性變成translate(x,y),追加到g元素的transform屬性最後;
(4 )把引用的symbol元素換成svg元素,這個svg元素會明確使用use元素的width和height屬性(use元素沒有這些屬性則是100%);
(5)把引用的symbol元素的圖形內容深拷貝到替換的svg中。
2.use元素引用一個svg元素
這種情況下,視覺效果就相當於:
(1)把use元素換成g元素;
(2 )把use的除x,y,width,height,xlink:href外的屬性全部移到g元素;
(3)把use的x,y屬性變成translate(x,y),追加到g元素的transform屬性最後;
(4)把引用的svg元素包括內容拷貝過來,這個svg元素會明確使用use元素的width和height屬性(use元素沒有這些屬性則使用原來的值);
3.其他情況
這些情況下的視覺效果就相當於:
(1)把use元素換成g元素;
(2)把use的除x ,y,width,height,xlink:href外的屬性全部移到g元素;
(3)把use的x,y屬性變成translate(x,y),追加到g元素的transform屬性最後;
(4)把引用元素拷貝過來;
看下面例子的視覺效果

複製代碼
代碼如下:

xmlns="http:// www.w3.org/2000/svg"xmlns:xlink="http://www.w3.org/1999/xlink">
ExampleUse03-'use'witha'transform'attribute



fill="none"stroke="blue"stroke-width=".2"/>
transform="translate(20,2.5)rotate(10)"/>


下面的圖和上面的圖外觀是一樣的

複製代碼
代碼如下:

xmlns="http://www.w3.org/2000/svg"version="1.1">
ExampleUse03-' use'witha'transform'attribute
fill="none"stroke="blue" stroke-width=".2"/>





實用參考:
腳本索引:http://msdn.microsoft.com/zh-cn/library/ff971910(v=vs.85).aspx
開發中心:https://developer.mozilla.org/en/SVG
熱門參考:http://www.chinasvg.com/
官方文件:http://www.w3.org/TR/SVG11/
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
H5代碼:Web開發人員的最佳實踐H5代碼:Web開發人員的最佳實踐Apr 16, 2025 am 12:14 AM

H5代碼的最佳實踐包括:1.使用正確的DOCTYPE聲明和字符編碼;2.採用語義化標籤;3.減少HTTP請求;4.使用異步加載;5.優化圖像。這些實踐能提升網頁的效率、可維護性和用戶體驗。

H5:網絡標準和技術的發展H5:網絡標準和技術的發展Apr 15, 2025 am 12:12 AM

Web标准和技术从HTML4、CSS2和简单的JavaScript演变至今,经历了显著的发展。1)HTML5引入了Canvas、WebStorage等API,增强了Web应用的复杂性和互动性。2)CSS3增加了动画和过渡功能,使页面效果更加丰富。3)JavaScript通过Node.js和ES6的现代化语法,如箭头函数和类,提升了开发效率和代码可读性,这些变化推动了Web应用的性能优化和最佳实践的发展。

H5是HTML5的速記嗎?探索細節H5是HTML5的速記嗎?探索細節Apr 14, 2025 am 12:05 AM

H5不僅僅是HTML5的簡稱,它代表了一個更廣泛的現代網頁開發技術生態:1.H5包括HTML5、CSS3、JavaScript及相關API和技術;2.它提供更豐富、互動、流暢的用戶體驗,能在多設備上無縫運行;3.使用H5技術棧可以創建響應式網頁和復雜交互功能。

H5和HTML5:網絡開發中常用的術語H5和HTML5:網絡開發中常用的術語Apr 13, 2025 am 12:01 AM

H5與HTML5指的是同一個東西,即HTML5。 HTML5是HTML的第五個版本,帶來了語義化標籤、多媒體支持、畫布與圖形、離線存儲與本地存儲等新功能,提升了網頁的表現力和交互性。

H5指的是什麼?探索上下文H5指的是什麼?探索上下文Apr 12, 2025 am 12:03 AM

H5referstoHTML5,apivotaltechnologyinwebdevelopment.1)HTML5introducesnewelementsandAPIsforrich,dynamicwebapplications.2)Itsupportsmultimediawithoutplugins,enhancinguserexperienceacrossdevices.3)SemanticelementsimprovecontentstructureandSEO.4)H5'srespo

H5:工具,框架和最佳實踐H5:工具,框架和最佳實踐Apr 11, 2025 am 12:11 AM

H5開發需要掌握的工具和框架包括Vue.js、React和Webpack。 1.Vue.js適用於構建用戶界面,支持組件化開發。 2.React通過虛擬DOM優化頁面渲染,適合複雜應用。 3.Webpack用於模塊打包,優化資源加載。

HTML5的遺產:當前了解H5HTML5的遺產:當前了解H5Apr 10, 2025 am 09:28 AM

HTML5hassignificantlytransformedwebdevelopmentbyintroducingsemanticelements,enhancingmultimediasupport,andimprovingperformance.1)ItmadewebsitesmoreaccessibleandSEO-friendlywithsemanticelementslike,,and.2)HTML5introducednativeandtags,eliminatingthenee

H5代碼:可訪問性和語義HTMLH5代碼:可訪問性和語義HTMLApr 09, 2025 am 12:05 AM

H5通過語義化元素和ARIA屬性提升網頁的可訪問性和SEO效果。 1.使用、、等元素組織內容結構,提高SEO。 2.ARIA屬性如aria-label增強可訪問性,輔助技術用戶可順利使用網頁。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器