CSS Sprite从大图中截取小图的解析

这篇文章主要介绍了css sprite从大图中截取小图完整教程的相关资料,需要的朋友可以参考下

相信很多喜欢研究网页界面的童鞋都遇到过一个奇妙的现象:网页中很多图片素材被合成在一张图片上。

起初小菜模仿网站的时候,经常遇到这个现象,那时候也不知道这时什么技术,人家的整张图片素材不会利用,只能用ps切图,切成单个的再用。。。

其实,这是一个非常简单的技术,就是因为想象的太难了,才一直找不到问题的关键。

要想实现CSS抠图,只需要用到一个属性:background-position。

立即学习“前端免费学习笔记(深入)”;

按照字面理解,这个属性就是背景定位,先看看google网站的素材图,如下:

CSS Sprite从大图中截取小图的解析

假如小菜现在想做一个+1按钮,利用上边的素材图,普通状态显示A图,鼠标移上去显示后显示B图,实现这么一个动态效果。

CSS Sprite从大图中截取小图的解析

按钮是用来实现功能的,一般是用超链接响应单击事件,但是不能把背景图直接加在超链接上,那样就不叫样式啦,因为超链接的文本长度变化时,样式也变了。

地球人一般的做法是,p里边套一个超链接,超链接负责实现功能,p负责装载背景图。html结构如下:

<a href="+1http://www.jb51.net">+1</a>

有了html骨架,接下来就要写css样式啦。

假如我们什么都不考虑,直接把整张图片设为背景,样式如下:

.btn{    background:url(bg.png);}

效果如图:

CSS Sprite从大图中截取小图的解析

p是块级元素,默认是占一行的,这个先不用关心,但看到背景图重复了,这显然不是我们想要的,加上background-repeat:no-repeat;属性,改进样式如下:

.btn{    background:url(bg.png);    background-repeat:no-repeat;}

这样就不重复了。

p可以理解成一个矩形框,它的左上角是顶点,背景图片的顶点也是左上角,p加载背景图时,会把两个顶点重合,顶点的坐标是(0,0)。不理解的看图,很简单的。。。

CSS Sprite从大图中截取小图的解析

+1的小图片混杂在大图中,想提取出来,需要用background-position属性,这个属性相当于大图片不动,把p的顶点进行移动,移动到目标小图的顶点位置,如下图:

CSS Sprite从大图中截取小图的解析

这样一来,p中显示的就是小图了,但是,显示的还不仅仅是小图,而是图中阴影部分,怎么办呢?设置一下p的宽、高,让它和小图的宽、高一样就可以了呗!!

再来看看background-position属性,它有两个参数,分别是水平方向移动的像素、竖直方向移动的像素,都用负数表示。大图不动,p移动,也只能是向右、向下移动,只要记住这两个方向移动的像素都用负数表示就行了!

因此,只要找到小图相对于大图左上角顶点的水平移动像素、竖直移动像素就可以了。小菜也不用什么专业工具,用截图就很方便,从大图左上角顶点开始截,到小图顶点那停下来,一看像素就差不多了,然后再调试调试,基本就搞定。

在本例中,A小图的位移是:-25px -374px,A小图尺寸是:24px 16px。因此,css样式如下:

.btn{    background:url(bg.png);    background-repeat:no-repeat;    background-position:-25px -374px;    height:16px;    width:24px;}

效果如下:

CSS Sprite从大图中截取小图的解析

这样就算是把小图抠出来啦!简单吧!!

先解释个问题,图片上有+1,而我又在超链上写了一个+1,这是因为很多时候文本内容不是写在图片上的,那样灵活性太差,文本就是文本,小菜为了给大家一个完整的演示,因此又写了一个+1,接下来就处理它!

先把+1居中,居中分为水平居中和垂直居中,水平居中超链接,需要在p上设置text-align:center;,这个属性是对子节点而言的;垂直居中p中的超链接,只需要把a标签的line-height属性设成和p的高度一样即可。样式如下:

