css布局笔记
CSS中的Flex布局
目录
一.什么是Flex布局
Flex是"Flexible Box"的缩写,意为弹性布局:
- 可简便、完整、响应式地实现页面布局
- 为盒子模型提供最大灵活性
- 任何容器都可指定为Flex布局:
.box {
display: flex;
}
二.Flex布局使用
2.1 Flex使用语法
/* 块元素 */
.container {
display: flex;
}
/* 行内元素 */
.container {
display: inline-flex;
}
使用Flex布局后,子元素的float/clear/vertical-align属性失效
2.2 基本概念

- 容器:采用Flex布局的元素
- 项目:容器的直接子元素
- 主轴(main axis):水平轴,起点main end,终点main end
- 交叉轴(cross axis):垂直轴,起点cross start,终点cross end
三.容器的属性
3.1 所有属性概述
| 属性 | 作用 |
|---|---|
| flex-direction | 项目排列方向 |
| flex-wrap | 换行方式 |
| flex-flow | 排列+换行的简写 |
| justify-content | 主轴对齐方式 |
| align-items | 交叉轴对齐方式 |
| align-content | 多轴线对齐方式 |
3.2 flex-direction

.container {
flex-direction: column-reverse | column | row | row-reverse |;
}
3.3 flex-wrap

.container {
flex-wrap: nowrap | wrap | wrap-reverse;
}
3.4 flex-flow
.container {
flex-flow: <flex-direction> || <flex-wrap>;
}
3.5 justify-content

.container {
justify-content: flex-start | flex-end | center | space-between | space-around;
}
补充:space-evenly属性——将剩余空间给剩余元素均匀分配
3.6 align-items

.container {
align-items: flex-start | flex-end | center | baseline | stretch;
}
3.7 align-content

