第六章:弹性布局(Flexbox)
- 作者

- Name
- 青玉白露
- Github
- @white0dew
- Modified on
- Reading time
- 4 分钟
阅读:.. 评论:..
1. Flexbox 的基本概念
弹性布局(Flexbox)是一种用于设计复杂布局的 CSS 模块。它特别适合用于需要灵活响应各种屏幕尺寸和方向的布局。Flexbox 通过使用容器和项目的概念,使得布局变得更加容易和直观。
Flex 容器与 Flex 项目
Flex 容器
一个 Flex 容器是包含 Flex 项目的父元素。通过将 display 属性设置为 flex 或 inline-flex,可以将一个元素变为 Flex 容器。
.container { display: flex; }
Flex 项目
Flex 项目是 Flex 容器的直接子元素。这些项目将遵循 Flex 容器的布局规则进行排列。
<div class="container"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div>
Flex 容器属性
Flex 容器有多个属性可以控制其内部项目的排列和对齐方式。
主轴和交叉轴
- 主轴(Main Axis):Flex 容器中的主要排列方向,默认为水平方向(从左到右)。
- 交叉轴(Cross Axis):与主轴垂直的方向,默认为垂直方向(从上到下)。
flex-direction
flex-direction 属性定义了 Flex 容器中项目的排列方向。
row(默认值):主轴为水平方向,从左到右。row-reverse:主轴为水平方向,从右到左。column:主轴为垂直方向,从上到下。column-reverse:主轴为垂直方向,从下到上。
.container { display: flex; flex-direction: row; /* 可以是 row, row-reverse, column, column-reverse */ }
justify-content
justify-content 属性定义了项目在主轴上的对齐方式。
flex-start(默认值):项目从主轴的起点开始排列。flex-end:项目从主轴的终点开始排列。center:项目在主轴上居中排列。space-between:项目之间的间距相等,首尾项目紧贴容器边缘。space-around:项目之间的间距相等,每个项目两侧的间距为容器边缘的一半。
.container { display: flex; justify-content: center; /* 可以是 flex-start, flex-end, center, space-between, space-around */ }
align-items
align-items 属性定义了项目在交叉轴上的对齐方式。
stretch(默认值):项目在交叉轴上拉伸至与容器同高。flex-start:项目在交叉轴的起点对齐。flex-end:项目在交叉轴的终点对齐。center:项目在交叉轴上居中对齐。baseline:项目的基线对齐。
.container { display: flex; align-items: center; /* 可以是 stretch, flex-start, flex-end, center, baseline */ }
flex-wrap
flex-wrap 属性定义了项目是否在容器中换行。
nowrap(默认值):项目不换行。wrap:项目换行,第一行在上方。wrap-reverse:项目换行,第一行在下方。
.container { display: flex; flex-wrap: wrap; /* 可以是 nowrap, wrap, wrap-reverse */ }
Flex 项目属性
Flex 项目有多个属性可以控制其自身的排列和对齐方式。
order
order 属性定义了项目的排列顺序,默认值为 0。
.item { order: 2; /* 数字越小,项目越靠前 */ }
flex-grow
flex-grow 属性定义了项目的增长比例,默认值为 0。
.item { flex-grow: 1; /* 项目可以增长以填充剩余空间 */ }
flex-shrink
flex-shrink 属性定义了项目的收缩比例,默认值为 1。
.item { flex-shrink: 0; /* 项目不会收缩 */ }
flex-basis
flex-basis 属性定义了项目的初始大小,可以是具体数值或 auto。
.item { flex-basis: 100px; /* 项目的初始大小为 100px */ }
align-self
align-self 属性允许单个项目有与其他项目不同的对齐方式。
.item { align-self: center; /* 可以是 auto, flex-start, flex-end, center, baseline, stretch */ }
2. 弹性布局的应用
水平居中与垂直居中
使用 Flexbox 实现水平居中和垂直居中非常简单,只需设置 justify-content 和 align-items 属性。
<div class="container"> <div class="item">Centered Item</div> </div>
.container { display: flex; justify-content: center; /* 水平居中 */ align-items: center; /* 垂直居中 */ height: 100vh; /* 让容器占满整个视窗高度,便于演示居中效果 */ }
多列布局与均分布局
Flexbox 可以轻松实现多列布局,并均分列宽。
<div class="container"> <div class="item">Column 1</div> <div class="item">Column 2</div> <div class="item">Column 3</div> </div>
.container { display: flex; } .item { flex: 1; /* 每个项目占据相同的宽度 */ padding: 10px; border: 1px solid #000; }
响应式布局的实现
Flexbox 还可以用于实现响应式布局,根据屏幕宽度自动调整项目的排列方式。
<div class="container"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> <div class="item">Item 4</div> </div>
.container { display: flex; flex-wrap: wrap; } .item { flex: 1 1 200px; /* 项目最小宽度为 200px */ padding: 10px; margin: 5px; border: 1px solid #000; }
在这个例子中,每个项目的宽度至少为 200px,如果容器有足够的空间,项目会自动换行,以适应窗口大小。
通过学习和理解这些 Flexbox 的基本概念和属性,你将在网页布局中获得极大的灵活性和控制力。

