便於理解,先來了解幾個名詞:css
查看demohtml
/* ** 注意:background-size的值是sprite.png的尺寸,而不是每一個icon的尺寸 */ .sprite-icon{ background-image:url(sprite.png); background-size:98px 65px; } /* ** 每一個icon的background-positon只需寫一次,即icon相對與1x圖片的位置,在@2x圖片中的位置也是這個 */ .icon-1{ background-position:0 0; } .icon-2{ background-position:-33px 0; } .icon-3{ background-position:-66px 0; } .icon-4{ background-position:0 -33px; } .icon-5{ background-position:-33px -33px; } .icon-6{ background-position:-66px -33px; } /* ** 2x圖片要是1x圖片的準確2倍 ** sprite中圖標之間的間隙,也應是2倍 ** 每一個圖標無需從新寫background-position */ @media (min-resolution:2dppx), /* Standard syntax */ (-webkit-min-device-pixel-ratio:2) /* Safari & Android Browser */ { .sprite-icon{ background-image:url(sprite@2x.png); } }
媒體查詢(media queries)已經能夠解決高密度顯示問題,爲何還須要image-set? 問的好。 使用image-set的兩個主要好處:web
查看demo瀏覽器
/* ** 注意: ** 圖片要求:2x圖片要是1x圖片的準確2倍,sprite中圖標之間的間隙也應是2倍 ** 無需寫background-size,瀏覽器自動處理 ** */ .sprite-icon{ background-image:url(sprite.png); background-image: -webkit-image-set( url('sprite.png') 1x, url('sprite@2x.png') 2x ); } /* ** 每一個icon的background-positon只需寫一次,即icon相對與1x圖片的位置,在@2x圖片中的位置也是這個 */ .icon-1{ background-position:0 0; } .icon-2{ background-position:-33px 0; } .icon-3{ background-position:-66px 0; } .icon-4{ background-position:0 -33px; } .icon-5{ background-position:-33px -33px; } .icon-6{ background-position:-66px -33px; }
查看demo網絡
.sprite-icon{ background-image:url(more.png); } .icon-1{ background-position:0 0; } .icon-2{ background-position:-33px 0; } .icon-3{ background-position:-66px 0; } .icon-4{ background-position:0 -33px; } .icon-5{ background-position:-33px -33px; } .icon-6{ background-position:-66px -33px; } .icon-7{ background-position:0 -66px; } /* ** 每一個icon的backgroud-size是2x圖片的一半 ** 每一個icon的backgroud-position是相對與2x圖片的位置除以2 */ @media (min-resolution:2dppx), /* Standard syntax */ (-webkit-min-device-pixel-ratio:2) /* Safari & Android Browser */ { .icon-1{ background-image:url(portion@2x.png); background-size:197px 65px; background-position:0 0; } .icon-2{ background-image:url(portion@2x.png); background-size:197px 65px; background-position:-33px 0; } .icon-3{ background-image:url(portion@2x.png); background-size:197px 65px; background-position:-66px 0; } .icon-4{ background-image:url(portion@2x.png); background-size:197px 65px; background-position:-99px -33px; } .icon-5{ background-image:url(portion@2x.png); background-size:197px 65px; background-position:-132px -33px; } .icon-6{ background-image:url(portion@2x.png); background-size:197px 65px; background-position:-165px -33px; } }