2025前端高频面试题--CSS篇

1.css布局模型

1.文档流(Normal Flow)

  • 分为块级元素(div,p)独占一行【块级布局】,行内元素(button, input, label, select, textarea, a, img)在同一行【内联布局】
  • 默认布局是元素按照HTML顺序从左到右,从上到下
  • 可以通过display属性(如block 块级inline 行内inline-block 行内块级)调整元素的行为
  • 了解更多display三种常用属性值

注意: 行内元素宽高无效,是由内容本身高度撑起,也就不会自动换行;块级可以设置宽高,特别相比行内元素,设置垂直高度对margin和padding有效,也自动换行,按从上到下排列

2.浮动(float)

  • 通过float属性(如leftright)使元素脱离文档流,并向左或向右浮动
  • 清除浮动(如:overflow:hidden)

3.定位(position) 通过position属性控制元素的定位方式:

  • static:默认值,元素在文档流中。
  • relative:相对定位,元素相对于自身位置偏移。
  • absolute:绝对定位,元素相对于最近的已定位祖先元素偏移。
  • fixed:固定定位,元素相对于视口偏移。
  • sticky:粘性定位,元素在滚动时固定在特定位置
  • 通过display: flex将容器设置为弹性盒子布局。

4. Flexbox(弹性盒子布局)

  • 适用于一维布局(行或列),可以轻松实现元素的对齐、分布和排序。

  • 常用属性:

    • justify-content:主轴对齐方式。
    • align-items:交叉轴对齐方式。
    • flex-direction:主轴方向(行或列)。
    • flex-growflex-shrinkflex-basis:控制子元素的伸缩行为。
    • flex详解

5. Grid(网格布局)

  • 通过display: grid将容器设置为网格布局。

  • 适用于二维布局(行和列),可以创建复杂的网格结构。

  • 常用属性:

    • grid-template-columnsgrid-template-rows:定义网格的列和行。
    • grid-gap:设置网格间距。
    • grid-area:定义网格区域。
  • 适合构建复杂的页面布局

  • grid布局详见

了解完上面内容,给个面试官满意的回答吧:

CSS布局模型是控制网页元素排列和定位的核心机制。常见的布局模型包括文档流、浮动、定位、Flexbox和Grid。文档流是默认的布局方式,元素按照HTML顺序排列;浮动可以实现文字环绕效果;定位用于精确控制元素位置;Flexbox适合一维布局,如导航栏;Grid适合二维布局,如复杂的页面结构。在实际开发中,我会根据需求选择合适的布局模型,比如用Flexbox实现居中布局,用Grid构建复杂的网格布局。

2.盒模型理解

css3盒模型有两:标准盒子模型、IE盒子模型

盒模型都是由四个部分组成的,分别是margin、border、padding和content。

标准盒模型和IE盒模型的区别在于设置width和height时,所对应的范围不同:

  • 标准盒模型的width和height属性的范围只包含了content,
  • IE盒模型的width和height属性的范围包含了border、padding和content。

可以通过修改元素的box-sizing属性来改变元素的盒模型:

  • box-sizeing: content-box表示标准盒模型(默认值)
  • box-sizeing: border-box表示IE盒模型(怪异盒模型)

3.BFC规则是什么

块级格式化上下文,作用是盒子(空间)内的子元素不会影响外面布局。

1.BFC是一个块级元素,会垂直方向一个接着一个排列;

2.在页面是一个隔离的独立容器,内部不会影响到外部标签

3.垂直方向距离是margin决定,同一个BFC的相邻外边距会发生重叠

3.计算BFC高度,浮动元素也是参与

怎么触发BFC?

  • 浮动元素:float 除了none其他值

  • display:inline-block , flex ,(表格单元)table-cells,(表格标题)table-captions), grid,inline-grid等

  • 块级元素 overflow: 除visable 其他值(hidden,auto,scroll)

  • 绝对定位 position :absolute 或 fixed

  • 根元素 html

