当前位置: 首页 > news >正文

CSS 布局与可视化高频:居中、BFC、Flex 与 Grid

系列文章目录

《JavaScript 基础与进阶笔记》(前期偏基础巩固与常见面试点,后续进入闭包、异步、工程化等进阶主题)

  • 第 01 篇:数据类型与类型判断
  • 第 02 篇:变量声明与作用域
  • 第 03 篇:闭包与高阶函数
  • 第 04 篇:函数工厂
  • 第 05 篇:this 指向与绑定
  • 第 06 篇:原型与原型链
  • 第 07 篇:类与继承
  • 第 08 篇:JS 执行机制与异步队列
  • 第 09 篇:数组常用方法
  • 第 10 篇:字符串算法
  • 第 11 篇:常见手写题合集(上)
  • 第 12 篇:常见手写题合集(下)
  • 第 13 篇:Promise 与 async/await
  • 第 14 篇:数据结构基础
  • 第 15 篇:垃圾回收与内存
  • 第 16 篇:DOM 基础全面解析
  • 第 17 篇:DOM 性能与渲染
  • 第 18 篇:DOM 交互补充
  • 第 19 篇:DOM 实战案例
  • 第 20 篇:CSS 布局与可视化高频(本文)

文章目录

  • 系列文章目录
  • 前言
  • 一、居中方案
    • 1.1 方案对照
    • 1.2 常用代码
  • 二、BFC(块级格式化上下文)
    • 2.1 是什么
    • 2.2 如何触发
  • 三、Flex 布局(一维)
    • 3.1 主轴与交叉轴
    • 3.2 `flex` 简写(面试高频)
  • 四、Grid 布局(二维)
    • 4.1 与 Flex 分工
    • 4.2 `grid-template-areas`(页面布局)
    • 4.3 响应式网格
  • 五、布局选型口诀
  • 六、易混淆点归纳
  • 七、思考与练习
  • 总结

前言

DOM 阶段结束后,页面「长什么样、怎么排」交给CSS 布局。面试与日常开发最高频的几块:居中BFCFlexGrid。本篇按「居中 → BFC → Flex/Grid → 选型」展开,每个都给出最小 CSS 与易混点;移动端viewportrem等放在下一篇。


一、居中方案

1.1 方案对照

方案适用要点
Flex容器内水平+垂直justify-content+align-items: center
Grid同上,写法更短place-items: center
绝对定位 + transform已知/未知尺寸,脱离文档流top/left: 50%+translate(-50%, -50%)
绝对定位 + margin auto子元素有明确宽高inset: 0; margin: auto
margin: 0 auto块级水平居中固定 width
text-align: center行内/文本水平不能垂直居中块级

1.2 常用代码

/* Flex — 最常用 */.flex-center{display:flex;justify-content:center;align-items:center;min-height:200px;}/* Grid — 最简 */.grid-center{display:grid;place-items:center;min-height:200px;}/* 绝对定位 + transform — 弹窗常用 */.modal-wrap{position:relative;min-height:100vh;}.modal{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);}/* margin: 0 auto — 仅水平 */.box{width:400px;margin:0 auto;}

注意translate-50%相对自身宽高;place-items对齐的是grid 单元格内的项,不是justify-content那套 flex 主轴语义。


二、BFC(块级格式化上下文)

2.1 是什么

BFC是一块独立布局区域:内部块级盒垂直排列;与外部布局隔离,常用于解决:

  1. 清除浮动(父元素高度包含浮动子元素)
  2. 阻止 margin 折叠(把其中一个盒子包进新 BFC)
  3. 自适应两栏(左 float + 右 BFC,右侧不与 float 重叠)

2.2 如何触发

方式说明
display: flow-root推荐,专为创建 BFC,无副作用
overflow: hidden/auto常用,但可能裁剪溢出
float/ 绝对定位元素自身成 BFC
display: flex/grid容器成 BFC
/* 清除浮动 — 高度塌陷 */.clearfix{display:flow-root;}/* 防止与外部 margin 合并 */.section{display:flow-root;}.section .box{margin-top:24px;}/* 两栏:左浮动 + 右 BFC(现代可用 Flex/Grid 替代) */.layout{display:flow-root;}.layout .aside{float:left;width:200px;}.layout .main{overflow:hidden;/* 触发 BFC,不与 float 重叠 */}

面试口述:margin 折叠发生在同一 BFC内相邻块级盒;不同 BFC之间不合并。父元素包不住浮动,是因为没形成 BFC,flow-root让父高度计入浮动子元素。


三、Flex 布局(一维)

3.1 主轴与交叉轴

  • flex-direction: row(默认):主轴水平,交叉轴垂直。
  • justify-content:主轴对齐(flex-start/center/space-between…)。
  • align-items:交叉轴对齐。
  • flex-wrap: wrap:换行。

3.2flex简写(面试高频)

flex: grow shrink basis

写法含义
flex: 1通常等价1 1 0%,平分剩余空间,basis 为 0
flex: auto1 1 auto,受内容尺寸影响
flex: none0 0 auto,不伸缩
flex: 0 0 200px固定 200px 宽/高
/* 三栏:左右固定,中间自适应 */.page{display:flex;gap:16px;min-height:100vh;}.sidebar{flex:0 0 200px;}.main{flex:1;}/* 自适应卡片行 */.cards{display:flex;flex-wrap:wrap;gap:12px;}.card{flex:1 1 280px;}

易混flex: 1不是1 1 auto;要等分列且忽略内容初始宽,basis 才是0%flex-shrink: 0可防止被压扁。


四、Grid 布局(二维)

4.1 与 Flex 分工

