久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

Web圖像的常見應用策略與技巧

2022-06-20    分類: 網(wǎng)站建設(shè)

本文介紹一些關(guān)于響應式圖像的適配應用策略,回退原理,SVG的換色技巧,雪碧圖的百分比定位計算公式等相關(guān)的一些小知識點,目的在于幫助一部分同學快速的理清圖像應用思路,以及一些web圖像的應用技巧。

1. 響應式圖像的應用與回退

特點:應用簡單,上手容易,性能表現(xiàn)良好

難點:lazyload實現(xiàn)


根據(jù)不同設(shè)備,不同分辨率,不同像素比使用的響應式圖像,常用的有兩種場景:


1.1 固定尺寸圖像


基于設(shè)備像素比選擇,很多網(wǎng)站logo就是固定寬度圖像的一個例子,不管viewport的寬度如何,始終保持相同的寬度。


在dom里圖像與在css里的圖像寫法如下面的例子


<img srcset="test.jpg 1.5x, test2.jpg 2x" src="test.jpg" />


background-image: image-set(url(test.jpg) 1x,url(test2.jpg) 2x);

1.2 不固定尺寸圖像


與內(nèi)容相關(guān)的圖片,在需要響應式的時候,它們的大小往往并不是不變的,會隨viewport改變,對于這類圖像,也有兩種常用的處理方式


1.2.1 我們使用srcset搭配w描述符以及sizes屬性 。


w描述符告訴瀏覽器列表中的每個圖象的質(zhì)量。sizes屬性是一個包含兩個值的,由逗號分隔的列表。根據(jù)最新規(guī)范,如果srcset中任何圖像使用了w描述符,那么必須要設(shè)置sizes屬性。


sizes屬性有兩個值:第一個是媒體條件;第二個是源圖尺寸值,在特定媒體條件下,此值決定了圖片的寬度。


比如:


<img srcset="360.jpg 360w,

768.jpg 768w,

1200.jpg 1200w,

1920.jpg 1920w"

sizes="

(max-width: 360px) 100vw,

(max-width: 768px) 90vw,

(max-width: 1980px) 80vw,

768px"

src="360.jpg" >

我們來逐條讀這一個img標簽的信息


srcset,我們給瀏覽器準備了四個質(zhì)量的圖像,分別為360 768 1200 1920


sizes,我們來告訴瀏覽器,在不同的環(huán)境下圖像的寬度


當視口不大于360的時候,圖像顯示寬度為100vw,當視口不大于768的時候,圖像顯示寬度為90vw,以此類推。


最后一個src作為默認圖像url引入,并且是天然的回退方案,當瀏覽器不認識以上屬性的時候,直接讀取src渲染。


這樣說不夠直觀,我們看個demo

在iphone4(320)下,圖像寬度和我們設(shè)置的100vw一致,但是為什么瀏覽器選擇了768的圖像而沒有選擇360的?因為4的dpr是2呀^_^,瀏覽器很智能的選擇了質(zhì)量最合適的768.


再看一下6p(414),很聽話的按照我們的設(shè)置,顯示了90vw。因為他的dpr更高,瀏覽器聰明的選擇了1200質(zhì)量的圖像。

這里我們可以欺騙一下瀏覽器:


360.jpg 1200w,

1200.jpg 9999w

我們把360的圖像,騙瀏覽器說這是1200的,然后把原本1200的扔天上去

瀏覽器果然上當了,他把360的圖當成1200的來用了。這里可能有些疑問,圖像的寬度為什么不是90vw了哪?因為瀏覽器被騙了但是自己卻不知道,他依然按照1200的圖像,去適配dpr。414*90%*(360/1200)約等于111.7。這種方式很智能,瀏覽器去根據(jù)你的sizes,從w列表里選擇最適合的圖像來調(diào)用顯示。正因為他太智能了,在實際操作中可控性較差,有些我們想精確控制的圖像顯示,有時候并不能如意。而且在做lazyload的時候要處理的東西也比較復雜。


這個時候可以考慮另外一種方式。


1.2.2.picture元素,可精確把控


picture元素就像是圖像和其源的容器。瀏覽器仍然需要img元素,用來表明需要加載圖片,如果沒有img,那么什么都不會渲染。source為瀏覽器提供了要顯示圖像的供選版本。


適用場景為:在一個精確特定的轉(zhuǎn)效點(breakpoint)需要顯示一個特定的圖像時。使用picture元素選擇圖像,不會有歧義,理解起來也更直觀。


<picture>

<source media="(min-width: 960px)" srcset=960.jpg">

<source media="(min-width: 768px)" srcset="768.jpg">

<img src="360.jpg" >

</picture>

在本例中,當viewport大于960像素時,會加載圖像960的圖像。當viewport寬度大于768像素時,瀏覽器會加載768的。而當寬度小于768像素時,加載默認圖像360。


