Flex 起步
核心概念
主轴设置
简单理解为:元素的默认添加方向所在的轴,即为主轴
侧轴设置
与主轴交叉的那个轴被称为侧轴
弹性布局实现过程
语法:
display: flex;
在需要设置为弹性盒子的DIV元素上添加 display
属性即可,父元素设置为弹性盒子,其直接的子元素具有弹性布局的特性。
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
display: flex;
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
}
</style>
</head>
<body>
<div class="box">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</body>
</html>
演示效果:
核心属性
父项属性
1、设置主轴
语法:
flex-direction: row; /* 设置X轴为主轴,子元素从左向右排列,默认 */
flex-direction: row-reverse; /* 设置X轴为主轴,子元素从右向左排列 */
flex-direction: column; /* 设置Y轴为主轴,子元素从上向下排列 */
flex-direction: column-reverse; /* 设置Y轴为主轴,子元素从下向上排列 */
示例1:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
display: flex;
flex-direction: row;
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
}
</style>
</head>
<body>
<div class="box">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</body>
</html>
演示效果:
示例2:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 300px;
display: flex;
flex-direction: row-reverse; /* 修改 */
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
</body>
</html>
演示效果:
示例3:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 300px;
display: flex;
flex-direction: column; /* 修改 */
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
</body>
</html>
演示效果:
示例4:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 300px;
display: flex;
flex-direction: column-reverse; /* 修改 */
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
</body>
</html>
演示效果:
2、换行属性
语法:
flex-wrap: wrap; /* 设置换行 */
flex-wrap: nowrap; /* 设置不换行,默认 */
示例1:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 300px;
width: 300px;
display: flex;
flex-direction: row; /* 设置主轴 */
flex-wrap: nowrap; /* 不换行,默认 */
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
</body>
</html>
演示效果:
示例2:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 300px;
width: 300px;
display: flex;
flex-direction: row; /* 设置主轴 */
flex-wrap: wrap; /* 换行 */
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
</body>
</html>
演示效果:
3、主轴子元素排列
语法:
justify-content: flex-start; /* 从开始位置对齐 */
justify-content: center; /* 居中对齐 */
justify-content: flex-end; /* 从结束位置对齐 */
justify-content: space-evenly; /* 平分,完全平分 */
justify-content: space-around; /* 平分,元素外边距值相等 */
justify-content: space-between; /* 平分,两边贴边,剩下空间平分 */
平分示例1:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 300px;
display: flex;
justify-content: space-evenly; /* 修改 */
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
</body>
</html>
演示效果:
平分示例2:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 300px;
display: flex;
justify-content: space-around; /* 修改 */
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>
</body>
</html>
演示效果:
平分示例3:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 300px;
display: flex;
justify-content: space-between; /* 修改 */
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>
</body>
</html>
演示效果:
4、侧轴子元素排列
设置子元素排列分为单行和多行两个属性:
/* 单行 */
align-items: flex-start;
/* 多行 */
align-content: flex-start;
语法:
/* 单行 */
align-items: flex-start; /* 从开始位置对齐 */
align-items: center; /* 居中对齐 */
align-items: flex-end; /* 从结束位置对齐 */
/* 多行 */
align-content: flex-start; /* 从开始位置对齐 */
align-content: flex-end; /* 从结束位置对齐 */
align-content: center; /* 居中对齐 */
align-content: space-around; /* 平分,元素的外边距值相等 */
align-content: space-between; /* 平分,两边贴边,平分剩余空间 */
平分示例1:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 700px;
width: 300px;
display: flex;
flex-wrap: wrap;
/* 多行 */
align-content: space-around; /* 修改 */
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">4</div>
<div class="item">4</div>
</div>
</body>
</html>
演示效果
平分示例2:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 700px;
width: 300px;
display: flex;
flex-wrap: wrap;
/* 多行 */
align-content: space-between; /* 修改 */
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">4</div>
<div class="item">4</div>
</div>
</body>
</html>
演示效果
子项属性
子项属性是将属性定义在弹性盒子内的直接子元素上。
语法:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
.box{
display: flex;
}
.item{
flex: 1; /* 设置在item中的为子项属性 */
}
</style>
</head>
<body>
<div class="box">
<div class="item"></div>
</div>
</body>
</html>
1、元素的占比
语法:
.item{
flex: 1; /* 值为数字类型,值越大占比越大,可以为小数 */
}
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 700px;
display: flex;
justify-content: space-around;
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
#a{
flex: 1;
}
#b{
flex: 2;
}
#c{
flex: 3;
}
#d{
flex: 4;
}
</style>
</head>
<body>
<div class="box">
<div class="item" id="a">1</div>
<div class="item" id="b">2</div>
<div class="item" id="c">3</div>
<div class="item" id="d">4</div>
</div>
</body>
</html>
演示效果:
2、排序属性
语法:
.item{
order: 0; /* 值为数字类型,默认为0,值越大越靠后,可以使用负数 */
}
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 700px;
display: flex;
justify-content: space-around;
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
#a{
order: 1;
}
#b{
order: 3;
}
#c{
}
#d{
order: 2;
}
</style>
</head>
<body>
<div class="box">
<div class="item" id="a">1</div>
<div class="item" id="b">2</div>
<div class="item" id="c">3</div>
<div class="item" id="d">4</div>
</div>
</body>
</html>
演示效果:
3、自身侧轴排列方式
语法:
align-self: flex-start; /* 开始 */
align-self: center; /* 居中 */
align-self: flex-end; /* 结束 */
align-items: stretch; /* 拉伸 */
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.box{
border: 1px solid #000;
height: 700px;
display: flex;
justify-content: space-around;
}
.item{
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
font-size: 20px;
}
#a{
align-self: center; /* 居中 */
}
</style>
</head>
<body>
<div class="box">
<div class="item" id="a">1</div>
<div class="item" id="b">2</div>
<div class="item" id="c">3</div>
<div class="item" id="d">4</div>
</div>
</body>
</html>
演示效果: