嘿!设计师 前端们说的“雪碧图”是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嘿!设计师 前端们说的“雪碧图”是啥?相关的知识,希望对你有一定的参考价值。
参考技术A 通常来说,完成设计稿后设计师会使用设计软件中的切图插件来进行切图。用ps设计有切图神器cutterman,而设计新秀sketch也有许多不同的切图插件,它们可以很方便地导出图片,甚至能同时导出一倍图和二倍图,这可以满足我们绝大多数的需求。但是,当图片很多时,这种方式不仅会伤害设计师的双手,也会因为大量的资源请求导致网页打开速度下降。这时候,雪碧图的优势就体现出来了,雪碧图本质上就是将众多图片拼贴为一张作为背景图片引用。
在详细介绍雪碧图之前,先说说背景图片的概念。前端在构建网页结构时,会使用很多的块元素堆叠嵌套,比如大标题< h1 >、段落< p >、图片< img >等,图片标签< img >就是将图片引用进来直接显示,而背景图片则是给< h1 >等元素的背景设置为图片。就好比给电脑设置背景图片,你可以控制它是自适应还是原始大小,重复或者不重复,同样地在网页中每个块元素的背景图片,可以控制它的适应方式、是否重复以及显示位置等。
当我们给一个元素设置固定大小,让它的背景图片位置进行变化,就好像显示出了不同的图片,这就是雪碧图的原理,有点类似ps里的创建剪切蒙版。下图左边就是网易云音乐的一张雪碧图,右侧就是用剪切蒙版演示的雪碧图原理。
一般来说,在某一模块(比如一个播放器)需要的图片很多而每张图片又不是很大时,可以考虑切成雪碧图交给前端。但目前很多前端构建工具里面有雪碧图合并功能,所以如果前端使用了构建工具可以把合并的功能交给前端。
雪碧图还有一个妙用,那就是替代gif。设计师都知道,透明背景的gif动图在导出时回带有毛边,在颜色反差很大的背景色上更明显。因此,可以考虑将多帧图片横向排列,以雪碧图的形式每隔固定时间改变背景图片的位置,因为本质上还是png图片,所以毛边的情况就可以解决了。可以参考我之前的文章: 透明背景gif图的锯齿是个什么鬼? 。
那么问题来了,为什么叫“雪碧图”呢?叫“可乐图”、“芬达图”、“王老吉图”不行吗?这个,我也不知道。
Web前端之背景雪碧图
目录
一、背景
background-color
设置背景颜色background-image
设置背景图片- 如果背景图片大小小于元素,则背景图片会自动在元素中平铺将元素铺满
- 如果背景图片大小大于元素,则背景图片一部分会无法完全显示
- 如果背景图片大小等于元素,则背景图片会直接正常显示
background-repeat
设置背景图片的重复方式repeat
默认值,背景图片沿着x轴和y轴双方向重复repeat-x
背景图片沿着x轴方向重复repeat-y
背景图片沿着y轴方向重复no-repeat
背景图片不重复
background-position
设置背景图片的位置- 通过
top
left
right
bottom
center
几个表示方位的词来设置背景图片的位置:使用方位词时必须要同时指定两个值,如果只写一个则第二个默认就是center
- 通过偏移量来指定背景图片的位置:水平方向偏移量、垂直方向变量
- 通过
background-clip
设置背景的范围border-box
默认值,背景会出现在边框的下边padding-box
背景不会出现在边框,只出现在内容区和内边距content-box
背景只会出现在内容区
background-origin
背景图片的偏移量计算的原点border-box
背景图片的变量从边框处开始计算padding-box
默认值,background-position
从内边距处开始计算content-box
背景图片的偏移量从内容区处计算
background-size
设置背景图片的大小- 第一个值表示宽度,第二个值表示高度;如果只写一个,则第二个值默认是
auto
cover
图片的比例不变,将元素铺满contain
图片比例不变,将图片在元素中完整显示
- 第一个值表示宽度,第二个值表示高度;如果只写一个,则第二个值默认是
background-attachment
背景图片是否跟随元素移动scroll
默认值,背景图片会跟随元素移动fixed
背景会固定在页面中,不会随元素移动
可以同时设置背景图片和背景颜色,这样背景颜色将会成为图片的背景色
示例1
.box1
height: 500px;
width: 500px;
overflow: auto;
border: 20px red double;
padding: 10px;
/* 背景色 */
background-color: darksalmon;
/* 背景图 */
background-image: url('/assets/背景.png');
/* 背景图重复方式 */
background-repeat: no-repeat;
/* 背景图偏移位置 */
background-position: 0 0;
/* 背景图偏移量计算的原点 */
background-origin: content-box;
/* 背景范围 */
background-clip: content-box;
/* 背景图片大小 */
background-size: contain;
.box2
width: 100px;
height: 1000px;
background-color: orange;
background-image: url("assets/背景2.jpg");
background-repeat: no-repeat;
background-position: 50px 50px;
/* 背景图片是否跟随移动 */
background-attachment: fixed;
backgound
背景相关的简写属性,所有背景相关的样式都可以通过该样式来设置并且该样式没有顺序要求,也没有哪个属性是必须写的
注意
background-size
必须写在background-position
的后边,并且使用/隔开background-position/background-size
background-origin background-clip
两个样式,orgin
要在clip
的前边
示例2
.box1
height: 500px;
width: 500px;
border: 10px red double;
padding: 10px;
background: #bfa url("assets/dlam.png") no-repeat 100px 100px/200px padding-box content-box;
二、雪碧图
解决图片闪烁的问题:
可以将多个小图片统一保存到一个大图片中,然后通过调整background-position来显示响应的图片
这样图片会同时加载到网页中就可以有效的避免出现闪烁的问题
这个技术在网页中应用十分广泛,被称为CSS-Sprite,这种图我们称为雪碧图
雪碧图的使用步骤:
- 先确定要使用的图标
- 测量图标的大小
- 根据测量结果创建一个元素
- 将雪碧图设置为元素的背景图片
- 设置一个偏移量以显示正确的图片
雪碧图的特点:
- 一次性将多个图片加载进页面,降低请求的次数,加快访问速度,提升用户的体验
示例1
a:link
display: block;
width: 93px;
height: 29px;
background: url("assets/背景/练习2-背景/btn.png");
/* 默认值,可以不设置 */
background-position: 0 0;
a:hover
/* 设置水平方向的一个偏移量;注意是向左移动,所以是负值 */
background-position: -93px 0;
a:active
/* 设置水平方向的一个偏移量;注意是向左移动,所以是负值 */
background-position: calc(-93px*2) 0;
我们对比以下之前练习中的效果,第一次加载进来的时候会有明显的闪烁
示例2
.box1
width: 109px;
height: 33px;
background: url("assets/背景/练习3-雪碧图/amazon-sprite_.png");
/* 设置水平和垂直方向的一个偏移量;注意移动方向 */
background-position: -10px -10px;
.box2
width: 42px;
height: 30px;
background: url("assets/背景/练习3-雪碧图/amazon-sprite_.png");
/* 设置水平和垂直方向的一个偏移量;注意移动方向 */
background-position: -58px -338px;
以上是关于嘿!设计师 前端们说的“雪碧图”是啥?的主要内容,如果未能解决你的问题,请参考以下文章