目录
入门
- flex 是什么?
. flex 是 Flexible Box 的缩写,就是弹性盒子布局的意思 - flex优点?
.Flex布局非常灵活,可以在任何容器中使用。可以轻松扩展和修改。
.Flex布局具有响应式设计,因此可以在不同的屏幕尺寸和设备上使用。
.Flex布局非常简单易用,几乎没有学习曲线。
.Flex布局支持动画效果,可以轻松实现各种动画效果。
.Flex布局非常高效,可以快速实现复杂的布局和UI设计。
主要就是根据下面两个轴来进行操作布局
代码使用
justify-content - main轴-水平布局
正常我们写多个块元素时会造成自动换行
例如:
左对齐
当我们需要元素水平排列是只需在样式中添加 display: flex; 即可
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 600px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div>第一个子元素</div>
<div>第二个子元素</div>
<div>第三个子元素</div>
</div>
</body>
</html>
效果:
右对齐
上面的是flex默认的左对齐,如果需要右对齐就需要再新增一个样式 justify-content: flex-end;
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* 右对齐 */
justify-content: flex-end;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div>第一个子元素</div>
<div>第二个子元素</div>
<div>第三个子元素</div>
</div>
</body>
</html>
效果:
水平居中
水平居中只需将其更改为 justify-content: center;即可
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* 水平居中 */
justify-content: center;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div>第一个子元素</div>
<div>第二个子元素</div>
<div>第三个子元素</div>
</div>
</body>
</html>
效果:
两端对齐
两端对齐则需更改为 justify-content: space-between;
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* 两端对齐 */
justify-content: space-between;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div>第一个子元素</div>
<div>第二个子元素</div>
<div>第三个子元素</div>
</div>
</body>
</html>
效果:
两端对齐中间距离为两倍
如果需要 两端对齐,中间的距离是两端和容器距离的2倍则需将其更改为 justify-content: space-around; 即可
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* 两端对齐,中间的距离是两端和容器距离的2倍。 */
justify-content: space-around;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div>第一个子元素</div>
<div>第二个子元素</div>
<div>第三个子元素</div>
</div>
</body>
</html>
效果:
两端对齐距离相等
如果需要两端对齐,中间距和容器两端的距离相等则将其改为 justify-content: space-evenly;即可
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* 两端对齐,中间距和容器两端的距离相等。 */
justify-content: space-evenly;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div>第一个子元素</div>
<div>第二个子元素</div>
<div>第三个子元素</div>
</div>
</body>
</html>
效果:
align-items - cross轴-垂直布局
垂直居中
需要垂直方向居中则需要增加 align-items: center;
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* 垂直居中 */
align-items: center;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div>第一个子元素</div>
<div>第二个子元素</div>
<div>第三个子元素</div>
</div>
</body>
</html>
效果:
底部对齐
需要cross轴底部对齐时需要更改 align-items: flex-end;即可
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* cross轴底部对齐 */
align-items: flex-end;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div>第一个子元素</div>
<div>第二个子元素</div>
<div>第三个子元素</div>
</div>
</body>
</html>
效果:
水平垂直居中
需要水平垂直居中时添加 justify-content: center; align-items: center;即可
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* 水平、垂直居中对齐 */
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div>第一个子元素</div>
<div>第二个子元素</div>
<div>第三个子元素</div>
</div>
</body>
</html>
效果:
flex-direction - 项目方向
水平反序排列
水平方向反序排列只需增加 flex-direction: row-reverse;即可
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* 水平、垂直居中对齐 */
justify-content: center; /* 水平居中 */
/* 水平方向,反序排列 */
flex-direction: row-reverse;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div>第一个子元素</div>
<div>第二个子元素</div>
<div>第三个子元素</div>
</div>
</body>
</html>
效果:
垂直正序排列
垂直方向正序排列只需修改 flex-direction: column;即可
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* 水平、垂直居中对齐 */
justify-content: center; /* 水平居中 */
/* 垂直方向,正序排列 */
flex-direction: column;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div>第一个子元素</div>
<div>第二个子元素</div>
<div>第三个子元素</div>
</div>
</body>
</html>
效果:
垂直反序排列
垂直方向反序排列只需修改 flex-direction: column-reverse;即可
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* 水平、垂直居中对齐 */
justify-content: center; /* 水平居中 */
/* 垂直方向,反序排列 */
flex-direction: column-reverse;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div>第一个子元素</div>
<div>第二个子元素</div>
<div>第三个子元素</div>
</div>
</body>
</html>
效果:
flex-wrap - 换行、换列
nowrap 默认值,不换行、换列。
当flex项目的总宽度超过容器的宽度,flex项目将按照原有比例强行等分,且不换行。
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* 水平、垂直居中对齐 */
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
/* 默认不换行 */
flex-wrap: nowrap;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div style="width: 500px;">第一个子元素</div>
<div style="width: 500px;">第二个子元素</div>
<div style="width: 600px;">第三个子元素</div>
</div>
</body>
</html>
效果:
自动换行换列
换行、换列。当flex项目的总宽度超过容器的宽度,将自然换行、换列。且每一行(列)等分容器只需将其修改为 flex-wrap: wrap; 即可
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex弹性布局</title>
<style>
.box{
width: 100%;
height: 300px;
border: 1px solid blue;
/* flex默认水平布局 */
display: flex;
/* 水平、垂直居中对齐 */
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
/* 自动换行 */
flex-wrap: wrap;
}
.box>div{
margin-top: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div style="width: 500px;">第一个子元素</div>
<div style="width: 500px;">第二个子元素</div>
<div style="width: 600px;">第三个子元素</div>
</div>
</body>
</html>
效果:
这就是简单的基础flex弹性布局啦!!