前言
background-size:规定背景图片的尺寸。为CSS3属性。so...万恶的ie浏览器,此刻的内心一定是崩溃的!说实话,作为一个前端的coder,面对CSS3如此多的炫酷效果,我不能用起来,还要求我兼容ie8及以下,我一定放弃维护多年的淑女形象,拿起刀!!!干什么,你懂的!当然,我大天朝的XX网站以及领导的审美除外!毕竟,我还是一朵需要祖国的阳光沐浴而茁长成长的老花朵!言归正传,聊一聊今天的主题。

background-size

CSS3属性。用法主要有下面4种。

  • length
    设置背景图像的高度和宽度。
    第一个值设置宽度,第二个值设置高度。
    如果只设置一个值,则第二个值会被设置为 "auto"。
  • percentage
    以父元素的百分比来设置背景图像的宽度和高度。
    第一个值设置宽度,第二个值设置高度。
    如果只设置一个值,则第二个值会被设置为 "auto"。
  • cover
    把背景图像扩展至足够大,以使背景图像完全覆盖背景区域。
    背景图像的某些部分也许无法显示在背景定位区域中。
  • contain
    把图像图像扩展至最大尺寸,以使其宽度和高度完全适应内容区域。

CSS Sprite

CSS Sprites又作css精灵,是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,减少单张图片资源请求次数,以优化渲染性能。

本媛在coder的过程中有极强的完美主义倾向以及近乎苛刻的强迫症。见不得代码资源零碎和松散。所以,喜欢把一些描述性的图片资源进行整合。当然雪碧图就为首选。制作雪碧图的方法有很多。早年间最喜欢用ps。现在嘛,出现了很多优秀的制作工具。所以,打着时间是用来干更有意义的事的旗号一本正经的偷起了懒。所以,关于怎么制作一张雪碧图,在这里就不赘述。随便一家搜索引擎随便一搜都是一大票的解决方案。

  • CSS Sprite 应用
    雪碧图其实就是把网页中一些图标以及零散的描述性图片整合到一张图片文件中,利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。
    如,有一张如下的雪碧图:

    对应的CSS代码为:

i.pic{
background: url('../../../static/dragComponentSprite.png') -15px -63px no-repeat;
background-size: cover;
}
i.form{
background: url('../../../static/dragComponentSprite.png') -64px -63px no-repeat;
background-size: cover;
}
i.btn{
background: url('../../../static/dragComponentSprite.png') -159px -63px no-repeat;
background-size: cover;
}
i.map{
background: url('../../../static/dragComponentSprite.png') -111px -63px no-repeat;
background-size: cover;
}

那么问题来了......
一般在雪碧图中的单个小图都是一定大小的,与在网页应用中的目标大小并不一致。比如在雪碧图中单个图标的大小是50 * 50,而目标大小是35 * 35,这个时候按照单图来设置background-size:cover实际并不能如你所愿正确定位。

这是为什么呢?而这时候又该如何解决呢?难道如此美妙的雪碧图和酷炫的CSS3不能兼得?!O My God Orz.......这简直太绝望了有木有?

也许你会说,放弃雪碧图,依然用小图就可以啦。当然可以。但遇到困难就逃避不是本媛的性格!so,这种情况下,就跳出以往单图设置的框框。之所以出现这种状况应该是因为雪碧图和目标图的大小比例出现了问题。所以试想将雪碧图按照一定的比例进行变化,然后在去利用background-position设置定位是不是就可以解决了呢?那事实证明,这是可行的。

具体怎么做呢?
你可能忘了,CSS3中的background-size的作用。它生来就是用来设置背景图片的大小的。所以,我们依然用它来解决上面雪碧图应用中出现的问题。但是具体background-size要设置多大才合适呢。在这本媛就要传授一个小诀窍给你啦。

敲黑板,划重点啦!请牢牢记住下面万能的公式!!!

background-size 的宽度值 = (雪碧图总宽度 * 目标图像宽度) /雪碧图中高分辨率图像宽度

比如,我们上面的问题。
我制作的雪碧图中的图标是高分辨率下的50px * 50px;
网页中需要展示的目标图标是35px * 35px;
制作的雪碧图的总宽度是300px;
根据上面的公式 background-size 的宽度值 = (300 * 35)/50 = 210;
或许你已经注意到了,这里我只计算了背景图像的宽度值,并没有设置高度,这里就涉及到了background-size在响应式等比例缩放图片的应用了。这里暂不展开,下次可以单开一篇章好好聊聊。所以,为了确保背景图像缩放比例正常,我们将“height”值设置为“auto”。到这里。问题已经得到了完美解决。

最终的CSS代码为:

i.pic{
background: url('../../../static/dragComponentSprite.png') -15px -63px no-repeat;
background-size: 210px auto;
}
i.form{
background: url('../../../static/dragComponentSprite.png') -64px -63px no-repeat;
background-size: 210px auto;
}
i.btn{
background: url('../../../static/dragComponentSprite.png') -159px -63px no-repeat;
background-size: 210px auto;
}
i.map{
background: url('../../../static/dragComponentSprite.png') -111px -63px no-repeat;
background-size: 210px auto;
}

作者:离不开大海的鱼
链接:https://www.jianshu.com/p/a5bb445f3f43
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

