摘要:它是基于,由聯(lián)盟進(jìn)行開發(fā)的。是一種采用來描述二維圖形的語言這個(gè)大家都知道,那么元素是什么呢單純翻譯的話,是符號(hào)的意思,然我的理解是元素用來定義一個(gè)圖形模板對(duì)象,它可以用一個(gè)元素實(shí)例化。
大家好,這里是@IT·平頭哥聯(lián)盟,我是首席填坑官——蘇南(South·Su),今天要給大家分享的是SVG Sprites(也叫雪碧圖),所謂雪碧圖,當(dāng)然就不是我們常喝的雪碧飲料(Sprites)哦,哈哈~
當(dāng)下流程的移動(dòng)端,手機(jī)型號(hào)太多太多,今天工作項(xiàng)目中突然發(fā)現(xiàn)還有同事在使用以前大家 曾經(jīng)包括現(xiàn)在還很熟悉的CSS 圖片精靈,被我們的測(cè)試MM找來說圖片在iphone6、iphone plus、iphone x等大屏的手機(jī)全糊了,當(dāng)時(shí)我就懵逼了,我說怎么會(huì)呢,后面一看,果然如此啊,看了下代碼,原來是用的圖片,我說為什么不用svg呢??然后同事說一個(gè)一個(gè)的圖標(biāo)好麻煩,我說可以用svg sprite啊,~~>﹏<,這個(gè)時(shí)候輪到同事一臉懵逼了……,所以想著可能是不是同樣還有很多同學(xué)也不知道SVG symbols呢,那么這就給大家分享一下:
SVG英文全稱為( Scalable Vector Graphics),意思為可縮放的矢量圖形。它是基于XML(Extensible Markup Language),由World Wide Web Consortium(W3C)聯(lián)盟進(jìn)行開發(fā)的。嚴(yán)格來說應(yīng)該是一種開放標(biāo)準(zhǔn)的矢量圖形語言,可讓你設(shè)計(jì)激動(dòng)人心的、高分辨率的Web圖形頁(yè)面。SVG是一種采用XML來描述二維圖形的語言這個(gè)大家都知道,那么symbol元素是什么呢?單純翻譯的話,是“符號(hào)”的意思,然我的理解是symbol元素用來定義一個(gè)圖形模板對(duì)象,它可以用一個(gè)
.icon-sprite { width: 45px; height: 45px; background-image: url(https://github.com/meibin08/img/sprite_icon.png); background-size: 100px 350px; background-position: 0 -60px;//**重點(diǎn)在于它** background-repeat: no-repeat; }
在以前我們?yōu)榱诵阅軆?yōu)化,多圖標(biāo)合在一張圖上面,然后再使用css的 background-position,來定位,
好處是減少了頁(yè)面的加載,要命的問題是定位遇到兼容問題,1px.5px偏差時(shí),搞的你死去活來,后來移動(dòng)端更是不清晰,被人罵了又罵。
當(dāng)后來有一天,在一個(gè)月黑風(fēng)高、暴雨傾盆、雷電交加的夜晚,我獨(dú)自一人漫步在一片小樹林里,后來我發(fā)現(xiàn)了新大陸————SVG,當(dāng)然如果僅僅svg就我也就不會(huì)拿出來吹水,因?yàn)榭隙ㄊ菚?huì)被人噴的一臉口水的,但是如果再加上它的小弟——symbols? SVG symbols、SVG symbols、SVG symbols 重要的事說三遍不過份吧,雙重組合(屠龍、倚天)試問天下誰敢它爭(zhēng)鋒?特別是SVG它還下面還有很多小弟哦~,……有點(diǎn)扯遠(yuǎn)了;這項(xiàng)技術(shù)基于兩個(gè)元素的使用:
從ps或者Illustrator創(chuàng)建并導(dǎo)出SVG圖標(biāo),源碼大概是這樣的:
重點(diǎn)來了,那么我們用symbols包裝后是這個(gè)樣子的:
那么問題來了,我們直接在頁(yè)面上引用嗎?結(jié)果是否定的,什么都不會(huì)顯示:
那么該如何擺正姿勢(shì),正確的使用它呢?高潮部分來了:
1、使用方式一 2、使用方式二,外鏈?zhǔn)揭?
為什么圖標(biāo)會(huì)顯示呢?因?yàn)橐@示圖標(biāo),我們還需要使用
大家可能還發(fā)現(xiàn)了style="display:none",你可以把它理解為是css sprite里的圖片base64轉(zhuǎn)化后的文件,而方法二里的xlink:href="./icon.svg#svg-github",可以理解為是css sprite里我們background-image 引入圖片一樣,而 #svg-github 就是background-position里的坐標(biāo),
還有顏色的改變,我們可以直接在svg內(nèi)的 path上寫行內(nèi)式 fill="#06c"、style="fill:#06c";都是可以的,在維護(hù)上,是不是比圖片更加方便呢???
當(dāng)然啦,大家都懂的,越漂亮的妹子追的人越多啦,代碼也一樣,越好用的東西往往也是不可能那么完美啦,看到這里,是不是覺得想罵娘呢?白看你說這么多廢話,最后不能用,坑爹……
別慌,其實(shí)也沒有那么糟糕啦 ,SVG只在IE9以上支持;所以如果你需要支持IE8及以下的瀏覽器,你需要另外再寫一套降級(jí)(例如,使用png圖片方案),隨著科技的發(fā)展,IE9以上大多數(shù)人還是能接受啦,特別是手機(jī)端的用戶,再也不用擔(dān)心測(cè)試MM來找你,圖標(biāo)不清晰的問題了啦,是不是很開心,有沒有~~
總結(jié):
svg sprites相比css sprites,不管是在維護(hù)和開發(fā)的過程中,還是在用戶體驗(yàn)、性能、項(xiàng)目迭代代碼維護(hù)上都比css sprites方便,更高效便捷;
svg sprites優(yōu)缺點(diǎn):
svg sprites使用xlink:href #id的方式獲取,便于維護(hù)和擴(kuò)展,因?yàn)樾D的id不會(huì)隨便改動(dòng);
方便改變圖片顏色,通過設(shè)置fill:顏色值,隨意改變小圖顏色;
IE9以上支持。
css sprites優(yōu)缺點(diǎn):
css sprites使用background-position不便于維護(hù)和擴(kuò)展、定位不精確等問題,例如:在后期項(xiàng)目迭代中我們需要?jiǎng)h除其中一個(gè)小圖,那么排在它后面的小圖位置都要移動(dòng),需要再次修改csss樣式,或每次都要打開PS刪除某圖標(biāo)再導(dǎo)出;
無法修改小圖顏色,要UI設(shè)計(jì)師調(diào)整后替換,過程漫長(zhǎng)效率低;
在移動(dòng)端的大屏手機(jī)圖標(biāo)會(huì)模糊,影響體驗(yàn)。
以上就是今天的分享,寫了蠻久,最近才在開始嘗試寫博客,新手上路中,如果文章中有不對(duì)之處,煩請(qǐng)各位大神斧正。如果你覺得這篇文章對(duì)你有所幫助,請(qǐng)記得點(diǎn)贊哦~,如覺得不錯(cuò),記得關(guān)注我們的公眾號(hào)哦??!
更多文章:做完小程序項(xiàng)目、老板給我加了6k薪資~
面試踩過的坑,都在這里了~
你應(yīng)該做的前端性能優(yōu)化之總結(jié)大全!
手把手教你如何繪制一輛會(huì)跑車
如何用CSS3畫出懂你的3D魔方?
immutability因React官方出鏡之使用總結(jié)分享!
作者:蘇南 - 首席填坑官
交流群:912594095,公眾號(hào):honeyBadger8
本文原創(chuàng),著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系@IT·平頭哥聯(lián)盟獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明原鏈接及出處。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/116962.html
摘要:性能優(yōu)化是前端開發(fā)必不可少的一環(huán),而圖片優(yōu)化又是性能優(yōu)化中必不可少的一環(huán),但不知道有多少開發(fā)者在網(wǎng)頁(yè)的開發(fā)過程中會(huì)注意圖片的使用,圖片使用不當(dāng)可能會(huì)導(dǎo)致網(wǎng)頁(yè)加載卡頓網(wǎng)頁(yè)加載速度慢等問題,這篇文章將會(huì)將我以往對(duì)圖片的處理做個(gè)總結(jié)。 性能優(yōu)化是前端開發(fā)必不可少的一環(huán),而圖片優(yōu)化又是性能優(yōu)化中必不可少的一環(huán),但不知道有多少開發(fā)者在網(wǎng)頁(yè)的開發(fā)過程中會(huì)注意圖片的使用,圖片使用不當(dāng)可能會(huì)導(dǎo)致網(wǎng)頁(yè)加...
摘要:性能優(yōu)化是前端開發(fā)必不可少的一環(huán),而圖片優(yōu)化又是性能優(yōu)化中必不可少的一環(huán),但不知道有多少開發(fā)者在網(wǎng)頁(yè)的開發(fā)過程中會(huì)注意圖片的使用,圖片使用不當(dāng)可能會(huì)導(dǎo)致網(wǎng)頁(yè)加載卡頓網(wǎng)頁(yè)加載速度慢等問題,這篇文章將會(huì)將我以往對(duì)圖片的處理做個(gè)總結(jié)。 性能優(yōu)化是前端開發(fā)必不可少的一環(huán),而圖片優(yōu)化又是性能優(yōu)化中必不可少的一環(huán),但不知道有多少開發(fā)者在網(wǎng)頁(yè)的開發(fā)過程中會(huì)注意圖片的使用,圖片使用不當(dāng)可能會(huì)導(dǎo)致網(wǎng)頁(yè)加...
摘要:前言本文講解道前端面試的的內(nèi)容。文章原文地址前端硬核面試專題之問。前端硬核面試專題的完整版在此前端硬核面試專題,包含數(shù)據(jù)結(jié)構(gòu)與算法。 showImg(https://segmentfault.com/img/bVbv2GE?w=900&h=400); 前言 本文講解 55 道前端面試的 CSS 的內(nèi)容。 復(fù)習(xí)前端面試的知識(shí),是為了鞏固前端的基礎(chǔ)知識(shí),最重要的還是平時(shí)的積累! 注意:文章...
摘要:是頁(yè)面渲染的一部分。一個(gè)就是一個(gè)整體,所有子元素都會(huì)在里面渲染,而不會(huì)影響外面的元素。常見為,根元素,,元素,或者設(shè)置了的元素列舉不同的清除浮動(dòng)的技巧,并指出它們各自適用的使用場(chǎng)景。是一個(gè)把眾多小圖片打包成一個(gè)大圖以減少請(qǐng)求。 CSS 中類 (classes) 和 ID 的區(qū)別。 id唯一,class可以多個(gè) 請(qǐng)問 resetting 和 normalizing CSS 之間的區(qū)別?你...
閱讀 2716·2021-11-11 16:55
閱讀 755·2021-09-04 16:40
閱讀 3138·2019-08-30 15:54
閱讀 2692·2019-08-30 15:54
閱讀 2474·2019-08-30 15:46
閱讀 454·2019-08-30 15:43
閱讀 3286·2019-08-30 11:11
閱讀 3041·2019-08-28 18:17