CSS - 盒模型与布局

盒模型是CSS布局的核心,Flexbox和Grid是现代布局的两大支柱。

盒模型概念

组成部分 说明 CSS属性
content 内容区域,实际显示的内容 width, height
padding 内边距,内容与边框之间的区域 padding, padding-top, padding-right...
border 边框,内边距和外边距之间的边框 border, border-width, border-style
margin 外边距,边框与其他元素之间的区域 margin, margin-top, margin-right...

box-sizing 盒尺寸计算

说明 计算公式
content-box 默认值,只包含内容区域 总宽度 = width + padding + border
border-box 包含内容、内边距和边框 总宽度 = width(已包含padding和border)

display 显示类型

说明 特点
block 块级元素 独占一行,可设置宽高
inline 行内元素 同行显示,不可设置宽高
inline-block 行内块元素 同行显示,可设置宽高
none 不显示 完全隐藏,不占空间
flex 弹性盒容器 一维布局
grid 网格容器 二维布局

Flexbox 属性

属性 说明
flex-direction row 主轴水平(默认)
flex-direction column 主轴垂直
flex-direction row-reverse/column-reverse 反向排列
flex-wrap nowrap 不换行(默认)
flex-wrap wrap/wrap-reverse 换行
justify-content flex-start 主轴起点对齐
justify-content flex-end 主轴终点对齐
justify-content center 居中对齐
justify-content space-between 两端对齐,间距相等
justify-content space-around 间距两边小中间大
justify-content space-evenly 间距完全相等
align-items stretch 拉伸填满(默认)
align-items flex-start 交叉轴起点对齐
align-items flex-end 交叉轴终点对齐
align-items center 交叉轴居中
align-items baseline 基线对齐

什么是盒模型、Flexbox和Grid?

概念 定义 主要用途
盒模型 (Box Model) 每个HTML元素都被视为一个矩形盒子,由内容(content)、内边距(padding)、边框(border)和外边距(margin)组成 定义元素的基本结构和尺寸计算方式
Flexbox (弹性盒) 一种一维布局模型,允许容器内的项目沿主轴和交叉轴灵活排列和对齐 处理单行或单列的布局,适合组件级布局
Grid (网格) 一种二维布局系统,允许创建行和列的复杂布局结构 处理整个页面或大型组件的二维布局

盒模型、Flexbox和Grid的联系与区别

对比维度 盒模型 Flexbox Grid
布局维度 基础概念,不涉及布局 一维布局(单行或单列) 二维布局(行列同时)
适用场景 所有元素的基础结构 导航栏、卡片组件、按钮组 页面布局、仪表盘、复杂表单
控制方向 无方向概念 可设置主轴和交叉轴方向 行列同时控制
对齐方式 通过margin/padding控制 justify-content/align-items等 justify-content/align-content等
灵活性 固定结构 高度灵活,可伸缩 最灵活,可任意排列
兼容性 所有浏览器支持 现代浏览器支持良好 现代浏览器支持良好
相互关系 是Flexbox和Grid的基础 基于盒模型,是一维布局方案 基于盒模型,是二维布局方案

如何选择合适的布局方式

布局需求 推荐方案 原因
简单的水平或垂直排列 Flexbox 一维布局,对齐方便,响应式友好
复杂的二维布局(如页面框架) Grid 原生支持行列,布局更直观
组件内部布局 Flexbox 适合组件级的一维排列
整体页面布局 Grid + Flexbox Grid处理整体框架,Flexbox处理组件内部
需要精确控制元素尺寸 Grid fr单位和网格线提供精确控制
需要动态调整元素大小 Flexbox flex-grow/shrink属性动态调整

Grid 网格布局

属性 说明 示例
grid-template-columns 定义列的尺寸和数量 1fr 1fr 1fr
grid-template-rows 定义行的尺寸和数量 auto 100px auto
gap 网格间距 gap: 10px
grid-template-areas 命名网格区域 "header header"
grid-column 指定列位置 grid-column: 1 / 3
grid-row 指定行位置 grid-row: 1 / 2

position 定位

说明 定位原点
static 默认定位,正常文档流 -
relative 相对定位 元素自身原位置
absolute 绝对定位 最近非static祖先元素
fixed 固定定位 浏览器视口
sticky 粘性定位 根据滚动位置切换
← Css Basics Css Advanced →