.container {
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
四.项目(子元素)的属性
4.1 所有属性概述
| 属性 | 作用 |
|---|---|
| order | 排列顺序 |
| flex-grow | 放大比例 |
| flex-shrink | 缩小比例 |
| flex-basis | 初始主轴尺寸 |
| flex | grow/shrink/basis简写 |
| align-self | 单独对齐方式 |
4.2 order

.item {
order: <integer>; /* 默认0 */
}
4.3 flex-grow

.item {
flex-grow: <number>; /* 默认0 */
}
4.4 flex-shrink

.item {
flex-shrink: <number>; /* 默认1 */
}
4.5 flex-basis
.item {
flex-basis: <length> | auto; /* 默认auto */
}
4.6 flex
.item {
flex: none | [<flex-grow> <flex-shrink> <flex-basis>];
}
4.7 align-self

.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
4.8 gap设置间距
.class{
display:flex;
justify-content:center;
/* 在center的基础上,设置2vw的间距 */
gap:2vw;
}
** 使用 clamp() 动态调整.让 gap 在最小值和最大值之间动态缩放:**
.flex-container {
gap: clamp(8px, 2vw, 16px); /* 最小值 8px,默认 2vw,最大值 16px */
}
版权声明:本文遵循 CC 4.0 BY-SA 版权协议
原文链接:https://blog.csdn.net/zheshiyangyang/article/details/139089985
CSS Grid 布局完整指南
最强大的CSS布局方案,二维布局的完美解决方案
📊 Grid vs Flex 布局对比
| 特性 | Flex 布局(一维) | Grid 布局(二维) |
|---|---|---|
| 维度 | 轴线布局,只能指定项目针对轴线的位置 | 将容器划分成行和列,指定项目所在的单元格 |
| 核心概念 | 主轴和交叉轴 | 行和列的网格系统 |
| 适用场景 | 适合一维排列 | 适合二维布局 |
| 控制精度 | 项目沿轴线分布 | 精确控制位置 |
🎯 基础概念演示
经典九宫格
.nine-grid {
display: inline-grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 2px;
}
效果展示:
┌───┬───┬───┐
│ 1 │ 2 │ 3 │
├───┼───┼───┤
│ 4 │ 5 │ 6 │
├───┼───┼───┤
│ 7 │ 8 │ 9 │
└───┴───┴───┘
列划分方式
1. 绝对值划分 (px)
grid-template-columns: 100px 100px 100px;
2. 百分比划分 (%)
grid-template-columns: 33.33% 33.33% 33.33%;
3. 比例划分 (fr)
grid-template-columns: 1fr 2fr;
4. 混合单位
grid-template-columns: 150px 1fr 2fr;
repeat() 函数
grid-template-columns: repeat(3, 1fr);
auto-fill 自动填充
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
行列间距 (gap)
gap: 20px 30px; /* 行间距 列间距 */
🚀 高级特性演示
1. grid-template-areas 区域命名
grid-template-areas:
"header header header"
"main main sidebar"
"footer footer footer";
布局效果:
┌──────┬──────┬──────┐
│ Header │
├──────┼──────┼──────┤
│ Main │Side│
├──────┼──────┼──────┤
│ Footer │
└──────┴──────┴──────┘
2. 容器对齐
justify-content: center; /* 水平居中 */
align-content: center; /* 垂直居中 */
3. 项目精确定位
grid-column: 2 / 4; /* 从第2列到第4列 */
grid-row: 1 / 3; /* 从第1行到第3行 */
4. 网格线命名
grid-template-columns: [start] 100px [line2] 100px [line3] 100px [end];
grid-column: line2 / end;
💡 实战案例
响应式卡片布局
.responsive-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
}
特点:
- 自动适应屏幕宽度
- 最小宽度200px
- 超出时等比例分配剩余空间
- 完美适配各种设备
复杂页面布局
.complex-layout {
display: grid;
grid-template-areas:
"nav header header"
"nav content sidebar"
"nav footer footer";
grid-template-columns: 200px 1fr 200px;
grid-template-rows: 80px 1fr 60px;
gap: 15px;
}
📋 Grid 属性速查表
容器属性
| 属性 | 说明 |
|---|---|
display |
grid | inline-grid |
grid-template-columns |
定义列 |
grid-template-rows |
定义行 |
grid-template-areas |
定义区域 |
gap |
设置间距 |
justify-content |
水平对齐 |
align-content |
垂直对齐 |
grid-auto-flow |
排列顺序 |
项目属性
| 属性 | 说明 |
|---|---|
grid-column |
列位置 |
grid-row |
行位置 |
grid-area |
区域位置 |
justify-self |
单项水平对齐 |
align-self |
单项垂直对齐 |
place-self |
单项对齐简写 |
🔧 常用函数和关键字
核心函数
-
repeat()- 重复定义网格轨道repeat(3, 1fr) repeat(auto-fit, 200px) -
minmax()- 定义尺寸范围minmax(100px, 1fr) minmax(200px, auto) -
fit-content()- 适应内容尺寸fit-content(200px) fit-content(50%)
单位系统
fr- 弹性比例单位auto- 自动尺寸%- 百分比px- 绝对像素
关键字
auto-fill- 自动填充列auto-fit- 自动适应列dense- 紧密排列
🎨 最佳实践
1. 响应式设计
/* 移动端优先 */
.container {
display: grid;
grid-template-columns: 1fr;
gap: 1rem;
}
/* 平板适配 */
@media (min-width: 768px) {
.container {
grid-template-columns: repeat(2, 1fr);
}
}
/* 桌面端 */
@media (min-width: 1024px) {
.container {
grid-template-columns: repeat(4, 1fr);
}
}
2. 命名规范
/* 清晰的区域命名 */
.page-layout {
grid-template-areas:
"header header header"
"sidebar main aside"
"footer footer footer";
}
3. 性能优化
- 使用
repeat()减少代码量 - 合理使用
minmax()避免溢出 - 移动端使用
auto-fit提升体验
📚 学习资源
🎯 快速开始模板
<!DOCTYPE html>
<html>
<head>
<style>
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1rem;
padding: 1rem;
}
.grid-item {
background: #f0f0f0;
padding: 1rem;
border-radius: 8px;
text-align: center;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">项目 1</div>
<div class="grid-item">项目 2</div>
<div class="grid-item">项目 3</div>
</div>
</body>
</html>
基于博客文章:CSS Grid布局详解
最后更新:2024年

浙公网安备 33010602011771号