当前位置: 首页 > 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.rkmt.cn/news/1403732.html

相关文章:

  • 2026.5.27中山黄金回收商家榜单出炉 正规机构实测优选指南 - 资讯纵览
  • 源代码论文分享|绿城郑州爱心公益网站!
  • 2026春招AI岗位暴涨12倍!小白也能抓住机遇,收藏这份转型指南
  • 从理论到实践:使用sklearn解锁神经网络反向传播的鸢尾花分类实战
  • 从引脚到性能:DVP与MIPI接口的实战选型指南
  • GHelper终极指南:3分钟掌握华硕笔记本轻量控制与性能优化
  • 如何永久保存微信聊天记录并生成年度报告:完整指南
  • 3种Ryujinx存档备份方法:让你的Switch游戏进度永不丢失
  • OpenClaw 源码解析(九):Channel 接入机制与消息路由流程
  • LeetDown技术解析:基于checkm8漏洞的iOS设备降级解决方案
  • 动态目标跨镜无缝接力追踪技术——军营出入口智能管控场景中的空间智能应用白皮书
  • 滑坡智能识别|遥感卫星无人机多源影像数据集|深度学习语义分割开源基准
  • FinalBurn Neo:终极复古街机模拟器完整使用指南
  • ProperTree:3个核心技巧解决跨平台plist编辑难题
  • Android手把手编写儿童手机远程监控App之WebRtc音视频通信2
  • 如何免费激活IDM?3种简单方法永久解锁下载神器
  • 船载无人机自主降落:YOLOv8改进与多传感器融合实战
  • 低成本自制星链无线路由器,灵活配置还能多样升级!
  • 5分钟上手:浏览器多URL批量打开工具Open-Multiple-URLs
  • 别再死磕手册了!手把手教你用CIA402状态机搞定EtherCAT伺服驱动(附状态切换流程图)
  • 基于虚拟本地振荡器与三次样条插值的低成本厘米级可见光定位系统
  • 如何用res-downloader轻松下载视频号、抖音和小红书的加密内容?
  • 《大模型微调成本从 10 万降到 1000 元!LoRA+QLoRA 实战指南》
  • Pearcleaner:重新定义macOS清理体验的开源工具
  • 字节跳动开发岗面试常见问题有哪些
  • 如何用本地AI从视频中精准提取硬字幕:视频字幕提取器的技术实践
  • JAX与TensorFlow在Intel/AMD/NVIDIA平台上的功耗优化实战指南
  • 5大核心功能揭秘:AI视频编辑中的智能镜头控制技术革命
  • 燃料电池空气供给系统控制与故障诊断策略【附程序】
  • Boss-Key:Windows办公隐私保护终极指南,一键隐藏窗口告别尴尬时刻