前端面试中,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)。

相关推荐
假装我不帅1 分钟前
jquery-validation使用
前端·javascript·jquery
怕浪猫7 分钟前
React从入门到出门第六章 事件代理机制与原生事件协同
前端·javascript·react.js
天府之绝10 分钟前
uniapp 中使用uview表单验证时,自定义扩展的表单,在改变时无法触发表单验证处理;
开发语言·前端·javascript·vue.js·uni-app
be or not to be12 分钟前
Html-CSS动画
前端·css·html
初恋叫萱萱17 分钟前
技术基石与职场进阶:构建从Web后端到高性能架构的完整知识图谱
前端·架构·知识图谱
木木木一21 分钟前
Rust学习记录--C9 错误处理
前端·学习·rust
局外人LZ22 分钟前
libsodium.js:web端与 Node.js 的现代加密工具集,构建前端安全加密体系
前端·javascript·node.js
xkxnq27 分钟前
第二阶段:Vue 组件化开发(第 20天)
前端·javascript·vue.js
「、皓子~31 分钟前
AI 创作系列(34)海狸IM桌面版 v1.1 正式发布:Vite + Electron 性能优化与体验升级
前端·人工智能·electron·开源·开源软件·im
鹏程十八少31 分钟前
1.Android 3分钟跑通腾讯 Shadow 插件化官方Demo:零反射、手把手实战(基于源码依赖)
android·前端·面试