准备面试的前端小伙伴们,CSS 作为页面的 "化妆师",一直是面试官重点考察的内容。今天整理了几个高频 CSS 面试题,附带清晰解答,帮你轻松应对面试~
一、CSS 动画有哪些?怎么实现?
面试官问动画,可不是让你列举 "旋转、平移" 这些效果,而是想知道底层实现方式。常见的有三种:
-
transition(过渡动画):给元素加 "状态切换的动画缓冲"。比如鼠标 hover 时,让颜色从红慢慢变蓝,而不是瞬间切换。
用法:
transition: 属性 时长 timing-function;
例:
div { transition: background 0.3s ease; }
鼠标移上去,背景色会用 0.3 秒慢慢变化。 -
transform(变换动画):改变元素的形态或位置,比如缩放、旋转、平移。注意哦,它本身不带动画效果,得配合 transition 或 animation 才有 "动起来" 的感觉。
例:
transform: rotate(30deg) scale(1.2);
元素会旋转 30 度并放大 1.2 倍。 -
animation(自定义动画) :最灵活的动画方式,能定义多关键帧、循环次数等。需要先用
@keyframes
定义动画过程,再用 animation 调用。例:
css
@keyframes move {
0% { left: 0; }
50% { left: 200px; }
100% { left: 0; }
}
.box { animation: move 2s infinite; }
这个盒子会左右来回移动,停不下来~
二、回流和重绘是什么?(重点!面试官超爱问)
这俩是浏览器渲染页面的 "幕后工作",直接影响性能,必须搞懂。
先说说从输入 URL 到页面显示的全过程(简化版):
-
网络层:浏览器发请求、拿数据(HTML/CSS/JS 等)。
-
浏览器层:
-
解析 HTML 生成 DOM 树(页面的结构);
-
解析 CSS 生成 CSSOM 树(元素的样式);
-
合并成渲染树(只包含可见元素的结构 + 样式);
-
回流(重排):计算渲染树中元素的位置、尺寸(比如 div 的宽高、坐标);
-
重绘:根据回流结果,给元素上色、画边框等(只改外观,不改几何属性)。
划重点:
-
回流一定会触发重绘,但重绘不一定触发回流(比如只改背景色,不影响元素大小位置)。
-
哪些操作会触发回流?
-
刷新页面、调整浏览器窗口大小;
-
元素的宽高、margin、padding 变化;
-
增删可见的 DOM 元素(隐藏的不算,因为不在渲染树里)。
-
-
浏览器的小优化 :它会把多次回流操作放进 "队列",攒到一定程度一次性处理,减少性能消耗。但有些属性会强制清空队列,比如
offsetWidth
、scrollTop
,用的时候要注意哦。 -
怎么减少回流?
-
先把要修改的元素 "拿出" 文档流(比如设
display: none
),改完再放回去; -
用
documentFragment
(文档碎片)批量操作 DOM; -
克隆元素,在克隆体上改完再替换原元素。
三、用 CSS 画个三角形?
这是经典 "手写题",面试官可能直接让你现场写。两种思路:
-
边框法(最常用):
给一个宽高为 0 的盒子,利用边框的梯形特性拼出三角形。
css
.triangle {
width: 0;
height: 0;
border: 50px solid transparent;
border-bottom-color: red; /* 朝下的红色三角形 */
}
原理:当宽高为 0 时,四个边框会变成四个三角形,把其他三个设为透明,剩下的就是你要的三角形~
- 裁剪法 :用
clip-path
裁剪出三角形,不过兼容性稍差。
四、响应式布局怎么实现?
简单说,就是让页面在手机、平板、电脑上都好看。实现方式有这些:
-
媒体查询(@media):给不同屏幕尺寸写不同样式。
例:
@media (max-width: 768px) { .box { width: 100%; } }
屏幕小于 768px 时,盒子占满宽度。 -
百分比:元素宽高用百分比,随父容器大小变化。
-
vw/vh:1vw = 屏幕宽度的 1%,1vh = 屏幕高度的 1%,直接跟屏幕尺寸挂钩。
-
rem + 媒体查询:给 html 设不同 font-size,元素用 rem 单位,配合媒体查询在不同屏幕下切换 font-size。
五、怎么画一条 0.5px 的线?
正常情况下,浏览器会把小于 1px 的线渲染成 1px(因为屏幕像素限制)。解决办法:
css
.line {
height: 1px;
transform: scaleY(0.5); /* 垂直方向缩放到0.5倍 */
}
六、如何让文字小于 12px?
现代浏览器大多支持直接写font-size: 10px
,但老浏览器可能强制最小 12px。可以用:
css
.small-text {
font-size: 12px;
zoom: 0.8; /* 整体缩小到80%,文字也会变小 */
}
七、CSS 预处理器了解吗?
就是增强版 CSS,让写样式更高效。比如支持变量、函数、继承,方便维护。常见的有:
-
Sass/SCSS :用
$
定义变量,@mixin
写复用样式; -
Less :语法和 CSS 更像,用
@
定义变量; -
Stylus:不用写分号和大括号,语法更灵活(基于 Node.js)。