便于理解,先来了解几个名词: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; } }