hand
_1_12_213
4
返回栏目
0k
3k
5k
1k
2k
0.2k
2k
1k
2k
3k
2k
3k
2k
3k
3k
0.3k
0k
2k
0k
1k
0.1k
0k
0k
2k
2k
3k
0.2k
3k
0k
2k
2k
2k
3k
2k
2k
0k
4k
2k
2k
0k
3k
3k
2k
2k
2k
1k
3k
1k
3k
2k
1k
0.8k
2k
0k
2k
2k
2k
2k
3k
0.4k
4k
2k
5k
2k
3k
2k
3k
3k
4k
2k
3k
2k
3k
0.7k
2k
0.8k
3k
2k
4k
2k
2k
2k
2k
2k
3k
3k
3k
3k
4k
3k
3k
0k
2k
2k
0k
3k
2k
3k
1k
2k
2k
3k
3k
3k
3k
5k
3k
3k
3k
4k
3k
5k
4k
4k
4k
4k
1k
2k
2k
2k
2k
2k
2k
1k
2k
3k
3k
3k
3k
3k
2k
3k
4k
2k
2k
3k
5k
3k
3k
3k
4k
3k
3k
2k
3k
5k
4k
3k
4k
4k
2k
3k
3k
1k
3k
4k
4k
2k
2k
2k
3k
2k
4k
2k
4k
2k
4k
1k
2k
1k
2k
2k
1k
2k
2k
2k
2k
2k
2k
1k
1k
4k
3k
2k
2k
3k
3k
6k
2k
8k
3k
7k
2k
3k
3k
4k
3k
5k
4k
3k
3k
2k
2k
3k
3k
2k
2k
2k
3k
2k
6k
4k
4k
4k
4k
3k
3k
2k
4k
2k
3k
3k
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
0k
返回前端 - HTML5栏目
作者:
贺及楼
成为作者
更新日期:2025-02-27 16:31:22
在前端开发中,页面布局是至关重要的一环。传统的布局方式(如浮动、定位等)在处理一些复杂的布局需求时,往往显得力不从心。而 HTML5 引入的 Flexbox(弹性盒子布局模型)为我们提供了一种更加灵活、高效的布局解决方案。本文将详细介绍 Flexbox 的基本概念、属性及其使用方法,并通过一些实用的例子帮助大家更好地理解和掌握。
Flexbox 是一种一维的布局模型,它可以在一个方向(水平或垂直)上灵活地排列和对齐元素。使用 Flexbox,我们可以轻松地控制元素的大小、顺序和对齐方式,而不需要依赖传统布局方式中的复杂计算和技巧。
要使用 Flexbox,我们需要将一个元素设置为弹性容器(Flex Container),然后将其直接子元素设置为弹性项目(Flex Items)。弹性容器会根据自身的属性和弹性项目的属性来决定如何排列和对齐这些项目。
在深入了解 Flexbox 的属性之前,我们先了解几个基本概念:
主轴是弹性容器中项目排列的主要方向,它可以是水平方向(默认)或垂直方向。交叉轴则是与主轴垂直的方向。
主轴起点是主轴的起始位置,项目从这里开始排列。主轴终点是主轴的结束位置。
交叉轴起点是交叉轴的起始位置,交叉轴终点是交叉轴的结束位置。
主轴尺寸是项目在主轴方向上的大小,交叉轴尺寸是项目在交叉轴方向上的大小。
要创建一个 Flex 容器,只需要将元素的 display
属性设置为 flex
或 inline-flex
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.flex-container {
display: flex;
background-color: lightblue;
}
.flex-item {
background-color: lightcoral;
margin: 10px;
padding: 20px;
font-size: 30px;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
</div>
</body>
</html>
在上面的代码中,我们将一个 div
元素的 display
属性设置为 flex
,使其成为一个弹性容器。容器内的三个 div
元素成为弹性项目,它们会在水平方向上依次排列。
flex-direction
flex-direction
属性用于定义主轴的方向,它有四个可选值:
row
:默认值,主轴为水平方向,项目从左到右排列。row-reverse
:主轴为水平方向,项目从右到左排列。column
:主轴为垂直方向,项目从上到下排列。column-reverse
:主轴为垂直方向,项目从下到上排列。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.flex-container {
display: flex;
flex-direction: column;
background-color: lightblue;
}
.flex-item {
background-color: lightcoral;
margin: 10px;
padding: 20px;
font-size: 30px;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
</div>
</body>
</html>
flex-wrap
flex-wrap
属性用于定义项目是否换行,它有三个可选值:
nowrap
:默认值,项目不换行。wrap
:项目换行,第一行在上方。wrap-reverse
:项目换行,第一行在下方。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.flex-container {
display: flex;
flex-wrap: wrap;
background-color: lightblue;
width: 200px;
}
.flex-item {
background-color: lightcoral;
margin: 10px;
padding: 20px;
font-size: 30px;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
</div>
</body>
</html>
justify-content
justify-content
属性用于定义项目在主轴上的对齐方式,它有五个可选值:
flex-start
:默认值,项目从主轴起点开始排列。flex-end
:项目从主轴终点开始排列。center
:项目在主轴上居中排列。space-between
:项目均匀分布,第一个项目在主轴起点,最后一个项目在主轴终点。space-around
:项目均匀分布,每个项目两侧的间隔相等。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.flex-container {
display: flex;
justify-content: space-around;
background-color: lightblue;
}
.flex-item {
background-color: lightcoral;
margin: 10px;
padding: 20px;
font-size: 30px;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
</div>
</body>
</html>
align-items
align-items
属性用于定义项目在交叉轴上的对齐方式,它有五个可选值:
stretch
:默认值,项目在交叉轴上拉伸以填满容器。flex-start
:项目在交叉轴起点对齐。flex-end
:项目在交叉轴终点对齐。center
:项目在交叉轴上居中对齐。baseline
:项目在基线对齐。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.flex-container {
display: flex;
align-items: center;
height: 200px;
background-color: lightblue;
}
.flex-item {
background-color: lightcoral;
margin: 10px;
padding: 20px;
font-size: 30px;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
</div>
</body>
</html>
align-content
align-content
属性用于定义多行项目在交叉轴上的对齐方式,它有六个可选值:
stretch
:默认值,多行项目在交叉轴上拉伸以填满容器。flex-start
:多行项目在交叉轴起点对齐。flex-end
:多行项目在交叉轴终点对齐。center
:多行项目在交叉轴上居中对齐。space-between
:多行项目均匀分布,第一行在交叉轴起点,最后一行在交叉轴终点。space-around
:多行项目均匀分布,每行两侧的间隔相等。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.flex-container {
display: flex;
flex-wrap: wrap;
align-content: space-between;
height: 300px;
background-color: lightblue;
}
.flex-item {
background-color: lightcoral;
margin: 10px;
padding: 20px;
font-size: 30px;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
<div class="flex-item">5</div>
<div class="flex-item">6</div>
</div>
</body>
</html>
order
order
属性用于定义项目的排列顺序,数值越小,排列越靠前,默认值为 0。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.flex-container {
display: flex;
background-color: lightblue;
}
.flex-item {
background-color: lightcoral;
margin: 10px;
padding: 20px;
font-size: 30px;
}
.item2 {
order: -1;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item item2">2</div>
<div class="flex-item">3</div>
</div>
</body>
</html>
flex-grow
flex-grow
属性用于定义项目的放大比例,默认值为 0,表示不放大。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.flex-container {
display: flex;
background-color: lightblue;
}
.flex-item {
background-color: lightcoral;
margin: 10px;
padding: 20px;
font-size: 30px;
}
.item2 {
flex-grow: 2;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item item2">2</div>
<div class="flex-item">3</div>
</div>
</body>
</html>
flex-shrink
flex-shrink
属性用于定义项目的缩小比例,默认值为 1,表示可以缩小。
flex-basis
flex-basis
属性用于定义项目在主轴上的初始大小,默认值为 auto
。
flex
flex
属性是 flex-grow
、flex-shrink
和 flex-basis
的缩写,默认值为 0 1 auto
。
align-self
align-self
属性用于定义单个项目在交叉轴上的对齐方式,它的可选值与 align-items
相同。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.flex-container {
display: flex;
height: 200px;
background-color: lightblue;
}
.flex-item {
background-color: lightcoral;
margin: 10px;
padding: 20px;
font-size: 30px;
}
.item2 {
align-self: flex-end;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item item2">2</div>
<div class="flex-item">3</div>
</div>
</body>
</html>
属性类型 | 属性名称 | 作用 |
---|---|---|
容器属性 | flex-direction |
定义主轴方向 |
容器属性 | flex-wrap |
定义项目是否换行 |
容器属性 | justify-content |
定义项目在主轴上的对齐方式 |
容器属性 | align-items |
定义项目在交叉轴上的对齐方式 |
容器属性 | align-content |
定义多行项目在交叉轴上的对齐方式 |
项目属性 | order |
定义项目的排列顺序 |
项目属性 | flex-grow |
定义项目的放大比例 |
项目属性 | flex-shrink |
定义项目的缩小比例 |
项目属性 | flex-basis |
定义项目在主轴上的初始大小 |
项目属性 | flex |
flex-grow 、flex-shrink 和 flex-basis 的缩写 |
项目属性 | align-self |
定义单个项目在交叉轴上的对齐方式 |
Flexbox 为我们提供了一种强大而灵活的布局方式,通过合理运用容器属性和项目属性,我们可以轻松实现各种复杂的布局需求。希望本文能帮助你更好地理解和掌握 Flexbox 布局技术。
前端 - HTML5
整章节共240节
快分享给你的小伙伴吧 ~