面试常考的 CSS 知识点,看完这篇心里有底了

87 阅读5分钟

CSS 作为前端三巨头之一,在面试中出现的频率极高。很多时候不是我们不会写样式,而是面对面试官的提问,总感觉说不到点子上。今天整理了几个高频 CSS 面试题,结合实际代码例子聊聊怎么回答更得体。

CSS 盒子模型:布局的基石

面试官大概率会先问:"说说你对 CSS 盒子模型的理解?"

其实浏览器渲染元素时,都会把它变成一个 "盒子"。这个盒子由四部分组成:内容区(content)、内边距(padding)、边框(border)和外边距(margin)。

关键要区分两种盒子模型:

  • 标准盒模型:设置的widthheight只包含内容区,padding 和 border 会让盒子实际尺寸变大。就像买的手机,标称 6.7 英寸指的是屏幕,加了手机壳(border)就更宽了。

  • IE 怪异盒模型widthheight包含内容、padding 和 border。相当于买手机时直接告诉你 "连壳带膜的总尺寸"。

通过box-sizing属性可以切换:


/* 标准盒模型(默认) */
box-sizing: content-box;
/* IE怪异盒模型(推荐) */
box-sizing: border-box;

实际开发中强烈推荐全局使用border-box,看这个例子:


.box{
  width: 200px;
  padding: 20px;
  border: 2px solid red;
  box-sizing: border-box; /* 总宽度始终是200px */
}

再也不用为了算总宽度疯狂心算了!

选择器与优先级:样式的 "军令状"

"CSS 有哪些选择器?优先级怎么算?" 这题几乎必问。

常见选择器分类:

  1. 基础选择器:id(#box)、类(.box)、标签(div)、通配符(*

  2. 组合选择器:后代(div .box)、子代(div > .box)、相邻(div + .box)、群组(div, .box

  3. 特殊选择器:属性([type="text"])、伪类(:hover)、伪元素(::after

优先级是重点,记住这个顺序:

!important > id 选择器 > 类 / 伪类 / 属性选择器 > 标签选择器

(后代、子代、相邻这些组合选择器的优先级由组成它的基础选择器决定)

举个例子:

/* 优先级:id选择器 */
#box { color: red; }
/* 优先级:类选择器 < id选择器 */
.box { color: blue; }
/* 加了!important优先级最高 */
.box { color: green !important; }

单位大比拼:em/px/rem/vw/vh

"这些单位有什么区别?什么时候用?"

简单分类:

  • 绝对单位:px(像素),固定大小,不随其他因素变化

  • 相对单位

    • em:相对于父元素字体大小(父元素 16px 时,1em=16px)

    • rem:相对于根元素(html)字体大小,方便整体调整

    • vw:视口宽度的 1%(100vw = 满屏宽)

    • vh:视口高度的 1%(100vh = 满屏高)

响应式布局推荐用相对单位,比如做移动端适配时:

/* 3.html中的响应式例子 */
.box{
  width: 25vw; /* 占视口宽度的25% */
}
@media screen and (max-width: 1000px) {
  .box{
    width: calc(100vw/3); /* 屏幕变小时每行显示3个 */
  }
}

隐藏元素的 N 种方式,区别在哪?

这个问题能看出你对 CSS 细节的掌握程度。

常见方法及区别:

  1. display: none:元素彻底消失,不占位置,不响应事件

  2. visibility: hidden:元素看不见,但位置保留,不响应事件

  3. opacity: 0:完全透明,位置保留,能响应事件(点一下试试?)

  4. width: 0; height: 0; overflow: hidden:元素尺寸为 0,不占位置

  5. clip-path: polygon(0 0, 0 0, 0 0, 0 0):裁剪成看不见的形状,占位置

/* 4.html中的例子 */
.box {
  /* 五种隐藏方式选一种试试 */
  /* display: none; */
  /* visibility: hidden; */
  /* opacity: 0; */
  /* width: 0; height: 0; overflow: hidden; */
  /* clip-path: polygon(0 0, 0 0, 0 0, 0 0); */
}

BFC:解决布局 "疑难杂症" 的利器

"BFC 是什么?有什么用?" 这个问题能区分初级和中级前端。

BFC(块级格式化上下文)是一个独立的渲染区域,内部元素的布局不受外部影响。

特性

  • 内部元素垂直排列

  • 计算 BFC 高度时会包含浮动元素(清除浮动)

  • 防止 margin 重叠(父子 / 兄弟元素)

创建 BFC 的方式

  • overflow: auto/hidden(最常用)

  • float: left/right

  • position: absolute/fixed

  • display: flex/inline-block

实际用途

  1. 清除浮动(解决父元素高度塌陷):
.parent{
  overflow: hidden; /* 触发BFC */
}
.child{
  float: left;
}
  1. 防止 margin 重叠:给父元素加overflow: auto,避免子元素 margin"穿出" 父元素。

元素居中:面试必考的 "送分题"

"怎么让元素水平垂直居中?" 至少说出 3 种方法才算合格。

  1. Flex 布局(最推荐):
.parent{
  display: flex;
  justify-content: center; /* 水平居中 */
  align-items: center; /* 垂直居中 */
}
  1. 定位 + transform(不需要知道元素宽高):
.child{
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
  1. Grid 布局(简单直接):
.parent{
  display: grid;
  place-items: center;
}
  1. Table 布局(兼容性好):
.parent{
  display: table-cell;
  text-align: center;
  vertical-align: middle;
}

多栏布局:两栏与三栏的实现

布局题常考,需要掌握多种方案。

两栏布局(左固定右自适应)

方法 1:浮动 + margin

/* 7.1.html示例 */
.left{
  float: left;
  width: 200px;
}
.right{
  margin-left: 200px; /* 避开左侧固定区域 */
}

方法 2:inline-block+calc

/* 7.html示例 */
.container{
  font-size: 0; /* 消除间隙 */
}
.left{
  display: inline-block;
  width: 200px;
}
.right{
  display: inline-block;
  width: calc(100% - 200px); /* 计算剩余宽度 */
}

三栏布局(两边固定中间自适应)

现代方案:Flex 布局(支持内容优先加载)

/* 7.2.html示例 */
.container{
  display: flex;
}
.left, .right{
  width: 200px;
}
.middle{
  flex: 1; /* 占满剩余空间 */
}
.left{
  order: -1; /* 让左边栏显示在前面 */
}

Grid 布局更简洁:

/* 7.3.html示例 */
.container{
  display: grid;
  grid-template-columns: 200px 1fr 200px; /* 左200,中自适应,右200 */
}

经典方案:圣杯布局和双飞翼布局(用浮动 + 负 margin 实现,了解原理即可)

总结

CSS 面试题看似零散,其实都围绕着布局、盒模型、样式优先级这些核心概念。回答时不要只说定义,结合实际使用场景和代码示例,会让面试官觉得你不仅懂理论,还能解决实际问题。