css雪碧图(精灵图)与字体图标的介绍以及对比
css雪碧图(精灵图)与字体图标的介绍以及对比
设想一个实际场景:在一个页面为了展示,我们放置了很多独立的小图片,浏览器在显示页面的时候,就需要向服务器就会发送很多请求,来获取并加载这些小图片,但是这样的话,就会导致请求数量太多,造成资源浪费,以及访问速度变慢。
碰到这样的情况,可以使用两种方式解决这种问题:CSS雪碧图以及字体图标。但是这两种方式也都有不同的适用场景,需要根据实际需求来做取舍。
1.CSS雪碧图简介
CSS雪碧图 即 CSS Sprites,也有人叫它CSS精灵图,是一种CSS图像合并技术,该方法是将众多小图标合并到同一张图上,用以减轻http请求压力。然后通过操作CSS的background属性,控制背景的位置以及大小,来展示需要的部分。
不过大背景图还是自己单独一张比较好,此方法适用于图片体积较小且数量较多的情况。
下面就是一张CSS雪碧图,这些图标展示是固定的,数量较多且单个体积小,正适合使用雪碧图。
![]()
下面是demo:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/* 同一张背景图,只是位置不同 */
.common {
width: 11px;
height: 14px;
background-image: url("https://jhcan333.github.io/can-Share/preview/cssSpritesAndIconFont/images/sprites.png");
background-repeat: no-repeat;
}
.test1 {
background-position: 0px 0px;
}
.test2 {
background-position: -26px 0px;
}
.line div {
display: inline-block;
}
</style>
</head>
<body>
<div class="line">
<div>test1</div><div class="common test1"></div>
</div>
<div class="line">
<div>test2</div><div class="common test2"></div>
</div>
</body>
</html>
展示效果如下:
![]()
2.字体图标简介
通过一些工具软件,将图片转换成字体图标。这些字体图标可以像字体一样使用,可以使用字体相关的CSS属性来对它进行控制。
使用步骤如下:
1.把字体图标下载下来放置到网页所在目录中
2.通过 @font-face 声明自定义的字体。并应用到需要的地方,这里简单写的,设置成了 * 。如下例:
@font-face {
font-family: 'demo'; // 定义字体的名字
src: url('fonts/demo.eot?9ruqhl');
src: url('fonts/demo.eot?9ruqhl#iefix') format('embedded-opentype'),
url('fonts/demo.ttf?9ruqhl') format('truetype'),
url('fonts/demo.woff?9ruqhl') format('woff'),
url('fonts/demo.svg?9ruqhl#demo') format('svg');
font-weight: normal;
font-style: normal;
}
* {
font-family: 'demo' !important; // 在需要的元素中定义所用字体
speak: none;
}
3.为了方便,可以使用专门的 class 表示该图标,并且使用伪类为该元素添加内容,如下例:
.icon-close:before {
content: "\e900";
}
.icon-help:before {
content: "\e901";
}
.icon-lock:before {
content: "\e902";
}
4.在页面中添加元素并且设置已经设置好的class,如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="./style/style.css">
<style>
.icon-large {
font-size: 40px;
color:orange;
}
.icon-normal {
font-size: 32px;
color: #fc5830;
}
.icon-small {
font-size: 24px;
color:#0079cc;
}
</style>
</head>
<body>
<span class="icon-close icon-large"></span>
<span class="icon-help icon-normal"></span>
<span class="icon-lock icon-small"></span>
</body>
</html>
5.展示效果如下:
![]()
3.两种方式如何取舍?
以上两种方式雪碧图和字体图标都可以解决图片数量多且体积小场景下的问题,但是两者在应用中也是需要根据实际情况来进行判断取舍。
CSS雪碧图和字体图标对比情况如下
| 对比角度 | CSS雪碧图 | 字体图标 |
|---|---|---|
| 做动画 | 图片做动画较合适 | 做动画的话,不如图片 |
| 高分辨率 | 图片在高分辨率下会模糊 | 字体图标是文字,受分辨率影响小 |
| 多色展示 | 图片多色图片展示很好实现 | 多色图标目前来看比较难实现 |
| 图标变换颜色或者其他效果 | 需要换一个图片 | 改变一下文字的color就好 |
| 文件体积 | 图片体积较大 | 字体图标体积较小 |
| 实现简单icon | 体积大、变化不灵活 | 体积小、方便添加效果 |
从上面可以看出,CSS雪碧图和字体图标因为本质上的不同(一个是图片,一个是文字),造成了其所适用的场景不同。
在一些对分辨率要求不高、展示的图标色彩丰富、图标变化不多的情况下,可以选用雪碧图。而对于那种多场景多分辨率下展示、单图标颜色单一、图标的颜色变化较多的情况下,比较适合使用字体图标。
github地址:https://github.com/JHCan333/can-Share/tree/master/preview/cssSpritesAndIconFont
最近在搞一个和前端程序员相关的公号,除了技术分享之外,也增加了对于职业发展、生活记录之类的文章,欢迎大家关注,一起聊天、吐槽,一起努力工作,认真生活!

