2022-06-20 分類: 網(wǎng)站建設(shè)
本文介紹一些關(guān)于響應(yīng)式圖像的適配應(yīng)用策略,回退原理,SVG的換色技巧,雪碧圖的百分比定位計(jì)算公式等相關(guān)的一些小知識點(diǎn),目的在于幫助一部分同學(xué)快速的理清圖像應(yīng)用思路,以及一些web圖像的應(yīng)用技巧。
1. 響應(yīng)式圖像的應(yīng)用與回退
特點(diǎn):應(yīng)用簡單,上手容易,性能表現(xiàn)良好
難點(diǎn):lazyload實(shí)現(xiàn)
根據(jù)不同設(shè)備,不同分辨率,不同像素比使用的響應(yīng)式圖像,常用的有兩種場景:
1.1 固定尺寸圖像
基于設(shè)備像素比選擇,很多網(wǎng)站logo就是固定寬度圖像的一個(gè)例子,不管viewport的寬度如何,始終保持相同的寬度。
在dom里圖像與在css里的圖像寫法如下面的例子
background-image: image-set(url(test.jpg) 1x,url(test2.jpg) 2x);
1.2 不固定尺寸圖像
與內(nèi)容相關(guān)的圖片,在需要響應(yīng)式的時(shí)候,它們的大小往往并不是不變的,會隨viewport改變,對于這類圖像,也有兩種常用的處理方式
1.2.1 我們使用srcset搭配w描述符以及sizes屬性 。
w描述符告訴瀏覽器列表中的每個(gè)圖象的質(zhì)量。sizes屬性是一個(gè)包含兩個(gè)值的,由逗號分隔的列表。根據(jù)最新規(guī)范,如果srcset中任何圖像使用了w描述符,那么必須要設(shè)置sizes屬性。
sizes屬性有兩個(gè)值:第一個(gè)是媒體條件;第二個(gè)是源圖尺寸值,在特定媒體條件下,此值決定了圖片的寬度。
比如:
sizes="
(max-width: 360px) 100vw,
(max-width: 768px) 90vw,
(max-width: 1980px) 80vw,
768px"
src="360.jpg" >
我們來逐條讀這一個(gè)img標(biāo)簽的信息
srcset,我們給瀏覽器準(zhǔn)備了四個(gè)質(zhì)量的圖像,分別為360 768 1200 1920
sizes,我們來告訴瀏覽器,在不同的環(huán)境下圖像的寬度
當(dāng)視口不大于360的時(shí)候,圖像顯示寬度為100vw,當(dāng)視口不大于768的時(shí)候,圖像顯示寬度為90vw,以此類推。
最后一個(gè)src作為默認(rèn)圖像url引入,并且是天然的回退方案,當(dāng)瀏覽器不認(rèn)識以上屬性的時(shí)候,直接讀取src渲染。
這樣說不夠直觀,我們看個(gè)demo
在iphone4(320)下,圖像寬度和我們設(shè)置的100vw一致,但是為什么瀏覽器選擇了768的圖像而沒有選擇360的?因?yàn)?的dpr是2呀^_^,瀏覽器很智能的選擇了質(zhì)量最合適的768.
再看一下6p(414),很聽話的按照我們的設(shè)置,顯示了90vw。因?yàn)樗膁pr更高,瀏覽器聰明的選擇了1200質(zhì)量的圖像。
這里我們可以欺騙一下瀏覽器:
360.jpg 1200w,
1200.jpg 9999w
我們把360的圖像,騙瀏覽器說這是1200的,然后把原本1200的扔天上去
瀏覽器果然上當(dāng)了,他把360的圖當(dāng)成1200的來用了。這里可能有些疑問,圖像的寬度為什么不是90vw了哪?因?yàn)闉g覽器被騙了但是自己卻不知道,他依然按照1200的圖像,去適配dpr。414*90%*(360/1200)約等于111.7。這種方式很智能,瀏覽器去根據(jù)你的sizes,從w列表里選擇最適合的圖像來調(diào)用顯示。正因?yàn)樗悄芰耍趯?shí)際操作中可控性較差,有些我們想精確控制的圖像顯示,有時(shí)候并不能如意。而且在做lazyload的時(shí)候要處理的東西也比較復(fù)雜。
這個(gè)時(shí)候可以考慮另外一種方式。
1.2.2.picture元素,可精確把控
picture元素就像是圖像和其源的容器。瀏覽器仍然需要img元素,用來表明需要加載圖片,如果沒有img,那么什么都不會渲染。source為瀏覽器提供了要顯示圖像的供選版本。
適用場景為:在一個(gè)精確特定的轉(zhuǎn)效點(diǎn)(breakpoint)需要顯示一個(gè)特定的圖像時(shí)。使用picture元素選擇圖像,不會有歧義,理解起來也更直觀。
在本例中,當(dāng)viewport大于960像素時(shí),會加載圖像960的圖像。當(dāng)viewport寬度大于768像素時(shí),瀏覽器會加載768的。而當(dāng)寬度小于768像素時(shí),加載默認(rèn)圖像360。
而且這個(gè)寫法的懶加載非常好處理,只需要在傳統(tǒng)的lazyload策略上稍加改進(jìn)
data-src
data-srcset
在加載到的時(shí)候更換為
src
srcset
就輕松解決了。
http://snghr.tencent.com 里面使用較多
也不需要去特意做回退處理,當(dāng)瀏覽器不支持的時(shí)候就直接讀取img標(biāo)簽。對于懶加載的回退,我選擇判斷IE 7-8直接url給他。
2. 特殊格式的圖像應(yīng)用與回退
特點(diǎn):體積優(yōu)化效果顯著
難點(diǎn):兼容性掌控
上面picture元素還可以提供 基于圖片格式選擇。
有一些圖像格式在較小的文件大小情況下保證了較好的圖片質(zhì)量。聽起來還不錯(cuò),但殘酷的事實(shí)是沒有一個(gè)新格式被所有瀏覽器支持。谷歌的WebP表現(xiàn)不錯(cuò),但只有Chrome和Opera原聲支持。JPEG-XR,最初被稱為高清照片,是微軟發(fā)布的一個(gè)專有圖像格式,僅Internet Explorer支持
在支持的瀏覽器里使用SVG,在不支持的瀏覽器里顯示PNG,優(yōu)點(diǎn)是type靈活,可用于SVG,WEBP等,而且保持了img標(biāo)簽的特性,方便做布局操作。缺點(diǎn)兼容性要求高,ios9+,安卓5+,微軟Edge+
當(dāng)然這個(gè)兼容性說的是source type的兼容,并不是SVG本身的兼容。
對于css里的SVG 的應(yīng)用與回退策略,比較簡單,也已經(jīng)成熟,一般情況下都是這種用法
background-image: url(fallback.png);
background-image: url(image.svg), none;
利用的技術(shù)是CSS3多背景,瀏覽器只要支持了多背景,幾乎無一例外支持SVG
再或者
background-image: url(fallback.png);
background-image: image-set( "test.png" 1x, "test-2x.png" 2x,
"test-print.png" 600dpi );
通過image-set來篩選和回退。
無論黑白渲染,灰度渲染,次像素渲染,還是DirectWrite 或 GDI 渲染,既然iconfont他是一個(gè)字體,就難逃出現(xiàn)鋸齒的命運(yùn),特別是在一倍屏幕下的渲染。source的type屬性用來指定每個(gè)圖像的MIME類型,瀏覽器會選擇第一個(gè)含有其支持的MIME類型的源。源的順序是至關(guān)重要的,如果瀏覽器無法識別所有的圖象類型,它會回退至原來的img元素。
但是目前這些格式的支持多數(shù)不會直接這么做,因?yàn)榇a會有些冗余難看,有判斷瀏覽器ua輸出不同dom或者樣式的,也有服務(wù)端直接輸出的。服務(wù)端直接輸出,或者CDN做特殊處理,進(jìn)行無感知格式切換,同時(shí)預(yù)留url和拒絕的接口,處理起來更靈活,省時(shí)省力,例如我們的:
網(wǎng)頁標(biāo)題:Web圖像的常見應(yīng)用策略與技巧
文章網(wǎng)址:http://www.rwnh.cn/news/169462.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、定制網(wǎng)站、營銷型網(wǎng)站建設(shè)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容