有趣的 CSS 图标整合技术!sprites精灵图,css贴图定位

你好,我是云桃桃。

一个希望帮助更多朋友快速入门 WEB 前端的程序媛。

云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合集

293篇原创内容-更多前端系列内容可以go公众.h:云桃桃

后台回复“前端工具”可获取开发工具,持续更新中

后台回复“前端基础题”可得到前端基础100题汇总,持续更新中

后台回复“前端电子书”可获取20+本精选电子书

前言

图像精灵(Sprite),也称为雪碧图、CSS 雪碧、CSS Sprite,是一种 CSS 图像合成技术,它将多个小图标或图片合并到一个单独的图像文件中,然后通过 CSS 的背景定位属性来显示需要的部分。

图像精灵主要用于解决 img 标签在加载多张小图标或图片时产生的 HTTP 请求过多、页面加载速度慢等问题。比如,wyy音乐的这块,用的就是精灵图。

图片

图像精灵的好处包括:

  1. 减少 HTTP 请求: 将多个小图标或图片合并到一个文件中,减少了浏览器向服务器发送的 HTTP 请求次数,提高了页面加载速度。

  2. 减小文件大小: 合并后的图像精灵文件通常比分开加载的多个小图标或图片文件大小要小,减小了页面的总体文件大小,节省了带宽和服务器资源。

  3. 提高性能: 页面加载速度快了,用户可以更快地访问和浏览网站内容,提高了用户体验和整体性能。

OK,那我们一起来看看吧。

基础

区分精灵图和普通单张背景图,主要就是 background-position,精灵图使用 0 和负值的位置。它水平/垂直的最大值是0,负值可以是像素或者百分比。

使用负值可以将背景图片向上或向左移动,以便显示合并图中的特定位置。

例如,当我们想要定位在设计稿上水平50像素,垂直100像素的图标时,那position就是-50px -100px。

所以这个方法就是:通过找到图标,在图标在作图软件里真正的位置上,在前面加上负号,来定位背景,从而实现只显示特定图标的效果。

好了,有了基础认知以后,我们来看看 CSS 编写精灵图的步骤,如下:

  1. 创建合并图: 首先需要将所有小图标或图片合并到一张大图中,这张大图就是精灵图。可以使用设计工具或在线精灵图生成工具来完成这个步骤。

  2. 确定每个图标的位置和大小: 在合并图中,每个小图标的位置和大小都需要确定好,这样才能在CSS中准确地定位和显示特定的图标。

  3. 设置背景图片: 在CSS中,使用background-image属性将精灵图设置为背景图片。

  4. 设置背景定位: 使用background-position属性设置背景图片在元素中的位置,通过调整水平和垂直偏移值来显示特定的图标。

  5. 设置图标大小: 使用widthheight属性设置显示图标的大小,通常情况下,这些属性值应与合并图中每个小图标的大小相匹配。

  6. 显示特定图标: 使用伪类或JavaScript等技术,在特定的状态或条件下,通过改变背景定位或背景图片来显示合并图中的特定图标。

案例

下图,就是一张精灵图,里面包含了 6 个图标。第一行白色的是未 hover 的,第二行黄色的是 hover 后的效果。

图片

精灵图,可以打开 Photoshop 等作图软件,方便查看每个图标的精确位置。

图片

OK,那我们就结合下图这个左侧的垂直导航,来增加一下精灵图。效果如下。

图片

代码如下。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>/* 全局样式 */* {margin: 0;padding: 0;color: #333;box-sizing: border-box; /* 改变元素的盒模型,使得元素的宽度和高度包括内容的宽度和高度,以及内边距和边框的空间。这样做的好处是可以更加直观地设置元素的尺寸,不必过多考虑内边距和边框的影响,简化了布局计算过程,提高了开发效率 */}a {text-decoration: none; /* 去除下划线 */}li {list-style-type: none; /* 去除列表项的默认样式 */}img {display: block;width: 100%; /* 图片宽度设置为100% ,免得很多图要根据父级设置宽高了*/}/* 清除浮动样式 */.clearfix::after {content: '';display: table;clear: both;}/* 固定在左侧 */.nav-left {width: 20%;height: 100%;position: fixed;top: 0;left: 0;overflow-y: auto;background-color: #242424;}.nav-left > li a {display: block;line-height: 50px;font-size: 14px;padding-left: 20px;}/* 精灵图开始,一定要设置宽高,否则出不来。 */.nav-left > li .nav-icon {width: 18px;height: 18px;display: inline-block;vertical-align: middle;}.nav-icon-selected {/* 在水平方向0像素,垂直方向0像素的位置(也就是第一行) */background: url(img/sprite.png) 0 0 no-repeat;}.nav-icon-aimachines {/* 在水平方向第20像素,垂直方向0像素的位置 */background: url(img/sprite.png) -20px 0 no-repeat;}.nav-icon-homepremium {/* 在水平方向第40像素,垂直方向0像素的位置 */background: url(img/sprite.png) -40px 0 no-repeat;}.nav-left li:hover .nav-icon-selected {/* 在水平方向第0像素,垂直方向20像素的位置(也就是第二行了)*/background: url(img/sprite.png) 0 -20px no-repeat;}.nav-left li:hover .nav-icon-aimachines {/* 在水平方向20像素,垂直方向20像素的位置 */background: url(img/sprite.png) -20px -20px no-repeat;}.nav-left li:hover .nav-icon-homepremium {/* 在水平方向40像素,垂直方向20像素的位置 */background: url(img/sprite.png) -40px -20px no-repeat;}/* 精灵图结束 */.nav-left > li a span {padding-left: 10px;color: #fff;}.nav-left li.current {color: #fff;background-color: #da1f15;}.nav-left li:hover {color: #fff;background-color: #da1f15;transition: all 0.3s; /* css3属性,设置过渡效果,使元素在变化时更加平滑 */}.main-box {margin-left: 20%; /* 设置主内容区域与左侧导航栏的距离 */padding: 10px;}</style></head><body><div class="nav-left"><li class="current"><a href="#" class="nav1"><i class="nav-icon nav-icon-selected"></i><span>精选</span></a></li><li><a href="#" class="nav1"><i class="nav-icon nav-icon-aimachines"></i><span>智能机器</span></a></li><li><a href="#" class="nav1"><i class="nav-icon nav-icon-homepremium"></i><span>居家优品</span></a></li><li><a href="#" class="nav1"><i class="nav-icon nav-icon-follow"></i><span>关注</span></a></li></div><div class="main-box"><p>周杰伦(Jay Chou),1979 年 1 月 18 日出生于台湾省新北市,祖籍福建省永春县,华语流行乐男歌手、音乐人、演员、导演、编剧,毕业于淡江中学。2000 年,发行个人首张音乐专辑《Jay》 [26]。2001 年,凭借专辑《范特西》奠定其融合中西方音乐的风格 [16]。2002 年,举行“The One”世界巡回演唱会 [1]。2003 年,成为美国《时代》杂志封面人物 [2];同年,发行音乐专辑《叶惠美》 [21],该专辑获得第 15 届台湾金曲奖最佳流行音乐演唱专辑奖 [23]。2004 年,发行音乐专辑《七里香》 [29],该专辑在亚洲的首月销量达到 300 万张 [316];同年,获得世界音乐大奖中国区最畅销艺人奖 [320]。2005 年,主演个人首部电影《头文字 D》 [314],并凭借该片获得第 25 届香港电影金像奖和第 42 届台湾电影金马奖的最佳新演员奖 [3] [315]。2006 年起,连续三年获得世界音乐大奖中国区最畅销艺人奖 [4]。</p><p>周杰伦(Jay Chou),1979 年 1 月 18 日出生于台湾省新北市,祖籍福建省永春县,华语流行乐男歌手、音乐人、演员、导演、编剧,毕业于淡江中学。2000 年,发行个人首张音乐专辑《Jay》 [26]。2001 年,凭借专辑《范特西》奠定其融合中西方音乐的风格 [16]。2002 年,举行“The One”世界巡回演唱会 [1]。2003 年,成为美国《时代》杂志封面人物 [2];同年,发行音乐专辑《叶惠美》 [21],该专辑获得第 15 届台湾金曲奖最佳流行音乐演唱专辑奖 [23]。2004 年,发行音乐专辑《七里香》 [29],该专辑在亚洲的首月销量达到 300 万张 [316];同年,获得世界音乐大奖中国区最畅销艺人奖 [320]。2005 年,主演个人首部电影《头文字 D》 [314],并凭借该片获得第 25 届香港电影金像奖和第 42 届台湾电影金马奖的最佳新演员奖 [3] [315]。2006 年起,连续三年获得世界音乐大奖中国区最畅销艺人奖 [4]。</p><p>周杰伦(Jay Chou),1979 年 1 月 18 日出生于台湾省新北市,祖籍福建省永春县,华语流行乐男歌手、音乐人、演员、导演、编剧,毕业于淡江中学。2000 年,发行个人首张音乐专辑《Jay》 [26]。2001 年,凭借专辑《范特西》奠定其融合中西方音乐的风格 [16]。2002 年,举行“The One”世界巡回演唱会 [1]。2003 年,成为美国《时代》杂志封面人物 [2];同年,发行音乐专辑《叶惠美》 [21],该专辑获得第 15 届台湾金曲奖最佳流行音乐演唱专辑奖 [23]。2004 年,发行音乐专辑《七里香》 [29],该专辑在亚洲的首月销量达到 300 万张 [316];同年,获得世界音乐大奖中国区最畅销艺人奖 [320]。2005 年,主演个人首部电影《头文字 D》 [314],并凭借该片获得第 25 届香港电影金像奖和第 42 届台湾电影金马奖的最佳新演员奖 [3] [315]。2006 年起,连续三年获得世界音乐大奖中国区最畅销艺人奖 [4]。</p></div></body>
</html>

写精灵图的时候,我认为有以下 5 点注意事项:

  1. 精灵图的命名要规范,比如icon-homeicon-search等。

  2. 精灵图中的每个图标元素都应该有明确的宽度和高度。这样可以确保在使用背景定位时能够准确显示所需的图标。因为 background 只是背景,不是实物,不占宽高。没有明确大小的精灵图元素可能会导致背景定位不准确,从而显示错误的图标或者导致布局错乱。这也是新手经常犯错的问题。

  3. 在设置背景位置时,要确保使用正确的偏移值来显示需要的图标,避免显示错误的图标或者偏移不准确的情况。

  4. 确保设置背景为不重复显示,否则可能会出现重复显示图标的情况。

  5. 不要给图标元素设置 padding,可能导致图标错位或者多出。

总结

现在呢,随着前端技术的发展,使用字体图标(ttf文件),或者矢量图标(Vector Icons)通常被认为是比图像精灵更好的图标方案。

使用字体图标或者矢量图标相比于精灵图有以下 5 点优势:

  1. 灵活性: 字体图标和矢量图标可以根据需要调整大小而不会失真,而精灵图中的图标在放大时可能会失真或模糊。

  2. 颜色控制: 字体图标和矢量图标可以通过CSS直接控制颜色,而精灵图中的图标颜色通常是固定的,一旦要修改颜色,就要去修改精灵图了。

  3. 多色图标支持: 字体图标和矢量图标可以包含多种颜色,而精灵图中的图标通常是单色的。

  4. 易于使用: 使用字体图标只需设置字体和Unicode编码,使用矢量图标只需引入相应的SVG文件,比较简单且易于维护。

  5. 支持动画: 矢量图标和部分字体图标(如SVG格式的字体图标)支持CSS动画效果,可以实现更加生动的交互效果。

总体来说,字体图标和矢量图标相比于精灵图具有更多的优势,并且在现代前端开发中被广泛应用。

OK,本文完。

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

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

相关文章

vue3.0(三) Vite文件目录结构及SFC语法

文章目录 Vite介绍Vite文件目录结构SFC语法SFC 语法定义bug解决 Vite介绍 为什么使用Vite&#xff1f; 表现 与Vite的ESbuild预绑定使其比使用任何其他JS绑定器都快10到100倍。这是因为它有助于提高页面速度并将CommonJS/UMD模块转换为ESM。 基于Vite文件&#xff0c;“预绑定…

深入理解Linux调试工具eBPF和strace、内存泄漏处理、Kubernetes容器调试以及C++协程的崩溃信息收集

在软件开发领域&#xff0c;无论是初级开发者还是资深工程师&#xff0c;都需要面对复杂的调试工作。本文将介绍几个重要的调试工具和技术&#xff0c;并提供实际调试方法的指导&#xff0c;包括Linux环境下的eBPF和strace&#xff0c;内存泄漏问题的处理&#xff0c;Kubernete…

RocketMq详解:一、RocketMQ 介绍及基本概念

文章目录 前言1.RocketMQ简介2.RocketMQ 特点3.核心特性4.应用场景5.RocketMQ 优势6.RocketMQ 四大核心组件6.1 NameServer1.NameServer作用2.NameServer被设计为无状态的原因3.和NameServer和Zookeeper的区别4.NameServer的高可用保障 6.2 Broker1.Broker部署方式2.高可用与负…

[Algorithm][分治 - 归并排序][排序数组][交易逆序对的总数][计算右侧小于当前元素的个数][翻转对]详细讲解

目录 0.原理讲解1.排序数组1.题目链接2.代码实现 2.交易逆序对的总数1.题目链接2.算法原理详解3.代码实现 3.计算右侧小于当前元素的个数1.题目链接2.算法原理详解3.代码实现 4.翻转对1.题目链接2.算法原理详解3.代码实现 0.原理讲解 归并排序的流程充分的体现了**「分⽽治之」…

利用RunnerGo数据大屏强化测试管理与决策

测试平台中的数据大屏在提供实时监控、统计分析、效率提升、制定策略和促进沟通等方面具有重要的意义。它为测试团队提供更全面、更直观的数据支持&#xff0c;有助于提高测试质量和效率&#xff0c;减少风险&#xff0c;并加强团队协作和沟通。 数据大屏也是RunnerGo的核心特…

用python写单链表

目录 链表的数据结构单链表操作头插入尾插入中间插入 删除查找 总结 链表的数据结构 链表是什么呢&#xff0c;来看下 链表&#xff0c;是一种数据结构。相对于数组而言&#xff0c;是不连续的一块内存空间。不仅如此&#xff0c;而且链表有多种&#xff0c;包括&#xff1a;…

Spring Security OAuth2 统一登录

介绍 Spring Security OAuth2 是一个在 Spring Security 框架基础上构建的 OAuth2 授权服务器和资源服务器的扩展库。它提供了一套功能强大的工具和组件&#xff0c;用于实现 OAuth2 协议中的授权流程、令牌管理和访问控制。 Git地址&#xff1a;yunfeng-boot3-sercurity: Sp…

火力发电厂超低排放标准?

目录&#xff1a; 引言火力发电厂超低排放的背景与意义火力发电厂超低排放环保指标解析环保验收要求超低排放的重要性环保验收的流程与要点超低排放技术措施与应用火力发电厂超低排放的监测与评估环保验收中常见问题及解决方案案例分析&#xff1a;成功实现超低排放的火力发电…

uniapp分包,以及通过uni-simple-router进行分包

先说一下uniapp的直接分包方式&#xff0c;很简单&#xff1a; 配置分包信息 打开manifest.json源码视图&#xff0c;添加 “optimization”:{“subPackages”:true} 开启分包优化 我们在根目录下创建一个pagesA文件夹&#xff0c;用来放置需要分包的页面 然后配置路由 运行到…

Unity3d 学习之按钮绑定事件

创建测试脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class myTest : MonoBehaviour {// Start is called before the first frame updatepublic Button _codeBindBtn null;void Start(){if (_codeBi…

020Node.js的FS模块使用fs.mkdir创建目录

Node.js的FS模块使用fs.mkdir创建目录 //fs.mkdir 创建目录 /*path 将创建的目录路径mode 目录权限&#xff08;读写权限&#xff09;&#xff0c;默认777callback 回调&#xff0c;传递异常参数err*/ const fsrequire(fs);fs.mkdir(./css,(err)>{if(err){console.log(err)…

03.Kafka 基本使用

Kafka 提供了一系列脚本用于命令行来操作 kafka。 1 Topic 操作 1.1 创建 Topic 创建一个名为 oldersix-topic 的 topic&#xff0c;副本数设置为3&#xff0c;分区数设置为2&#xff1a; bin/kafka-topics.sh \ --create \ --zookeeper 192.168.31.162:2181 \ --replication…

深度学习之基于多模态融合的商品分类方法研究与实现

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 项目简介&#xff1a;深度学习之基于多模态融合的商品分类方法研究与实现 一、项目背景与目标 随着电子商务的快速…

Polyscope,一款简洁的三维可视化工具!

Polyscope是用于三维数据&#xff08;如meshes、point clouds&#xff09;的可视化工具&#xff0c;通过编程或动态GUI完成&#xff1b;支持C和Python编程&#xff1b;追求“一行代码”为数据提供有用的可视界面展示。 下面来简单介绍Polyscope使用。 Polyscope效果 Point Cl…

【深度学习】【Lora训练1】StabelDiffusion,Lora训练过程,秋叶包,Linux,SDXL Lora训练

文章目录 一、环境搭建指南二、个性化安装流程三、启动应用四、打开web五、开始训练 19.27服务器 一、环境搭建指南 打造一个高效且友好的开发环境&#xff1a; 项目源码获取&#xff1a; 通过以下命令轻松克隆项目及所有子模块至您的Linux系统&#xff1a; git clone --recu…

主观赋权法、客观赋权法、组合赋权法、评价指标体系构建

在科研领域&#xff0c;为了对某个研究主题进行深入的探讨和评估&#xff0c;我们往往需要构建一套科学合理的评价体系&#xff0c;并为其中的各项评价指标赋予相应的权重。比如&#xff0c;在评价一项新技术的性能时&#xff0c;我们可能会考虑其创新性、实用性、成本效益等多…

牛客NC242 单词搜索【中等 递归DFS C++/Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/987f2981769048abaf6180ed63266bb2 思路 递归&#xff1a;以word第一个字符为起点&#xff0c;在矩阵中 递归搜索&#xff0c;检查是否存在完整的word路径&#xff0c; 注意恢复现场&#xff0c;又叫回溯&#…

【LAMMPS学习】八、基础知识(5.1)有限尺寸球形和非球形粒子

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

Gin的中间件执行流程与用法

一、背景 我们在使用Gin框架进行Web开发的时候&#xff0c;基本上都会遇到登录拦截的场景。 例如某些接口必须在登录以后才能访问&#xff0c;根据登录用户的信息以及权限&#xff0c;拿到属于自己的数据, 反之&#xff0c;没登录过则直接拒绝访问。 那么我们怎么做到这些登录…

Agent AI 智能体的未来

Agent AI智能体的未来可能会变得更加普遍和智能。以下是一些可能出现的趋势和发展方向&#xff1a; 1、个性化服务: Agent AI智能体可能会变得更加个性化&#xff0c;能够根据用户的偏好和习惯提供定制化的服务和建议。 2、多模态交互: 未来的Agent AI可能会支持更多的多模态交…