第 4 卷
- 你怎么理解CSS Sprites, 以及它在前端开发中的优势是什么(性能优化)?
✅ 什么是CSS Sprites(精灵图/雪碧图)
CSS Sprites是前端性能优化核心技术,核心逻辑:将页面中多个小图标、小背景图、小装饰图(如导航图标、按钮图标、列表图标)合并成一张单独的大图片(精灵图),然后通过CSS的
background-image(指定精灵图)+ background-position(精准定位到目标小图)+ background-size(可选缩放),实现只加载1张大图,却能显示多个小图的效果。
✅ 核心实现原理(简单示例)
Code block
1/* 精灵图总图片 */ 2.icon {
| 3 | background-image: url("./icons-sprite.png");/*引入合并后的精灵图*/ |
|---|---|
| 4 | background-repeat: no-repeat;/*禁止背景重复*/ |
| 5 | width: 20px;/*目标小图宽度*/ |
| 6 | height: 20px;/*目标小图高度*/ |
| 7 | } |
| 8 | /*定位到「首页图标」的位置*/ |
| 9 | .icon-home { |
| 10 | background-position: 0 0;/*左上角坐标,精准匹配小图位置*/ |
| 11 | } |
| 12 | /*定位到「购物车图标」的位置*/ |
| 13 | .icon-cart { |
| 14 | background-position: -20px 0;/*向左偏移20px,显示第二个小图*/ |
| 15 | } |
✅ CSS Sprites 核心优势(性能优化层面,面试必背)
- 🔥 优势1:大幅减少HTTP请求数量(核心核心!)
- 传统问题:每个小图标对应1个HTTP请求,若页面有20个小图标,就会发起20次HTTP请求;浏览
器对同一域名的并发请求数有限制(Chrome/Firefox默认6-8个),请求数过多会导致:
• 浏览器排队等待请求,页面加载缓慢
• 增加服务器连接开销和压力
• 多次TCP握手/断开,浪费网络资源
- 精灵图解决:所有小图合并为1张,仅需1次HTTP请求即可加载全部小图,直接减少90%+的请求
• 多张小图合并时,会自动去除每张小图的冗余空白区域,减少无效像素
• 图片压缩算法对单张大图的压缩效率远高于多张小图,合并后的精灵图体积 < 所有小图体积之和
• 示例:20张1KB小图总大小20KB,合并后精灵图仅12KB,节省40%体积
- 优势3:提升页面渲染性能,减少浏览器开销
• 减少HTTP请求的同时,也减少了浏览器对图片的解析、解码、渲染次数
• 避免浏览器频繁切换渲染上下文,降低CPU/GPU占用,页面渲染更流畅,尤其适配移动端低性能设
备
- 优势4:便于图片管理,提升开发效率
• 所有小图标集中管理在一张图中,无需单独维护几十个小图文件
• 新增/修改图标时,仅需在精灵图中调整,无需逐个修改图片路径
• 统一图标尺寸、风格,避免图标样式混乱
- 优势5:减少图片缓存开销
• 单张精灵图仅需缓存1次,后续页面访问直接从本地缓存读取,无需重新下载
• 多张小图需缓存多次,缓存管理复杂,易出现缓存失效问题
✅ CSS Sprites 使用注意事项(面试拓展)
- ❗ 仅适用于小图(图标、小背景、小装饰),禁止用于大图(轮播图、详情图、海报图),否则
精灵图体积过大,反而影响加载
- ❗ 合理规划精灵图布局:按行/列整齐排列,预留适当空白,避免小图重叠,便于后期新增图标
- ❗ 定位精准度: background-position 坐标需精准,可借助工具自动生成(如Sprite Cow、
在线精灵图生成工具)
- ❗ 适配Retina屏:需制作@2x/@3x精灵图,配合 background-size 缩放,避免图标模糊
- ❗ 维护成本:若需大幅修改图标,需重新生成精灵图,建议版本化管理精灵图文件
✅ 适用场景 & 不适用场景
- ✅ 适用场景(必用)
• 导航栏图标、按钮图标、列表图标、分页图标
• 小尺寸背景图、装饰图、状态图(如√/×/loading)
• 移动端/PC端的高频小图标场景(电商、后台管理系统)
• 大尺寸图片:轮播图、商品详情图、海报图、banner图
• 动态变化的图片:用户头像、上传图片、实时更新的图片
• 数量极少的小图(如仅1-2个图标,无优化必要)
✅ 面试补充:现代替代方案
CSS Sprites是传统性能优化方案,现代开发中可结合以下方案使用:
• Iconfont 字体图标:替代简单图标,无图片体积,支持任意缩放/变色,HTTP请求更少
• SVG图标:矢量图,无失真,支持代码内嵌,无需图片文件
• Base64编码:超小图标转Base64嵌入CSS,无HTTP请求,适合1-2个超小图标
6. 解释物理像素、逻辑像素、像素密度的区别,说明移动端为何需要
@2x/@3x图片?
✅ 一、物理像素、逻辑像素、像素密度核心区别(面试必背定义)
- 1. 物理像素(设备像素 / Device Pixel)
- 定义:屏幕硬件上最小的物理显示单元,是屏幕出厂时固定不变的硬件属性,是真实存在的发光
点。
- 特点:
• 决定屏幕的实际分辨率(如iPhone 15物理像素:2556×1179)
• 数值越大,屏幕能显示的细节越多,硬件成本越高
• 开发中无法直接控制物理像素,由设备厂商决定
- 示例:
• 普通电脑屏幕:1920×1080 物理像素
• 华为Mate60:2700×1224 物理像素
• iPad Pro:2732×2048 物理像素
- 2. 逻辑像素(CSS像素 / Logical Pixel)
- 定义:前端开发中编写代码使用的像素单位(如 width: 100px、 font-size: 16px 中的
px),是抽象的、独立于设备的像素单位,用于描述页面元素的尺寸。
- 特点:
• 是前端开发的核心单位,开发者直接操作的像素
• 逻辑像素的大小可动态调整(如浏览器缩放、移动端viewport设置)
• 决定页面元素的视觉尺寸,与设备无关
全站分卷索引 · 8 卷
- 1第 1 卷
- HTML-CSS 前端面试八股文(核心高频题+标准
- 答案)
- ✅ 核心语义化标签(按页面结构分类)
- • <header>:页面/区块头部,包含标题、导航、搜索框等
- • <nav>:导航栏区域,主导航/侧边导航专用
- • <main>:页面核心内容,唯一存在,包裹主要业务内容
- • <section>:内容区块,用于文章章节、产品模块、功能分区
- • <article>:独立内容单元,如文章、评论、商品卡片、新闻条目
- • <aside>:侧边栏,包含相关推荐、作者信息、广告、附属内容
- • <footer>:页面/区块底部,包含版权、联系方式、备案信息
- • <h1>-<h6>:标题层级,h1唯一(页面主标题,权重最高),h2-h6依次降级
- • <p>:纯文本段落,区分普通文本块
- 2第 2 卷
- ✅ 先明确:默认script标签的缺陷(无defer/async)
- ✅ defer 属性的核心作用(按序加载,DOM解析后执行)
- • 依赖DOM元素的JS文件(如操作页面节点、渲染页面内容)
- • 需要按顺序执行的JS文件(如jQuery库 → 依赖jQuery的业务JS)
- • 普通业务逻辑JS、页面初始化JS
- ✅ async 属性的核心作用(并行加载,下载完立即执行)
- • 不依赖DOM、不依赖其他JS的独立脚本
- • 统计埋点JS、广告脚本、第三方工具库(如百度统计、友盟统计)
- • 无需按顺序执行的独立功能JS
- ✅ defer vs async 核心区别总结(面试必背)
- ✅ 面试补充考点
- • defer / async 仅对**外部脚本(src引入)**生效,内联脚本( <script>代码
- 3第 3 卷
- • ::selection:自定义用户选中文字的样式(背景色/文字色)
- • ::first-line / ::first-letter:选中文本首行/首字⺟,做特殊样式
- ✅ 二、布局方式革新(解决传统浮动布局痛点)
- • 核心:给父元素设置 display: flex,子元素自动成为弹性项,支持居中、均分、自适应、换
- • 核心属性: justify-content(主轴对齐)、 align-items(侧轴对齐)、 flex-
- • 优势:移动端布局首选,代码极简,适配性极强,无需计算宽度,解决垂直居中难题
- • 场景:导航栏、列表布局、卡片均分、表单对齐、页面居中
- • 核心:给父元素设置 display: grid,将容器划分为行和列的网格,精准控制子元素的行/列占
- • 核心属性: grid-template-columns(列宽)、 grid-template-rows(行高)、
- • 优势:复杂布局首选,支持跨行/跨列,精准定位,替代传统表格布局+浮动布局
- • 场景:后台管理系统、大屏可视化、商品详情页、不规则布局
- • 核心属性: column-count(列数)、 column-gap(列间距)、 column-rule(列分隔
- 4第 4 卷
- ✅ 什么是CSS Sprites(精灵图/雪碧图)
- ✅ 核心实现原理(简单示例)
- ✅ CSS Sprites 核心优势(性能优化层面,面试必背)
- • 浏览器排队等待请求,页面加载缓慢
- • 增加服务器连接开销和压力
- • 多次TCP握手/断开,浪费网络资源
- • 多张小图合并时,会自动去除每张小图的冗余空白区域,减少无效像素
- • 图片压缩算法对单张大图的压缩效率远高于多张小图,合并后的精灵图体积 < 所有小图体积之和
- • 示例:20张1KB小图总大小20KB,合并后精灵图仅12KB,节省40%体积
- • 减少HTTP请求的同时,也减少了浏览器对图片的解析、解码、渲染次数
- • 避免浏览器频繁切换渲染上下文,降低CPU/GPU占用,页面渲染更流畅,尤其适配移动端低性能设
- • 所有小图标集中管理在一张图中,无需单独维护几十个小图文件
- 5第 5 卷
- • 给div设置 width: 375px,表示div的逻辑宽度为375CSS像素
- • 无论在手机/平板/PC上, 1px 逻辑像素的视觉大小基本一致
- • 像素密度越高,屏幕显示越清晰细腻,无颗粒感
- • 像素密度与设备尺寸、物理像素相关:同尺寸屏幕,物理像素越多,PPI越高
- • 普通电脑屏幕:72PPI / 96PPI(低密屏)
- • 手机高清屏:326PPI+(Retina屏,如iPhone 15:460PPI)
- • 4K显示器:210PPI+(高密屏)
- ✅ 二、三者的核心关联(关键:设备像素比DPR)
- • iPhone 15:逻辑像素393×172,物理像素2556×1179 → DPR=6.5(≈3倍,@3x)
- • 普通安卓机:逻辑像素375×667,物理像素750×1334 → DPR=2(@2x)
- • 电脑屏幕:逻辑像素1920×1080,物理像素1920×1080 → DPR=1(@1x)
- ✅ 三、移动端开发为何需要@2x/@3x图片?(核心问题,面试必讲)
- 6第 6 卷
- 7第 7 卷
- 8第 8 卷