第六章:弹性布局(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 的基本概念和属性,你将在网页布局中获得极大的灵活性和控制力。