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雪碧图(精灵图)与字体图标的介绍以及对比的更多相关文章

  1. CSS雪碧图(精灵图)使用

    1:CSS雪碧图:CSS雪碧图 即 CSS Sprites,也有人叫它CSS精灵图. 2:雪碧图的由来:一个网站的页面需要大量的小图片或者小图标,但是大量的图片如果放在服务器上,每次当打开网站并且向服 ...

  2. Css雪碧图

    Css雪碧图: CSS雪碧 即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图标和背景图像合并到一张图片上,然后利用css的背景定位来显示需要显示的图片部分. 原理 ...

  3. CSS Sprite、CSS雪碧图应用实例

    CSS Sprites技术被国内一些人称为CSS雪碧图,其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”, ...

  4. 使用compass自动合并css雪碧图(css sprite)

    本文转载自: 使用compass自动合并css雪碧图(css sprite)

  5. 前端优化:css雪碧图实践应用详解

    一 为什么需要使用雪碧图 二CSS雪碧图原理及应用 前端是接近用户体验的一个项目组成部分,合适的优化能够大大减少网页响应时间,合理的资源加载自然成为了工作中的要务,现在就结合实例讲解到底什么是css雪 ...

  6. css雪碧图实现数字切换

    vue中 css 雪碧图应用及数字切换demo 1. CSS Sprites一般只能使用到固定大小的盒子(box)里,这样才能够遮挡住不应该看到的部分. 2.使用css雪碧图的优点: 利用CSS Sp ...

  7. css雪碧技术的用法。

    ---恢复内容开始--- 在目前前端开发阶段,页面会出现大量的小图片,服务器加载的时候比较吃力,怎么用 一种办法把图片都合并到一张图片上呢?这就用到了css雪碧技术. 雪碧技术是雪碧团队开发,也有人叫 ...

  8. 移动端webapp自适应实践(css雪碧图制作小工具实践)图文并茂

    为什么要写这个 以前写过关于webapp自适应屏幕的文章(链接),不过写的大多数群众看不懂,所以来个图文并茂的版本.虽然只是一个简单的页面,不过在做的过程中也遇到了一些问题,也算是好事吧! 该示例gi ...

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

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

随机推荐

  1. POJ 2417 Discrete Logging ( Baby step giant step )

    Discrete Logging Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3696   Accepted: 1727 ...

  2. (十二)Bind读取配置到C#实例

    继续上一节的,接下来用Options或者Bind把json文件里的配置转成C#的实体,相互之间映射起来.首先新建一个asp.net core mvc项目OptionsBindSample Startu ...

  3. VMware Converter Standalone迁移概要

    VMware Converter 迁移工具使用:1.基本概念 1.1基本组件: converter standalone server:包含server和worker两个服务,这两个服务经常一起安装 ...

  4. GeneXus笔记本—城市级联下拉

    最近在交流GeneXus的时候 总是会遇到有城市级联下拉的问题 这里就简单做几种方式 供大家参考参考 第一种就是直接绑定关联信息然后在后者的条件模块设定条件即可 具体如下: 首先我们所需要的表为pro ...

  5. C# Aspose.Words 数据写入到word,模板样式复杂(转换指定内容并返回多张图片)

    public ResultResponse<string[]> PrintStudyRecords([FromBody]StudyInfo info) { ResultResponse&l ...

  6. 【转载】Elasticsearch--java操作之QueryBuilders构建搜索Query

    原文地址:https://www.cnblogs.com/pypua/articles/9459941.html package com.elasticsearch; import org.elast ...

  7. NFS 共享存储实战

    目录 NFS 共享存储实战 一.NFS概述 二.NFS部署 部署NFS客户端backup和web01 统一web.nfs.backup的用户权限 代码部署步骤 三.NFS配置详解 NFS存储小结 四. ...

  8. Codeforces 1198E Rectangle Painting 2 最小点覆盖(网络流)

    题意:有一个n * n的棋盘,每个棋盘有某些矩形区域被染成了黑色(这些矩形区域有可能相交),问把所有黑色区域染成白色的最小花费是多少?你每次可以选择把一个矩形区域染成白色,花费是染色的矩形区域长和宽的 ...

  9. oracle10G rac asm 安装总结

    前言 安装步骤是参考三思博主(http://blog.chinaunix.net/uid-22741583-id-177284.html),安装的时候由于概念没搞清楚,急于求成,折腾了两天才顺利装完, ...

  10. 解读dbcp自动重连那些事(转)

    转自:http://agapple.iteye.com/blog/791943 Hi all : 最近在做 offerdetail 优化时,替换了数据库驱动,从 c3p0 0.9.1 -> db ...