而且這個寫法的懶加載非常好處理,只需要在傳統(tǒng)的lazyload策略上稍加改進


data-src

data-srcset


在加載到的時候更換為


src

srcset


就輕松解決了。


http://snghr.tencent.com  里面使用較多


也不需要去特意做回退處理,當瀏覽器不支持的時候就直接讀取img標簽。對于懶加載的回退,我選擇判斷IE 7-8直接url給他。


2. 特殊格式的圖像應用與回退

特點:體積優(yōu)化效果顯著

難點:兼容性掌控


上面picture元素還可以提供 基于圖片格式選擇。


有一些圖像格式在較小的文件大小情況下保證了較好的圖片質(zhì)量。聽起來還不錯,但殘酷的事實是沒有一個新格式被所有瀏覽器支持。谷歌的WebP表現(xiàn)不錯,但只有Chrome和Opera原聲支持。JPEG-XR,最初被稱為高清照片,是微軟發(fā)布的一個專有圖像格式,僅Internet Explorer支持


<picture>

服務端根據(jù)瀏覽器的請求頭,返回不同的圖像格式,對于X5內(nèi)核還可以支持sharpP。


3. SVG應用

難點:變色方案,響應式定位計算


上面這個source的type屬性還支持另一種我們更常用的圖像格式,SVG。


說起SVG,這是個出現(xiàn)頻率比webp更高的圖像格式了,他有著比iconfont更多的優(yōu)點,所以現(xiàn)在web上正在大量的應用。


優(yōu)點:


1. SVG提供的功能集涵蓋了嵌套轉(zhuǎn)換、裁剪路徑、Alpha通道、濾鏡效果等能力,它還具備了傳統(tǒng)圖片沒有的矢量功能,可適配任何高清屏。


2. 可讀性好,有利于SEO與無障礙


與iconfont對比


1. 渲染方式不同


關(guān)于渲染方式,這里不多做敘述,

2. icon font只能支持單色


icon font做為字體無法支持多色圖形,這就對設(shè)計造成了許多限制,因此這也成為了icon font的一個瓶頸。


3. icon font可讀性不好


icon font主要在頁面用Unicode符號調(diào)用對應的圖標,這種方式不管是瀏覽器,搜索引擎和對無障礙方面的能力都沒有SVG好


在對比完之前,可能有同學就會問,SVG和iconfont對比有個致命的缺點,就是換色.


比如hover換色,iconfont只要寫個顏色就好了,SVG是不是需要做兩個顏色的圖?這也是SVG圖像應用我們解決的一個難點之一


SVG換色,最初我試過三個方案


一是mask-image屬性,他的優(yōu)點是簡單粗暴,直接用css來mask這個svg圖形來進行換色,缺點很明顯就是兼容性了,除去兼容性,還是很好用的。


demo:


background: #ff6600;

-webkit-mask:center no-repeat;

-webkit-mask-image: url(qq-logo.svg);

查看demo


二是通過SVG濾鏡來實現(xiàn),優(yōu)點是效果更好,缺點除了兼容性,還需要額外的腳本配合。關(guān)于濾鏡換色的詳細說明在我上一篇文章里有詳細介紹以及demo:http://www.uisdc.com/svg-filter-in-browser


三是我們最終選擇的底層無感知換色的方案,把修改顏色的腳本集成到了我們的工作流里,我們在寫css的時候,遇到svg需要換色的地方,只需要


