第 7 卷
✅ 面试总结(必背3个核心方案)
- ✅ transform: scale():首选,兼容性最好,无副作用,支持所有场景(水平/垂直/边框)
- ✅ box-shadow:极简,代码一行,适合简单线条,移动端/PC端通用
- ✅ linear-gradient:精准无缩放,适合复杂渐变/透明线条场景
- 什么是1px问题,以及如何在前端开发中解决它?
✅ 一、什么是移动端1px问题(面试必背定义+根源)
- 核心定义
1px问题是移动端高清屏(DPR≥2)特有的兼容性问题:前端开发中设置的 1px 是逻辑像素(CSS像素),但在DPR=2/3的高清屏上,1个逻辑像素需要4/9个物理像素来显示,浏览器会将1px逻辑像素的
边框拉伸为2/3px物理像素,导致视觉上的线条比预期的1px更粗(看起来像2px),边框变模糊、不精致,破坏页面设计感,这就是移动端经典的「1px问题」。
- 问题根源(3个核心)
- ✅ 逻辑像素 vs 物理像素:DPR=2时, 1px CSS逻辑像素 = 2px 物理像素,浏览器强制用2px
物理像素渲染1px逻辑像素,线条变粗
- ✅ 浏览器渲染机制:高清屏中,浏览器对1px逻辑像素的边框采用插值算法渲染,导致边框模糊、
粗细不均
- ✅ 设备像素比差异:移动端设备DPR覆盖2/3(主流),无统一标准,加剧了1px问题的兼容性差
异
- 直观举例
• 普通屏(DPR=1):1px CSS → 1px 物理 → 显示正常1px线条
• 高清屏(DPR=2):1px CSS → 2px 物理 → 显示粗线条(视觉2px)
• 超高清屏(DPR=3):1px CSS → 3px 物理 → 显示更粗线条(视觉3px)
✅ 二、1px问题的核心解决方案(按推荐优先级+实战使用率排序,面试优先讲前
4种)
(DPR=2)/ scale(1/3)(DPR=3)将边框缩放至对应比例,视觉上还原真实1px效果,支持单边框/全边框/圆角边框,兼容所有移动端浏览器+Chrome/Firefox,是目前最主流的解决方案。
- 方案1-1:单边框(如下边框,最常用)
Code block
1/* 底部1px真实线条(DPR=2) */ 2.border-bottom-1px {
3position: relative;
4border: none; /* 隐藏默认边框 */ 5}
6.border-bottom-1px::after { 7content: "";
8position: absolute;
9bottom: 0;
10left: 0;
11width: 100%;
12height: 1px; /* 基础1px线条 */
| 13 | background-color: #e5e5e5;/*边框颜色*/ |
|---|---|
| 14 | transform: scaleY(0.5);/*垂直缩放0.5→真实1px */ |
| 15 | transform-origin: bottom center;/*缩放原点底部,避免偏移*/ |
| 16 | } |
- 方案1-2:全边框(带圆角,实战高频,如卡片/按钮)
Code block
| 1 | /*全边框1px真实效果(兼容DPR=2/3,带圆角)*/ |
|---|---|
| 2 | .border-1px { |
| 3 | position: relative; |
| 4 | width: 200px; |
| 5 | height: 100px; |
| 6 | border: none; |
| 7 | border-radius: 8px;/*元素圆角*/ |
| 8 | } |
| 9 | .border-1px::after { |
| 10 | content: ""; |
| 11 | position: absolute; |
| 12 | top: 0; |
| 13 | left: 0; |
| 14 | width: 200%;/*宽度放大2倍*/ |
20box-sizing: border-box;
21pointer-events: none; /* 避免遮罩层拦截点击事件 */ 22}
- 方案1-3:适配DPR=2/3(自动判断,极致兼容)
Code block
1/* 根据DPR自动缩放,适配所有高清屏 */ 2.border-1px {
3position: relative;
4border: none;
5} 6.border-1px::after {
7content: "";
8position: absolute;
9top: 0;
10left: 0;
11width: 100%;
12height: 100%;
13border: 1px solid #e5e5e5;
14box-sizing: border-box;
15} 16/* DPR=2设备 */
| 17 | @media (-webkit-min-device-pixel-ratio: 2), (min-device-pixel-ratio: 2) { |
|---|---|
| 18 | .border-1px::after { |
| 19 | width: 200%; |
| 20 | height: 200%; |
| 21 | transform: scale(0.5); |
| 22 | transform-origin: top left; |
| 23 | } |
| 24 | } |
| 25 | /* DPR=3设备*/ |
| 26 | @media (-webkit-min-device-pixel-ratio: 3), (min-device-pixel-ratio: 3) { |
| 27 | .border-1px::after { |
| 28 | width: 300%; |
| 29 | height: 300%; |
| 30 | transform: scale(1/3); |
| 31 | transform-origin: top left; |
| 32 | } |
| 33 | } |
全站分卷索引 · 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 卷