CSS-sprite雪碧图&精灵图

雪碧图(精灵图)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
    <style type="text/css">
      .btn:link {
        /*将a转换为块元素*/
        display: block;
        /*设置宽高*/
        width: 93px;
        height: 29px;
        /*设置背景图片*/
        background-image: url(img/btn/btn.png);
        /*设置背景颜色不重复*/
        background-repeat: no-repeat;
      }
      .btn:hover {
        /*
          * 当是hover状态时,希望图片可以向左移动
          */
        background-position: -93px 0;
      }
      .btn:active {
      /*
        * 当是active状态时,希望图片可以再向左移动
        */
        background-position: -186px 0;
      }
    </style>
  </head>
  <body>
    <!-- 创建一个超链接 -->
    <a class="btn" href="#"></a>
  </body>
</html>

link状态:
请添加图片描述

hover状态:

请添加图片描述

active状态:

请添加图片描述

1. 问题说明

  1. 做完功能以后,发现在第一次切换图片时,会发现图片有一个非常快的闪烁,
  2. 这个闪烁会造成一次不佳的用户体验。

2. 产生闪烁问题的原因:

  1. 背景图片时以为外部资源的形式加载进网页的,浏览器没加载一个外部资源就需要单独的发送一次请求,
    • 但是我们的外部资源不是同时加载的,浏览器只有在资源被使用的时候才回去加载资源
  2. 我们这个练习,一上来浏览器只会加载 link.png 由于 hover 和 active 状态没有马上触发,
    • 所以 hover.png 和 active.png 并不是立即加载的
  3. 当 hover 被触发时,浏览器才去加载 hover.png
  4. 当 active 被触发时,浏览器才去加载 active.png

    由于加载图片需要一定的时间,所以在加载和显示的过程中会有一段时间背景图片无法显示,导致出现闪烁的情况

3. sprite雪碧图(精灵图)说明

  1. 为了解决该问题,我们可以将三个图片整合为一张图片,这样可以同时将三张图片一起加载,就不会出现闪烁的问题了
  2. 然后通过 background-position 来切换要显示的图片的位置,这种技术叫做图片整合技术,(CSS-Sprite)
  3. 优点
    • 将多个图片整合为一张图片里,浏览器只需要发送一次请求,可以同时加载多个图片,提高了访问的效率,提高了用户的体验。
    • 将多个图片整合为一张图片,减小了图片的总大小,提高了请求的速度,增加了用户体验

4. 利用雪碧图(精灵图)的练习

代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.box1{
				width: 129px;
				height: 45px;
				background-image: url(img/amazon-sprite_.png);
			}
			.box2{
				width: 42px;
				height: 30px;
				background-image: url(img/amazon-sprite_.png);
				/*
				 * 设置偏移量
				 */
				background-position: -58px -338px;
			}
		</style>
	</head>
	<body>
		<div class="box1"></div>
		<div class="box2"></div>
	</body>
</html>

原雪碧图:

请添加图片描述

页面展示:

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王十四兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值