background-size之CSS Sprite巧用的更多相关文章

  1. css 尺寸、边框、内边距、背景以及css Sprite

    上节课回顾: HTML标签: 格式排版 p 段落 双br 换行 单hr 分隔线 单h1~h6 标题 双pre 原样格式化输出 双div 标签,无任何特殊意义 HTML标签 :文本 <em> ...

  2. CSS Sprite初探之原理、使用

    CSS Sprite简介: 利用CSS Sprites能很好地减少了网页的http请求次数,从而大大的提高了页面的性能,节省时间和带宽.CSS Sprites在国内很多人叫css精灵, 是一种网页图片 ...

  3. css sprite 调整大张图片中小图标的大小

    直接说解决方法: 假设一张拼合好的大图大小是:900 x 1000 px (如上图) 现在想取图中左上角的河马图标,并缩小图标的大小. 正常取图: .sprite { background: url( ...

  4. CSS雪碧,即CSS Sprite 简单的例子

    CSS Sprite生成工具 http://pan.baidu.com/s/1gdGQwiJ 工具可将多幅图片整合一张,并生成CSS. HTML代码 <style> .img{backgr ...

  5. CSS Sprite 图标

    HTML <body> <!-- ul.sprite>li*5>s.s-icon+a{CSS Sprite} --> <!-- 以上是Sublime Text ...

  6. CSS Sprite 雪碧图制作

    CSS Sprite 雪碧图,简单来说就是: 为了提高网页的性能,减少加载次数,将一些不会经常随网站内容变化的小图标,集中放在一张大图上,将该图应作为background-image 嵌入页面中,在需 ...

  7. CSS Sprite雪碧图

    为了减少http请求数量,加速网页内容显示,很多网站的导航栏图标.登录框图片等,使用的并不是<image>标签,而是CSS Sprite雪碧图. 两个小例子: 淘宝首页的侧栏图 代码 &l ...

  8. css雪碧(CSS Sprite)和css3过渡效果综合应用

    在网页中我们经常可以看到,有些图片在鼠标经过的时候,有一个上下或左右的滑动效果,很实用页很方便,今天正好用到,拿来和大家分享一下,有什么不对或意见欢迎指正. html部分如下,这里本来打算用jq来着, ...

  9. css sprite实例

    css sprite直译过来就是CSS精灵.通常被解释为“CSS图像拼合”或“CSS贴图定位”.本文章向码农们介绍css sprite使用方法和基本使用实例,需要的码农可以参考一下. 一.什么是css ...

随机推荐

  1. GB2312编码(为什么要加2020H、8080H,外码→内码→交换码→字形码)

    为什么要加上2020H和8080H? 区位码.内码.国标码怎么转换非常简单,但是令人迷惑的是为什么要那么转换?这种转换不可能平白无故地那样转换! 我搜索很多资料,找到最好的解释,总结如下: 首先,注意 ...

  2. WPF几种渐变色

      [LinearGradientBrush-- 主要属性: StartPoint 获取或设置线性渐变的二维起始坐标. EndPoint 获取或设置线性渐变的二维终止坐标. 例子: <Linea ...

  3. [linux] shell脚本编程-ubuntu创建vsftpd服务

    1.  useradd -s /bin/bash -m 用户名 ,  创建用户,自动创建家目录 , 设置登录shell 2.  echo 用户名:密码 | chpasswd ,非交互式设置密码 3.  ...

  4. java虚拟机的内存机制

    我们都知道,java程序的跨平台性离不开java虚拟机,虚拟机隔绝了底层操作系统,使得java程序可以直接运行在虚拟机之上.所以,对java的学习,离不开对java虚拟机的学习与了解.下面简单整理下j ...

  5. 基于环境变量为多用户配置不同的JDK(win)

    情景 同一服务器同时部署不同项目需要使用不同的JRE 环境 Windows Server 2008 需求 用户admin 需要使用jdk1.8 用户admin1 需要使用jdk1.7 解决 通过配置用 ...

  6. Spring Boot 打包jar部署服务器

    部署方式:打包成jar部署 部署方式有两种,一种是传统的war包,另一种是打包成jar,推荐第二种方式部署 部署准备 1. jar包内置tomcat,无需服务器安装tomcat环境 2.需要JDK,且 ...

  7. jetbrains激活 webstorm激活 webstorm激活码

    License Activation的破解方式无效时,请采用以下方法1. 把下载的破解补丁放在你的idea的安装目录下的bin的目录下面(如下图所示),本文示例为C:\Program Files\Je ...

  8. git 之奇技淫巧

    1,git remote prune origin  本地有很多其实早就被删除的远程分支,可以用 git remote prune origin 全部清除掉,这样再 checkout 别的分支时就清晰 ...

  9. openlayers研究(一) 初始化流程

    下载2.13.1.解压缩.根据readme解释,openlayers.js是一个压缩库,.light是一个图像显示的简化库,mobile顾名思义应该是应对移动设备的库.build里面有py写的打包工具 ...

  10. C#默认OrderBy()函数的排序问题

    昨天在客户现场遇到一个很奇葩的问题,猜下下面代码的排序输出是什么: static void Main() { List<", "1:"}; foreach(stri ...