Web优化 --利用css sprites降低图片请求

sprites是鬼怪,小妖精,调皮鬼的意思,初听这个高端洋气的名字我被震慑住了,一步步掀开其面纱后发觉非常easy的东西。作用却非常大


什么是CSS Sprites


  CSS Sprites是指把网页中非常多小图片(非常多图标文件)做成按规律排列的一张大图上,在显示的时候通过background-image、background-position显示图片特定部分达到和分散的一张张小图片一样的效果。

JqueryUI的效果图例如以下


非常多页面经常使用的小图标。可是我们看看每一个小图标的源代码的时候会发现,这些小图标的src是同一个文件。都是这张大图


为什么要使用CSSSprites


  姑且先无论这是怎么实现的,我们先来了解一下又好好的方法它不用为什么要用这样的怪异的方式,在代码书写和可读性上都有了一定程度的开销。这么干有什么优点能让人们放弃安逸的做法来用CSS sprites呢?

  •  浏览器载入图片为堵塞形式

       我们知道浏览器在载入网页的时候图片文件及外部的JSCSS文件都须要单独下载,JS是阻塞HTML下载进程的,图片是另外开启进程来下载的,不同的浏览器同一时候下载图片的数量的限制一般为一个或者五个或者十个,所以假设一个遍布了图片的网页,或者一系列网页,即使你网速再快也要分批次的下载这些图片。

  •  图片下载为一次完整的http请求

           每一个图片的下载都是一次完整的HTTP请求-响应。而把非常多小图片集中到一张图片上这样在仅仅须要一个HTTP请求-响应,在如今网速条件下不超过200k的图片下载速度是差点儿相同的,下载一次之后不管是该页面还是网站其他页面使用包括在这张大图上的图片的时候就能够使用缓存,不会带来重复下载的开销。所以仅仅有一个HTTP请求-响应。

  • Sprites降低HTTP请求

所以使用CSS sprites最大的优点就是降低HTTP请求,加快站点响应速度,提高站点性能。

或许会问,多几个HTTP请求真的会那么严重吗?假设使用一张大图,那么非常可能大图中有几个图片用不到。这不是多载入内容了吗。和多几次HTTP请求开销差距有那么大吗?


CSS Sprites实现


首先了解一下CSS的 background-position

background-position设置或检索对象的背景图像位置。必须先指定 background-image属性。

语法:

background-position: length || length

background-position: position || position

取值:

length  :百分数 |由浮点数字和单位标识符组成的长度值。

position  :top | center | bottom | left | center |right

如: 
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }

我们看到使用的url为同一个图片,知识postion时,图片的锁定位置有变动。

小结:

   CSS Sprites的缺点:凡事有利必有弊端。

可能有人喜欢,有人不喜欢,由于每次图片修改都要往这张图片加入内容,图片的坐标定位要非常准确会,会稍显繁琐。坐标定位要固定为某个绝对值,因此会失去如center的一些灵活属性。

CSS Sprites 有长处也有缺点。要不要使用,详细要看网页以载入速度为主还是以维护方便easy为主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[BZOJ3203][SDOI2013]保护出题人(凸包+三分)

https://www.cnblogs.com/Skyminer/p/6435544.html 先不要急于转化成几何模型&#xff0c;先把式子化到底再对应到几何图形中去。 1 #include<cstdio>2 #include<algorithm>3 #define rep(i,l,r) for (int i(l); i<(r); i)4 typedef long long ll;5 using names…

轻松创建nodejs服务器(1):一个简单nodejs服务器例子

这篇文章主要介绍了一个简单nodejs服务器例子,本文实现了一个简单的hello world例子,并展示如何运行这个服务器,需要的朋友可以参考下我们先来实现一个简单的例子&#xff0c;hello world。 似乎每种语言教程的第一节都会讲这个&#xff0c;我们也不例外。 首先我们先创建一个项…

谁是赢家_人工智能竞赛正在进行中。 这是赢家。

谁是赢家by Terren Peterson由Terren Peterson 人工智能竞赛正在进行中。 这是赢家。 (The race is on for artificial intelligence. Here’s who is winning.) On Saturday, Louisville, Kentucky hosted the 143rd running of the Kentucky Derby. It was a spectacle wher…

mysql取消mvvc机制_MySQL探秘(六):InnoDB一致性非锁定读

一致性非锁定读(consistent nonlocking read)是指InnoDB存储引擎通过多版本控制(MVVC)读取当前数据库中行数据的方式。如果读取的行正在执行DELETE或UPDATE操作&#xff0c;这时读取操作不会因此去等待行上锁的释放。相反地&#xff0c;InnoDB会去读取行的一个快照。上图直观地…

自动化脚本

自动化脚本工具: http://appium.io/slate/cn/master/?python#about-appium 查看app元素工具: uiautomatorviewer http://www.cnblogs.com/ITGirl00/p/4235466.html app 反编译原理 http://blog.csdn.net/jiangwei0910410003/article/details/47188679转载于:https://www.cnblo…

springmvc常用注解之@Controller和@RequestMapping

对于各种注解而言&#xff0c;排第一的当然是“Controller”,表明某类是一个controller。 “RequestMapping”请求路径映射&#xff0c;如果标注在某个controller的类级别上&#xff0c;则表明访问此类路径下的方法都要加上其配置的路径&#xff1b;最常用是标注在方法上&…