BFC的作用是?

  1. 解决子元素浮动造成父元素高度坍塌问题 将父元素触发 BFC
  2. 相领子元素使用 margin 时边距重叠问题 可以给 2 个子元素各套一个触发 BFC 的父元素 等等

详细BFC可以看看# 今天来尝尝KFC,哦是弄清楚BFC😂

4.两栏布局,怎么设置左边宽度固定,右边自适应

  • 1.inline-block+calc

左边定宽,右边通过calc计算值(100%-宽度left)

css 复制代码
.container {
  width: 100%;
}

.left {
  width: 120px;  /* 左边固定宽度,您可以根据实际需求修改此值 */
  display: inline-block;
}

.right {
  width: calc(100% - 120px);  /* 右边根据左边宽度自适应 */
  display: inline-block;
}

如果使用float替换inline-block 行内块级元素

换成float+calc

使用 float 使 2 个盒子处于同一行,左边固定宽度,右边根据计算来确定宽度实现自适应

css 复制代码
.container::after {
  display: block;
  clear: both;
  content: "";
}

.left,
.right {
  float: left;
  box-sizing: border-box;
}

.right {
  width: calc(100% - 120px);
}
  • 2.float+BFC

使用 float 和 overflow:auto 将元素在同一行,左边设置固定宽度,右边由于 BFC 会自适应

css 复制代码
.container::after {
  display: block; 
  clear: both; /*父级清除浮动*/
  content: ""; /*插入空内容*/
}

.left {
  float: left;
}

.right {
  margin-left: 0;
  overflow: auto;
}
  • 3.grid布局

子元素不需要设置宽度,父元素设置即可

css 复制代码
.grid {
  display: grid;
  grid-template-columns: 120px 100%; 
  height: 200px;
}
  • 4.子元素设置宽高,右边使用margin-left
css 复制代码
.left {
  position: absolute;
  box-sizing: border-box;
}

.right {
  margin-left: 120px;
}
  • 5.float+margin

使用 float 将 2 个元素在同一行,左边设置宽度,右边通过 margin-left 实现隔离 2 者重叠

css 复制代码
.container::after {
  display: block;
  clear: both;
  content: "";
}

.left {
  float: left;
  box-sizing: border-box;
}

.right {
  margin-left: 120px;
}

5.什么是重排和重绘?

  • 重排(Reflow):当dom变化影响元素几何(位置或是尺寸),需要重新计算生成布局。比如添加或删除可见的DOM元素、改变元素尺寸(边距、填充、边框宽度、高度和宽度)、内容变化、字体大小变化等
  • 重绘(Repaint):仅仅是外观变化,不影响位置或大小,如颜色、背景色、透明度等,这样的操作只会引起重绘

重绘不一定重排,重排一定触发重绘。

重排消耗的性能比重绘大,所以我们尽量选择代价小一点的。

PS.未完待续,文中答案有误也欢迎评论指出!

相关推荐
xiaogg3678几秒前
网站首页菜单两种布局vue+elementui顶部和左侧栏导航
前端·vue.js·elementui
神膘护体小月半1 分钟前
bug 记录 - 使用 el-dialog 的 before-close 的坑
前端·javascript·bug
&白帝&5 分钟前
使用vite-plugin-html在 HTML 文件中动态注入数据,如元数据、环境变量、标题
前端·html·dreamweaver
SouthernWind6 分钟前
RAGFlow构建知识库和联网搜索对话平台:从零到一的完整开发指南
前端·javascript
我是小七呦11 分钟前
😧纳尼?前端也能做这么复杂的事情了?
前端·面试·ai编程
陈_杨15 分钟前
鸿蒙5开发宝藏案例分享---性能优化案例解析
前端
前端付豪17 分钟前
揭秘网易统一日志采集与故障定位平台揭秘:如何在亿级请求中1分钟定位线上异常
前端·后端·架构
香蕉可乐荷包蛋28 分钟前
vue对axios的封装和使用
前端·javascript·vue.js·axios
娃哈哈哈哈呀32 分钟前
html - <mark>标签
前端·html
QQ_hoverer32 分钟前
前端使用 preview 插件预览docx文件
前端·javascript·layui·jquery