06. Flexbox 与 Grid 布局
Flexbox 和 Grid 是现代 CSS 布局的两大核心,它们让复杂布局变得简单高效。
一、Flexbox 弹性布局
1. 基础概念
1 | ┌─────────────────────────────────────┐ |
2. 容器属性
flex-direction(主轴方向)
1 | .container { |
flex-wrap(换行)
1 | .container { |
flex-flow(简写)
1 | .container { |
justify-content(主轴对齐)
1 | .container { |
align-items(交叉轴对齐)
1 | .container { |
align-content(多行对齐)
1 | .container { |
3. 项目属性
order(顺序)
1 | .item { |
flex-grow(放大比例)
1 | .item { |
flex-shrink(缩小比例)
1 | .item { |
flex-basis(基准大小)
1 | .item { |
flex(简写)
1 | .item { |
align-self(单独对齐)
1 | .item { |
二、Grid 网格布局
1. 基础概念
1 | ┌─────────┬─────────┬─────────┬─────────┐ |
2. 容器属性
display(启用 Grid)
1 | .container { |
grid-template-columns(列定义)
1 | .container { |
grid-template-rows(行定义)
1 | .container { |
grid-template-areas(区域命名)
1 | .container { |
grid-template(简写)
1 | .container { |
gap(间距)
1 | .container { |
justify-items(水平对齐)
1 | .container { |
align-items(垂直对齐)
1 | .container { |
justify-content(整体水平对齐)
1 | .container { |
align-content(整体垂直对齐)
1 | .container { |
place-items(简写)
1 | .container { |
3. 项目属性
grid-column(列位置)
1 | .item { |
grid-row(行位置)
1 | .item { |
grid-area(区域)
1 | .item { |
justify-self(单独水平对齐)
1 | .item { |
align-self(单独垂直对齐)
1 | .item { |
三、Flexbox vs Grid
| 特性 | Flexbox | Grid |
|---|---|---|
| 维度 | 一维(行或列) | 二维(行和列) |
| 适用场景 | 导航、对齐、弹性布局 | 页面整体布局、网格系统 |
| 溢出处理 | 自动换行 | 需要显式定义 |
| 浏览器支持 | 更好的兼容性 | 较新的浏览器 |
选择建议
- 使用 Flexbox:导航栏、对齐元素、弹性组件
- 使用 Grid:页面布局、网格系统、卡片布局
- 结合使用:Grid 负责大布局,Flexbox 负责内部对齐
四、实际案例
1. 水平垂直居中
1 | /* Flexbox */ |
2. 均分列
1 | /* Flexbox */ |
3. 圣杯布局
1 | .container { |
4. 响应式网格
1 | .container { |
5. 卡片悬停效果
1 | .container { |
五、浏览器兼容性
1 | /* 前缀 */ |
总结
Flexbox 适合一维布局,Grid 适合二维布局。掌握这两种布局方式可以解决大部分布局需求,建议根据实际场景选择最合适的方案。