.btn{    background:url(bg.png);    background-repeat:no-repeat;    background-position:-25px -374px;    height:16px;    width:24px;    text-align:center;}.btn a{    line-height:16px;}

效果如下:

CSS Sprite从大图中截取小图的解析

接下来呢,还有问题,我们可以发现,只有当鼠标移到+1文本上时,鼠标才会变成手型,才能响应事件。

这显然不是我们想要的,应该是鼠标移入图片时,确切的说是鼠标移入p时,就可以变成手型,也能响应事件。

这也简单,只需要在a标签(超链接)上加display:block;属性即可。

另外这个下划线比较碍眼,用text-decoration:none;属性去掉,很常见,就不多说了。

样式如下:

.btn{   background:url(bg.png);   background-repeat:no-repeat;   background-position:-25px -374px;   height:16px;   width:24px;   text-align:center;}.btn a{   line-height:16px;   display:block;   text-decoration:none;}

接下来就剩最后一件事了,那就是鼠标移入的时候切换背景。

本例是p里边套a标签,鼠标移入换背景,当然是指鼠标移入p,而且换背景也是换p的背景,可不是a标签的哦!!

因此要在p标签上调用hover,p的样式是btn,因此写成.btn:hover{}。

换背景还需要找到背景图片,这又需要抠小图了,也就是抠上边指出的B图。

刚刚显示的是A小图,B小图和A小图在同一水平线上,因此竖直方向的移动像素是相同的,水平方向差不就是A小图的水平像素加上A小图的宽度。

经过测试,B小图的位移是:-50px -374px,尺寸大小就不用关心了,肯定和A小图一样,不一样就没法做了。

把B小图的定位background-position:-50px -374px;放在.btn:hover{}里即可。

样式如下:

.btn{   background:url(bg.png);   background-repeat:no-repeat;   background-position:-25px -374px;   height:16px;   width:24px;   text-align:center;}.btn a{   line-height:16px;   display:block;   text-decoration:none;}.btn:hover{   background-position:-50px -374px;}

最终效果-鼠标移入之前:

CSS Sprite从大图中截取小图的解析

最终效果-鼠标移入之后:

CSS Sprite从大图中截取小图的解析

好啦,教程到这就结束了,小菜只是简单的演示了一个完整的制作流程,中间还有很多细节问题,比如浏览器兼容、CSS优化等等,这就需要读者自己探索了。

其实小菜一直在说的CSS抠图,真正的技术名叫CSS Sprite技术,国人习惯叫CSS精灵。

这种技术有好处也有坏处,好处是由于图片都放在一起,请求时只需请求一张图片,减少了与服务器的交互次数,还可以解决hover延迟加载的问题。坏处就是不好控制,扩展性不太好,以后有改动,可谓是牵一发而动全身,而且有时会因为屏幕分辨率不同出现背景断裂现象。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

CSS3中not()选择器实现最后一行li去除某种css样式的代码

CSS3的Flexbox骰子布局的实现及分析

以上就是CSS Sprite从大图中截取小图的解析的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1610177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 01:17:42
下一篇 2025年12月24日 01:17:50