background-image: url(test.svg?fill=#ffffff)

加一句換色參數(shù),工作流在底層會自動生成你所需要的svg圖片并合并到雪碧圖里。


SVG應用的另一個難點,就是作為背景圖響應式渲染,雪碧圖的background-position和background-size 的計算,這個其實也是其他圖像都會存在的一個難點。


我的導師 wenju 之前發(fā)過這個計算公式相關(guān)的文章:


百分比值()是背景圖相對于背景定位區(qū)(background positioning area)的百分比,可以控制在容器元素內(nèi)僅顯示Sprites圖的部分內(nèi)容。比如下圖中,Sprites圖是由四張圖像拼成的,要想在容器內(nèi)僅顯示第一張圖像,background-size的值應該多少呢?

我們僅需要Sprites圖的1/4顯示在容器內(nèi),那么Sprites圖與容器的比例應該是4:1,計算公式為: background-size : ( Sprites width / image width) (Sprites height / image height)



如何計算background-position


我們已知的信息如下:


容器元素的尺寸:elW * elH

單張圖片的尺寸:imgW * imgH

Sprites圖片的尺寸:spritesW * spritesH

單張圖片在Sprites圖上的位置:imgPosX, imgPosY


我們假設(shè):


點的位置為 (x, y)

容器上的(x, y)點與容器左上角的距離為 cX, cY

Sprites圖上的(x, y)點與本張圖片左上角的距離為 sX, sY


如果要把某張圖片完全顯示在容器元素內(nèi),我們可以推導出:


elW = imgW, elH = imgH

cX = sX, cY = sY


根據(jù)上面的信息,我就可以計算出具體的(x, y)值了,下面以 x% 為例:


cX = elW * x

sX = spritesW * x – imgPosX

elW * x = spritesW * x – imgPosX


解方程后就得到計算公式了:


x = imgPosX / (spritesW – elW) = imgPosX / (spritesW – imgW)

y = imgPosY / (spritesH – elH) = imgPosY / (spritesH – imgH)


如果你每次都手動計算的話會被累死吧?所以這一步我們還是集成到了工作流里,在所有合并雪碧圖的地方用這個公式自動計算出位置。



而關(guān)于SVG的回退方案,已經(jīng)是老生常談


比如


<svg width="200" height="200">

<image xlink: src="svg.png" width="200" height="200" />

</svg>

svg標簽方式,缺點必須指定寬高,沒有圖片的保持款高比例特性,優(yōu)點兼容性好,兼容所有主流瀏覽器


或者


<picture>

<source type="image/svg+xml" srcset="svg.svg">

<img src="svg.png" >

</picture>

在支持的瀏覽器里使用SVG,在不支持的瀏覽器里顯示PNG,優(yōu)點是type靈活,可用于SVG,WEBP等,而且保持了img標簽的特性,方便做布局操作。缺點兼容性要求高,ios9+,安卓5+,微軟Edge+

當然這個兼容性說的是source type的兼容,并不是SVG本身的兼容。


對于css里的SVG 的應用與回退策略,比較簡單,也已經(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他是一個字體,就難逃出現(xiàn)鋸齒的命運,特別是在一倍屏幕下的渲染。

<source type="image/vnd.ms-photo" src="test.jxr">

<source type="image/jp2" src="test.jp2">

<source type="image/webp" src="test.webp">

<img src="test.png" >

</picture>

source的type屬性用來指定每個圖像的MIME類型,瀏覽器會選擇第一個含有其支持的MIME類型的源。源的順序是至關(guān)重要的,如果瀏覽器無法識別所有的圖象類型,它會回退至原來的img元素。


但是目前這些格式的支持多數(shù)不會直接這么做,因為代碼會有些冗余難看,有判斷瀏覽器ua輸出不同dom或者樣式的,也有服務端直接輸出的。服務端直接輸出,或者CDN做特殊處理,進行無感知格式切換,同時預留url和拒絕的接口,處理起來更靈活,省時省力,例如我們的:

當前文章:Web圖像的常見應用策略與技巧
地址分享:http://www.js-pz168.com/news12/169462.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣品牌網(wǎng)站制作營銷型網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)軟件開發(fā)網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
欧美日韩小视频| 亚洲欧洲精品一区二区精品久久久| 国产精品免费久久| 午夜激情久久久| 成人影视亚洲图片在线| 精品亚洲欧美日韩| 欧美日韩在线一区二区| 亚洲国产精品t66y| 美女视频免费一区| 国产 高清 精品 在线 a | 国产精品久久免费看| 日本中文字幕不卡| 99超碰麻豆| 欧美中文字幕一区二区三区| 久久精品人人做人人综合| 天使萌一区二区三区免费观看| 成人h动漫精品一区二区| 日韩av影视| 精品国产乱码久久久久久影片| 亚洲综合色成人| proumb性欧美在线观看| 亚洲一区二区三区精品在线观看 | 国产精品毛片高清在线完整版| 日韩成人精品视频| 成人免费91在线看| 欧美日韩一卡二卡| 亚洲精品日韩一| 成人福利在线看| 一区二区三区视频在线播放| 久久久精品欧美丰满| 免费人成黄页网站在线一区二区| 成人自拍爱视频| 欧美精品777| 亚洲一区视频在线| 日韩毛片一二三区| 国产美女一区二区三区| 日韩三级在线播放| 久久精品夜色噜噜亚洲a∨| 捆绑调教一区二区三区| 久久久久久久久久码影片| 欧美一级精品大片| 日本视频中文字幕一区二区三区| 国产精品污www一区二区三区| 7777精品久久久大香线蕉 | 337p粉嫩大胆噜噜噜噜噜91av| 日韩成人一区二区| 裸模一区二区三区免费| 26uuu精品一区二区三区四区在线| 免费精品视频在线| 欧美动漫一区二区| 久久精品水蜜桃av综合天堂| 精品亚洲aⅴ乱码一区二区三区| 欧美日本亚洲| 久久精品亚洲乱码伦伦中文| 国产九色sp调教91| 在线观看国产一区| 亚洲精选视频免费看| 91免费观看视频在线| 91精品婷婷国产综合久久性色 | 国产精品午夜电影| 大陆成人av片| 欧美视频一区二区三区在线观看| 亚洲综合在线电影| 国产伦精品一区二区三区| 欧美mv和日韩mv的网站| 久久成人久久鬼色| 亚洲毛片aa| 一区二区三区中文免费| 国产99在线免费| 精品成人私密视频| 国产精品亚洲а∨天堂免在线| 色婷婷综合久久久| 亚洲成人激情av| 欧美亚洲爱爱另类综合| 国产精品久久久久一区| 91毛片在线观看| 精品久久人人做人人爽| 国产成人在线视频免费播放| 欧美视频在线观看一区二区| 视频一区视频二区中文字幕| 日韩av电影免费观看| 亚洲日穴在线视频| 国产亚洲精品自在久久| 国产日产欧产精品推荐色| 91在线观看美女| 精品处破学生在线二十三| 国产·精品毛片| 91精品国产一区二区三区香蕉| 九九精品一区二区| 91黄色在线观看| 日本aⅴ亚洲精品中文乱码| 永久免费精品视频网站| 午夜视频在线观看一区| 婷婷精品国产一区二区三区日韩| 一区二区三区四区高清精品免费观看| 精选一区二区三区四区五区| 国产精品免费aⅴ片在线观看| av免费观看久久| 国产日本欧美一区二区| caoporen国产精品| 欧美国产欧美亚州国产日韩mv天天看完整| 99精品视频在线播放观看| 欧美精品一区二区三区高清aⅴ | 国产+成+人+亚洲欧洲自线| 欧美一区三区四区| 国产成人精品免费网站| 欧美一区二区三区在线电影| 国产成人免费在线观看不卡| 欧美一区二区三区在线观看| 丰满白嫩尤物一区二区| 欧美va亚洲va在线观看蝴蝶网| 成人av网在线| 久久久亚洲午夜电影| 91免费小视频| 国产精品沙发午睡系列990531| 国产视频在线观看一区| 国产精品卡一卡二| 欧美区高清在线| 亚洲综合视频网| 中文字幕中文字幕在线中心一区| 日本欧美肥老太交大片| 欧美优质美女网站| 国产精品12区| 欧美精品一区二区三区久久久| 91麻豆免费视频| 国产精品久久久久久久久图文区 | 亚洲老妇xxxxxx| 亚洲欧洲日本国产| 蜜桃传媒麻豆第一区在线观看| 欧美日韩一区二区不卡| 成人免费视频视频在线观看免费 | 999在线观看免费大全电视剧| 国产精品美女久久久久aⅴ国产馆| 免费看污久久久| 日韩精品每日更新| 在线成人av网站| 91在线精品一区二区三区| 国产精品久久久久婷婷| 色狠狠久久av五月综合|| 日本不卡一二三| 欧美一区二区三区色| 91免费看网站| 一区二区三区丝袜| 91精彩视频在线观看| 国产成人aaaa| 国产色一区二区| 免费一区二区三区在在线视频| 五月激情六月综合| 欧美丰满一区二区免费视频| 99久久综合精品| 亚洲乱码精品一二三四区日韩在线 | 国外成人在线视频网站| 亚洲高清不卡在线| 欧美精品乱人伦久久久久久| 97久久超碰国产精品| 亚洲黄色片在线观看| 欧美性videosxxxxx| 91在线看国产| 亚洲一区二区三区影院| 欧美挠脚心视频网站| 91精品国产一区二区三区动漫| 亚洲免费在线观看视频| 日本韩国一区二区| 99热99精品| 亚洲一区二区中文在线| 欧美精品三级日韩久久| 国产91免费视频| 日本一不卡视频| 2020国产精品| 少妇精品久久久久久久久久| 国产剧情一区二区| 国产精品国产a级| 欧美中文字幕不卡| 99re在线视频上| 日韩和欧美的一区| 久久久影院官网| 在线视频欧美一区| 99这里只有久久精品视频| 亚洲综合一区在线| 日韩网站在线看片你懂的| 蜜桃免费一区二区三区| 国产在线视频一区二区| 国产精品久久久久aaaa| 欧美体内she精视频| 91精品入口蜜桃| 日本大胆欧美人术艺术动态| 久久久久久久久免费| 一本在线高清不卡dvd| 147欧美人体大胆444| 日韩高清在线不卡| 国产欧美一二三区| 欧美亚洲一区三区| 国产一区二区中文字幕免费看| 另类中文字幕网| 日韩一区在线看| 91精品久久久久久久久99蜜臂| 欧美日韩国产精品一区二区| 国产成人av一区二区三区在线观看| 一区二区三区在线影院| 欧美成人精品3d动漫h|