css雪碧图(精灵图)与字体图标的介绍以及对比的更多相关文章
- CSS雪碧图(精灵图)使用
1:CSS雪碧图:CSS雪碧图 即 CSS Sprites,也有人叫它CSS精灵图. 2:雪碧图的由来:一个网站的页面需要大量的小图片或者小图标,但是大量的图片如果放在服务器上,每次当打开网站并且向服 ...
- Css雪碧图
Css雪碧图: CSS雪碧 即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图标和背景图像合并到一张图片上,然后利用css的背景定位来显示需要显示的图片部分. 原理 ...
- CSS Sprite、CSS雪碧图应用实例
CSS Sprites技术被国内一些人称为CSS雪碧图,其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”, ...
- 使用compass自动合并css雪碧图(css sprite)
本文转载自: 使用compass自动合并css雪碧图(css sprite)
- 前端优化:css雪碧图实践应用详解
一 为什么需要使用雪碧图 二CSS雪碧图原理及应用 前端是接近用户体验的一个项目组成部分,合适的优化能够大大减少网页响应时间,合理的资源加载自然成为了工作中的要务,现在就结合实例讲解到底什么是css雪 ...
- css雪碧图实现数字切换
vue中 css 雪碧图应用及数字切换demo 1. CSS Sprites一般只能使用到固定大小的盒子(box)里,这样才能够遮挡住不应该看到的部分. 2.使用css雪碧图的优点: 利用CSS Sp ...
- css雪碧技术的用法。
---恢复内容开始--- 在目前前端开发阶段,页面会出现大量的小图片,服务器加载的时候比较吃力,怎么用 一种办法把图片都合并到一张图片上呢?这就用到了css雪碧技术. 雪碧技术是雪碧团队开发,也有人叫 ...
- 移动端webapp自适应实践(css雪碧图制作小工具实践)图文并茂
为什么要写这个 以前写过关于webapp自适应屏幕的文章(链接),不过写的大多数群众看不懂,所以来个图文并茂的版本.虽然只是一个简单的页面,不过在做的过程中也遇到了一些问题,也算是好事吧! 该示例gi ...
- CSS雪碧,即CSS Sprite 简单的例子
CSS Sprite生成工具 http://pan.baidu.com/s/1gdGQwiJ 工具可将多幅图片整合一张,并生成CSS. HTML代码 <style> .img{backgr ...
随机推荐
- Https 代理 sslsocket
1. 什么是SSLSocket JDK文档指出,SSLSocket扩展Socket并提供使用SSL或TLS协议的安全套接字. 这种套接字是正常的流套接字,但是它们在基础网络传输协议(如TCP)上添加了 ...
- iview 分割面板效果(二)
源码地址:https://gitee.com/yolanda624/coffer/tree/master/src/components/a-split-panel
- js常用扩展方法
在日常的开发过程中,经常会碰到javaScript原生对象方法不够用的情况,所以经常会对javaScript原生方法进行扩展.下面就是在实际工作时,经常使用的一些方法,做一下记录,有需要的可以拿去. ...
- Nginx 常用基础模块
目录 Nginx 常用基础模块 Nginx日志管理 nginx日志切割 Nginx目录索引 Nginx状态监控 Nginx访问控制 Nginx访问限制 Nginx 请求限制配置实战 Nginx Loc ...
- postgres之清理空间碎片
postgres=# select * from pg_stat_user_tables where relname = 'test'; -[ RECORD 1 ]-------+---------- ...
- Python学习总结笔记
# windows python -m http.server [<portNo>] # linux python -m SimpleHTTPServer [<portNo>] ...
- 监控服务(keepalived,httpd)
#!/bin/bashpidof httpdif [ $? -eq 0 ];then echo "httpd is ok"else echo "httpd is not ...
- qt学习(四)主窗选钮,显示新窗口。
游戏有选区这个习惯, 当然,我特指<冒险岛>了,有的时候就是打开一个主屏幕上五个按钮让你点击进入, 甚至有的时候进去了还要选哪个频道,游戏服务器都得分区,频道来完成功能.现在我们先进入想选 ...
- vue-element-admin安装失败的问题
根据官网的介绍,从GitHub下载以后,安装依赖的时候一直不成功,试了很多办法,最终解决 先记录错误的过程: 从GitHub下载 在当前文件夹的地址栏输入 “cmd” 打开窗口 输入 npm inst ...
- mysql完美增量备份脚本
是否因为mysql太大,来回备份浪费资源带宽而发愁,如果想解决这个麻烦就需要增量备份. vi /etc/my.cnf开启日志及定期清理日志log-bin=mysql-binbinlog_format= ...