FlexGrid
维度一维(一行或一列)二维(行+列)
场景导航、工具栏、等分条页面骨架、仪表盘、卡片网格

4.2grid-template-areas(页面布局)

.app{display:grid;grid-template-columns:240px 1fr;grid-template-rows:64px 1fr 48px;grid-template-areas:"header header""sidebar main""footer footer";gap:8px;min-height:100vh;}.header{grid-area:header;}.sidebar{grid-area:sidebar;}.main{grid-area:main;}.footer{grid-area:footer;}

4.3 响应式网格

.auto-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;}

auto-fit+minmax(280px, 1fr):列宽至少 280px,空间够则自动增减列数,常用于商品卡片、相册

fr:按比例分配剩余轨道空间;1fr 1fr两列等分(内容极大时会被minmax撑开)。


五、布局选型口诀

需求优先
单行导航、左右分布Flex+justify-content: space-between
垂直水平居中FlexGridplace-items
整页 Header/Sidebar/MainGrid+template-areas
响应式卡片墙Gridauto-fit/minmax或 Flexwrap
清除浮动、margin 合并BFCflow-root
两栏左固定右自适应Flex/Grid(现代);传统float + BFC

六、易混淆点归纳

  1. margin: 0 auto不能垂直居中;要有width
  2. BFC解决的是布局隔离,不是「万能清除浮动 class」的玄学。
  3. flex: 1basis 常为 0%,与flex: auto不同。
  4. Grid 管二维,Flex 管一维;可 Grid 分大块,块内再 Flex。
  5. gap替代子项margin更干净,Flex/Grid 均支持。
  6. place-items(Grid)≠place-content;居中子项用place-items: center

七、思考与练习

1.块级元素水平居中,最少需要什么 CSS?

解析:固定width+margin: 0 auto;或父级Flex/Grid居中。

2.两个相邻divmargin-top/bottom都是 20px,间距是多少?

解析:20pxmargin 折叠),同一 BFC 内垂直相邻块级盒取较大值。

3.flex: 1flex: 1 1 auto在子项内容很宽时有何差别?

解析:flex: 1(basis 0)更易均分剩余空间;autobasis会先按内容宽度再伸缩。

4.实现「侧边栏 240px + 主区域占满剩余」,现代首选?

解析:Flexsidebar: 0 0 240px; main: flex:1)或Grid240px 1fr)。

5.repeat(auto-fit, minmax(250px, 1fr))做什么?

解析:列最小 250px,容器变宽时自动增加列数,卡片网格响应式。


总结

  • 居中:业务优先Flex/Grid;弹窗可用absolute + transform
  • BFCflow-root清浮动、防 margin 合并、与 float 分栏。
  • Flex:一维;flex: 1basis是面试常问。
  • Grid:二维;template-areas搭页面;auto-fit/minmax做响应式网格。

下一篇讲移动端与 viewportrem/vwsafe-area、1px 与高清图等。

http://www.jsqmd.com/news/897133/

相关文章:

  • 2026.5.27中山黄金回收商家榜单出炉 正规机构实测优选指南 - 资讯纵览
  • Vidupe:如何利用智能视频指纹技术快速清理重复视频文件
  • MagiskOnWSALocal 终极指南:3步让Windows安卓子系统拥有完整Root权限
  • 终极指南:如何高效打包Windows全平台虚拟化驱动
  • AI智能体产业学院是什么?
  • ResNet深度剖析:残差连接如何破解深度网络训练难题?
  • 思特威携手紫光展锐联合布局MicroLED高速光互连,筑牢国产AI算力底座
  • 从引脚到性能:DVP与MIPI接口的实战选型指南
  • 低成本自制星链无线路由器,灵活配置还能多样升级!
  • ESMFold终极实战指南:5个高效预测蛋白质3D结构的专业方案
  • 国内高校学生必备的AI写作辅助网站有哪些?
  • Aurora Store:构建无Google依赖的Android应用生态解决方案
  • 国家中小学智慧教育平台电子课本解析工具:解锁教材下载新体验
  • 脉冲神经网络:从生物启发的计算模型到高效能AI的未来
  • 微积分的逻辑基石:从无穷小到极限的严密化之路
  • 化工危化场所抗爆墙选型合规厂家全场景问答 - 奔跑123
  • Pearcleaner:重新定义macOS清理体验的开源工具
  • 如何用BG3脚本扩展器彻底改变你的博德之门3游戏体验?
  • 让桌面“活“起来:DyberPet桌面宠物框架,打造属于你的专属数字伙伴
  • 如何通过图像识别技术实现鸣潮游戏自动化:完整指南与架构解析
  • 基于Flutter与Arduino的乌尔都语盲文学习系统设计与实现
  • ESMFold终极指南:5种高效蛋白质结构预测解决方案深度解析
  • 【ChatGPT播客冷启动生死线】:前7期内容策划SOP(含话题热度预测模型+听众情绪图谱工具链)
  • DRAM地址映射优化:破解高速光通信交织器行列访问瓶颈
  • 「研究分析·适配解析·优化方案·避坑指南·体系总结」基层工作宣传稿发稿渠道内容审核、合规风控、媒体适配与收录优化、长效留存全维度实操指引
  • 5分钟上手:浏览器多URL批量打开工具Open-Multiple-URLs
  • SRWE完整教程:免费Windows窗口编辑器终极指南,轻松调整任意程序窗口
  • Python函数:def定义函数与参数传递基础
  • 微信AI机器人终极指南:5分钟打造你的智能聊天助手
  • 别再用通用Prompt做心理支持了!——20年临床经验沉淀的7层防御型心理交互架构(含自杀意念动态拦截模块V2.3)