最小可行产品是什么_无论如何,“最小可行产品”到底意味着什么?

最小可行产品是什么by Ravi Vadrevu通过拉维瓦德雷武(Ravi Vadrevu) 无论如何&#xff0c;“最小可行产品”实际上是什么意思&#xff1f; (What does “Minimum Viable Product” actually mean, anyway?) 伊隆马斯克(Elon Musk)提出一个令人困惑的想法 (Elon Musk on makin…

站立会议12-2

编写团队博客&#xff0c;进行资料的查看转载于:https://www.cnblogs.com/qijun1120/p/10247725.html

彻底删除mysql server 2005_sql2005卸载工具(sql server 2005卸载工具)

如果您要安装新版的sql就必须先完整的卸载sql2005&#xff0c;如果你按照常规的方法是不能完整的卸载sql2005&#xff0c;从而会引起安装的时候说sql已经挂起的错误&#xff0c;sql2005卸载工具(sql server 2005卸载工具)&#xff0c;是一个帮你完整的清理已经安装的sql的工具。…

谷歌浏览器有时会卡顿_Google不会,不要学:为什么搜索有时会比了解更好

谷歌浏览器有时会卡顿by Jeremy Gunter杰里米甘特(Jeremy Gunter) Google不会&#xff0c;不要学&#xff1a;为什么搜索有时会比了解更好 (Google not, learn not: why searching can sometimes be better than knowing) A few months ago, I was reading through some of th…

codevs 1907 方格取数 3

Description 在一个有m*n 个方格的棋盘中&#xff0c;每个方格中有一个正整数。现要从方格中取数&#xff0c;使任意2 个数所在方格没有公共边&#xff0c;且取出的数的总和最大。试设计一个满足要求的取数算法。 Input 第1 行有2 个正整数m和n&#xff0c;分别表示棋盘的行数和…

APP应用 HTTP/1.0中keep-alive

在HTTP/1.0中keep-alive不是标准协议&#xff0c;客户端必须发送Connection:Keep-Alive来激活keep-alive连接。https://www.imooc.com/article/31231HTTP协议是无状态的协议&#xff0c;即每一次请求都是互相独立的。因此它的最初实现是&#xff0c;每一个http请求都会打开一个…

mysql 日期滞后_如何滞后MySQL中的列?

要在MySQL中滞后一列&#xff0c;首先让我们创建一个表。创建表的查询如下-mysql> create table LagDemo-> (-> UserId int,-> UserValue int-> );示例使用insert命令在表中插入一些记录。查询如下-mysql> insert into LagDemo values(12,158);mysql> ins…

oracle高效分页查询总结

本文参考链接&#xff1a;http://blog.sina.com.cn/s/blog_8604ca230100vro9.html 探索查询语句&#xff1a; --分页参数&#xff1a;size 20 page 2 --没有order by的查询 -- 嵌套子查询&#xff0c;两次筛选&#xff08;推荐使用&#xff09; --SELECT * -- FROM (SELECT R…

18124 N皇后问题

18124 N皇后问题 时间限制:2000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC;VC Description 有N*N的国际象棋棋盘&#xff0c;要求在上面放N个皇后&#xff0c;要求任意两个皇后不会互杀&#xff0c;有多少种不同的放法&#xff1f; 输入格式 每一个…

ux设计师怎样找同类产品_没有预算? 别找借口。 便宜的UX上的UX 2:让我们开始构建。...

ux设计师怎样找同类产品by Vinny文尼 没有预算&#xff1f; 别找借口。 便宜的UX上的UX 2&#xff1a;让我们开始构建。 (No budget? No excuse. UX on the cheap Part 2: let’s get building.) This is a continuation of my series on ‘UX on a Budget’. If you haven’…

巨蟒python全栈开发-第6天 is==

1.小数据池 2.id 3.decode和encode 小数据池 #小数据池:不要死磕就行#python为了简化,搞出来的一个东西ID (1)# id()函数可以帮我们查看一个变量的内存地址# a10# b30# c10# print(id(a)) #1712876864# print(id(b)) #1712877504# print(id(c)) #1712876864(2)# lst[周…

安装mysql8._安装MySQL8(附详细图文)

安装MySQL8(附详细图文)删除mysql服务&#xff1a;mysqld -remove mysql1、下载 mysql 8下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/2、配置 mysql 配置文件打开 mysql 8 的安装目录&#xff1a;my.ini注意设置自己对应的 mysql 安装目录 和数据存放目录[mysq…

win10安装windows live writer 错误:OnCatalogResult:0x80190194

到官网下载了一个在线安装程序&#xff0c;可是一运行就提示无法安装&#xff0c;显式错误“OnCatalogResult:0x80190194”&#xff0c;如下图所示 找到windows live安装程序的安装日志文件。具体位置是&#xff1a;C:\Users\All Users\Microsoft\WLSetup\Logs 需要下载安装文件…

C# 实现一个可取消的多线程操作 示例

private void button1_Click(object sender, EventArgs e){//定义一个为可取消资源标志CancellationTokenSource cts new CancellationTokenSource();//定义二个为可取消资源标志CancellationTokenSource cts1 new CancellationTokenSource();//实现一个可取消操作的回调函数…