前言
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. ZOJ 2971 Give Me the Number

    Give Me the Number Numbers in English are written down in the following way (only numbers less than  ...

  2. 图像RGB2YUV与YUV2RGB格式互转介绍

    1 YUV格式与RGB格式说明 由于不同国家的电视信号系统支持的图像格式不同,有YUV格式成像,也有RGB格式成像,因此为了保证兼容性,需要进行RGB与YUV格式的互转. 另外YUV格式具有亮度信息和 ...

  3. docker上安装nginx服务

    环境     1.开启一个容器,安装nginx,略过   2.假如第一步新启动没映射端口的话,重新把容器保存为镜像然后再重新运行一个新容器,不建议在一个正在运行的容器上做端口映射 docker run ...

  4. 开始使用 Vuejs 2.0 ---简单总结1

    Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vuejs 采用自底向上增量开发的设计.Vuejs 的核心库只关注视图层,并且非常容 ...

  5. ASP.ENT前台更改绑定数据的日期格式

    1.Eval和Bind的区别 绑定表达式 < %# Eval("字段名") %> < %# Bind("字段名") %> 区别 1.ev ...

  6. Linux基础学习1--档案的属性和目录

    用命令 ls -al可以列出当前所有档案,和档案的各种情况 第一块是档案属性:一共10个,第一个代表档案类型 {d:目录,-:档案,l:连接档,b:接口设备,c:串行端口设备},接下来是三个一组,第一 ...

  7. 访问Django项目出现DisallowedHost at / Invalid HTTP_HOST header问题

    闲来无事,想玩玩django,源码安装碰到了一堆乱七八糟依赖性问题,耗费一下午的时间总算是在ubuntu14.04上搭建好了python3+django2开发环境, 心血来潮,创建了一个django项 ...

  8. Guava学习笔记之Maps(1):Maps.uniqueIndex(Iterable, Function)

    Guava官方文档 https://github.com/google/guava/wiki/CollectionUtilitiesExplained 官方文档这样描述: [`Maps.uniqueI ...

  9. FisherYates费雪耶兹随机置乱算法

    public class FisherYates { public static void main(String[] args) { int[] arr = new int[10]; // 初始有序 ...

  10. HDU 2276 Kiki & Little Kiki 2 矩阵构造

    Kiki & Little Kiki 2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...