相关推荐

  • 关于CSS中的class与id区别及用法的解析

    这篇文章主要介绍了关于css中的class与id区别及用法的解析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 用p CSS制作Xhtml网页页面时,常会用到class 和id来选择调用CSS样式属性,那么什么时候该用class,什么时候又用id,下面详细了解CLASS与ID基本属性…

    好文分享 2025年12月24日
    000
  • css div实现的遮罩层兼容IE6-IE9和FireFox浏览器

    css p 遮罩层想必熟悉网页的朋友都不陌生吧,网上也有相关的实现文章,不过大都对浏览器的兼容性不好,在本文将为大家介绍的是一个可以兼容ie6-ie9 firefox 的遮罩层,感兴趣的朋友不要错过 Html代码: @@##@@ 数据加载中,请稍后… CSS样式: /*loading加载遮罩层c…

    2025年12月24日
    000
  • css的新属性display:box使用方法

    这次给大家带来css的新属性display:box使用方法,css的新属性display:box使用注意事项有哪些,下面就是实战案例,一起来看一下。 一、display:box;   在元素上设置该属性,可使其子代排列在同一水平上,类似display:inline-block;。 二、可在其子代设置…

    好文分享 2025年12月24日
    000
  • CSS浮动使用技巧

    这次给大家带来CSS浮动使用技巧,CSS浮动使用的注意事项有哪些,下面就是实战案例,一起来看一下。 浮动具有以下特性: 盖不住的文本 浮动元素后面不是块级元素,后面的元素将会和它并排(除非设置了元素的宽度,并且屏幕放不下时将会换行) 浮动元素的上一个元素如果没有浮动,浮动只在当前行浮动;当浮动遇到浮…

    2025年12月24日 好文分享
    000
  • 关于CSS中基代码base.css的内容

    base.css顾名思义就是基代码的含义,主要就是重置浏览器默认样式的一个集合吧,在进行css布局时把它加进去将会提高书写效率,感兴趣的朋友可以参考下 代码如下: /***** css set*****/ body, p, dl, dt, dd,ul,ol,li,h1,h2,h3,h4,h5,h6,…

    好文分享 2025年12月24日
    000
  • 关于css多行文本溢出时出现省略号的内容

    这篇文章主要介绍了css多行文本溢出时出现省略号的示例的相关资料,内容挺不错的,现在分享给大家,也给大家做个参考。 多行文本溢出时出现省略号 本文推荐2种方法。 1. css tip:只兼容chrome内核的浏览器。ff不支持。 立即学习“前端免费学习笔记(深入)”; .box { overflow…

    好文分享 2025年12月24日
    000
  • 用icon fonts来辅助CSS处理图片

    这篇文章主要介绍了使用icon fonts来辅助css处理图片,在移动端网页的设计中使用较多,需要的朋友可以参考下 由于移动端设备拥有不同分辨率,PPI 等引起的问题, 常常需要针对不同屏幕分辨率来调整优化,如使用 @2x 图片, max-width 限制等。采用 css @font-face 用来…

    好文分享 2025年12月24日
    000
  • CSS编写代码时的高性能总结

    这篇文章主要介绍了css编写时的性能优化以及高维护性优化建议总结,包括雪碧图和尺寸设定等热门的讨论点,需要的朋友可以参考下 性能,这个词如今被炒的很热,也是每个开发者,由“知道”、“会做”之后必经的一个“怎样做好”的阶段。性能关乎用户在不同设备和不同网络状态下的体验。也被多方面因素所影响。此文说说c…

    好文分享 2025年12月24日
    000
  • CSS中@规则的用法

    这篇文章主要介绍了css中一些@规则的用法小结,是css入门学习中的基础知识,需要的朋友可以参考下 at-rule是一个声明,为CSS提供执行或怎么表现的指令。每个声明以@开头,后紧跟一个可用的关键字,这个关键字充当一个标识符,用于表示CSS该做什么。这是一个通用的语法,尽管每个at-rule有其它…

    好文分享 2025年12月24日
    000
  • 关于CSS Normalize的文件配置

    这篇文章主要介绍了css normalize文件配置示例,对全局项目进行设置,需要的朋友可以参考下 作为前端工程师,很多人都有自己的一套CSS Normalize文件,这样能省掉开发过程中的不少麻烦,提高工作效率。在前人的基础上,我总结了自己的CSS Normalize文件,目前基本上每个项目都有在…

    好文分享 2025年12月24日
    000
  • 在CSS中对RGB颜色的使用分析

    这篇文章主要介绍了CSS中对RGB颜色的使用详解,是CSS入门学习中的基础知识,需要的朋友可以参考下 RGB颜色模型解释 RGB颜色模型就是一种描述某个颜色里面有多少红、绿、蓝三原色的量的方法,就像把水彩颜料或油彩颜料混合起来得到某种我们想要的真实色彩一样。 想象下如果你要配出一个纯蓝色,为了实现这…

    好文分享 2025年12月24日
    000
  • CSS中的inherit使用分析

    这篇文章主要介绍了css中的inherit使用技巧小结,css中的继承关键字的使用是css入门学习中的基础知识,需要的朋友可以参考下 稍不留意便会忽略掉级联样式表的特点。大多数开发者都知道inherit关键字,但有几个新的CSS3继承特性你可能不知道… property: inherit;   in…

    好文分享 2025年12月24日
    000
  • 利用css实现一款仿ios7的switches开关按钮

    这篇文章主要为大家介绍了纯css实现的一款仿ios7的switches开关按钮,无需引js代码。在实现中给出了两种颜色,三种不同大小的demo,需要的朋友可以参考下   今天给大家介绍一款仿ios7的switches开关按钮。这款按钮也是纯css实现的。无需引js代码。在实现中给出了两种颜色,三种不…

    2025年12月24日
    000
  • css+transition做出显隐动画

    这次给大家带来css+transition做出显隐动画,的注意事项有哪些,下面就是实战案例,一起来看一下。 我们先来看效果图 像这样的一个带过渡效果的小部件在我们实际开发中的应用几率还是比较大的,但是在开发微信小程序的过程中可能有的小伙伴发现transition这个属性它不好使(下面说明)所以我们这…

    2025年12月24日
    000
  • 前端实战项目中20条CSS代码使用注意事项

    这次给大家带来前端实战项目中20条CSS代码使用注意事项,下面就是实战案例,一起来看一下。 01、谨慎使用外边距属性 与其它的属性不同,垂直方向上的外边距相遇时将会发生折叠。这意味着如果一个元素的下边距遇到了另一个元素的上边距,那么二者中较大的一个将被留下。下面是一个简单的例子。 .square {…

    2025年12月24日
    000
  • CSS实战项目中书写规范与顺序

    这次给大家带来CSS实战项目中书写规范与顺序,CSS实战项目中书写规范与顺序的注意事项有哪些,下面就是实战案例,一起来看一下。 CSS书写顺序  1.位置属性(position, top, right, z-index, display, float等) 2.大小(width, height, pa…

    2025年12月24日
    000
  • CSS层叠机制使用详解

    这次给大家带来CSS层叠机制使用详解,CSS层叠机制使用的注意事项有哪些,下面就是实战案例,一起来看一下。 css中为什么要有层叠机制 因为在css中可能会有多个样式同时影响同一个元素的某个属性,层叠机制可以解决作者(写代码的人),用户(浏览页面的人)和用户代理(一般指浏览器)的样式冲突。 在层叠中…

    好文分享 2025年12月24日
    000
  • 关于CSS的图像拼合技术

    这篇文章主要介绍了关于CSS的图像拼合技术 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下    图像拼合就是单个图像的集合。    有许多图像的网页可能需要很长事件来加载和生成多个服务器的请求。    使用图像拼合会降低服务器的请求数量,并节省带宽。 图像拼合–创建一个…

    好文分享 2025年12月24日
    000
  • CSS的positon属性的分析

    这篇文章主要介绍了关于CSS的positon属性的分析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 position是CSS中非常重要的一个属性,通过position属性,我们可以让元素相对于其正常位置,父元素或者浏览器窗口进行偏移。postion也是初学者容易搞不清楚状况的一个属…

    2025年12月24日 好文分享
    000
  • CSS样式的覆盖规则

    下面为大家带来一篇css样式覆盖规则全面了解。内容挺不错的,现在就分享给大家,也给大家做个参考。 大家都知道CSS的全称叫做“层叠样式表”,但估计很多人都不知道“层叠”二字的含义。其实,“层叠”指的就是样式的覆盖,当一个元素被运用上多种样式,并且出现重名的样式属性时,浏览器必须从中选择一个属性值,这…

    好文分享 2025年12月24日
    000

发表回复

登录后才能评论
关注微信