前言
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. 通过 Docker Compose 组合 ASP NET Core 和 SQL Server

    目录 Docker Compose 简介 安装 WebApi 项目 创建项目 编写Dockfile Web MVC 项目 创建项目 编写Dockfile 编写 docker-compose.yml文件 ...

  2. vue.js 开发环境搭建

    1.安装node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html) 2.基于node.js,利用淘宝npm镜像安装相关依赖 在cmd ...

  3. PHP OOP面向对象部分方法归总(代码实例子)

    <?php//对象名存在栈内存中,数据存在堆内存中class leyangjun{    var $name;  //定义变量    var $age;    var $sex;         ...

  4. shell通过ping检测整个网段IP的网络状态脚本

    要实现Ping一个网段的所有IP,并检测网络连接状态是否正常,很多方法都可以实现,下面简单介绍两种,如下:脚本1#!/bin/sh# Ping网段所有IP# 2012/02/05ip=1 #通过修改初 ...

  5. 第8章 scrapy进阶开发(2)

    8-4 selenium集成到scrapy中 其实也没什么好说的直接上代码 这是在middlewares.py中定义的一个class: from selenium.common.exceptions ...

  6. jQuery事件篇---过滤选择器 & 表单选择器

    内容提纲: 过滤选择器 1.基本过滤器 2.内容过滤器 3.可见性过滤器 4.子元素过滤器 5.其他方法 表单选择器 6.常规选择器 7.表单选择器 8.表单过滤器 发文不易,转载请注明出处! 过滤选 ...

  7. IIS利用X-Forwarded-For获得来访者的真实IP

    https://help.aliyun.com/knowledge_detail/37948.html

  8. 【C#】权限修饰符

    这个看了蛮多遍的,但是由于有一些一直不用,老是忘记,记录一下:) private  成员只能由同一个类(class)类型中的其他成员访问. family  成员可由派生类访问,不管那些类型是否在用一个 ...

  9. 判断php变量是否定义,是否为空,是否为真的一览表

    分类: 使用 PHP 函数对变量 $x 进行比较 表达式 gettype() empty() is_null() isset() boolean : if($x) $x = ""; ...

  10. Spring_Spring与AOP_AspectJ基于XML的实现

    一.前置通知 import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.as ...