前端面试中,CSS 这些高频问题你必须会!

准备面试的前端小伙伴们,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 到页面显示的全过程(简化版):

  1. 网络层:浏览器发请求、拿数据(HTML/CSS/JS 等)。

  2. 浏览器层:

  • 解析 HTML 生成 DOM 树(页面的结构);

  • 解析 CSS 生成 CSSOM 树(元素的样式);

  • 合并成渲染树(只包含可见元素的结构 + 样式);

  • 回流(重排):计算渲染树中元素的位置、尺寸(比如 div 的宽高、坐标);

  • 重绘:根据回流结果,给元素上色、画边框等(只改外观,不改几何属性)。

划重点:

  • 回流一定会触发重绘,但重绘不一定触发回流(比如只改背景色,不影响元素大小位置)。

  • 哪些操作会触发回流?

    • 刷新页面、调整浏览器窗口大小;

    • 元素的宽高、margin、padding 变化;

    • 增删可见的 DOM 元素(隐藏的不算,因为不在渲染树里)。

  • 浏览器的小优化 :它会把多次回流操作放进 "队列",攒到一定程度一次性处理,减少性能消耗。但有些属性会强制清空队列,比如offsetWidthscrollTop,用的时候要注意哦。

  • 怎么减少回流?

  1. 先把要修改的元素 "拿出" 文档流(比如设display: none),改完再放回去;

  2. documentFragment(文档碎片)批量操作 DOM;

  3. 克隆元素,在克隆体上改完再替换原元素。

三、用 CSS 画个三角形?

这是经典 "手写题",面试官可能直接让你现场写。两种思路:

  1. 边框法(最常用)

    给一个宽高为 0 的盒子,利用边框的梯形特性拼出三角形。

css 复制代码
.triangle {
  width: 0;
  height: 0;
  border: 50px solid transparent;
  border-bottom-color: red; /* 朝下的红色三角形 */
}

原理:当宽高为 0 时,四个边框会变成四个三角形,把其他三个设为透明,剩下的就是你要的三角形~

  1. 裁剪法 :用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)。

相关推荐
pany12 分钟前
体验一款编程友好的显示器
前端·后端·程序员
Zuckjet17 分钟前
从零到百万:Notion如何用CRDT征服离线协作的终极挑战?
前端
ikonan22 分钟前
译:Chrome DevTools 实用技巧和窍门清单
前端·javascript
Juchecar22 分钟前
Vue3 v-if、v-show、v-for 详解及示例
前端·vue.js
ccc101826 分钟前
通过学长的分享,我学到了
前端
编辑胜编程26 分钟前
记录MCP开发表单
前端
可爱生存报告26 分钟前
vue3 vite quill-image-resize-module打包报错 Cannot set properties of undefined
前端·vite
__lll_26 分钟前
前端性能优化:Vue + Vite 全链路性能提升与打包体积压缩指南
前端·性能优化
weJee27 分钟前
pnpm原理
前端·前端工程化
小高00728 分钟前
⚡️ Vue 3.5 正式发布:10× 响应式性能、SSR 水合黑科技、告别 .value!
前端·javascript·vue.js