flex布局/弹性布局
1.是一种浏览器提倡的布局模型
2.布局网页更加简单、灵活
3.避免浮动脱标的问题
flex布局模型的构成:
作用:
1.基于flex精确灵活控制块级盒子的布局方式,避免浮动布局中脱离文档流现象发生
2.flex布局非常适合结构化布局
设置方式:
父元素设置display:flex,子元素可以自动的挤压或者拉伸
组成部分:
1弹性容器(父元素)
2弹性盒子(子元素)
3.主轴(一般来说是x轴)
4.侧轴/交叉轴(一般来说是y轴)
常见父项属性:
flex-
flex-direction:设置主轴的方向
justify-content:设置主轴上的子元素排列方式
flex-wrap:设置子元素是否换行
align-content:设置侧轴上的子元素的排列方式(多行)
align-items:设置侧轴上面的子元素排列方式(单行)
flex-flow:复合属性,相当于同时设置了flex-direction和flex-wrap
使用justify-content调节元素在主轴或者侧轴的对齐方式来设置盒子之间的距离。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
padding: 0;
margin: 0;
}
.box{
/*视觉效果:子级一行排列/水平排列 */
/* 水平排列原因:默认主轴在水平,弹性盒子都是沿着主轴排列的 */
display: flex;
justify-content: center;
/* 间距在弹性盒子之间(子级之间) */
justify-content: space-between;
/* 所有地方的间距都相等 */
justify-content: space-evenly;
/* 间距加在载子级的两侧 */
/* 视觉效果:子级之间的距离是最左右两侧的2倍 */
justify-content: space-around;
height: 200px;
border: 1px solid #000;
}
.box div{
width: 100px;
height: 100px;
background-color: aqua;
}
</style>
</head>
<body>
<div class="box">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
</body>
</html>
侧轴对齐方式:
使用align-items调节元素在侧轴的对齐方式
侧轴对齐方式属性:
align-items(添加到弹性容器)
align-self:控制某个弹性盒子在侧轴的对齐方式(添加到弹性盒子)
center
stretch 默认值,弹性盒子沿着轴线被拉伸至铺满容器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
padding: 0;
margin: 0;
}
.box {
display: flex;
/* 侧轴方向的居中 */
align-items: center;
/* 拉伸,默认值(现有状态,测试到时候去掉子级的高度) */
align-items: stretch;
height: 200px;
border: 1px solid #000;
}
.box div {
width: 25%;
/* height: 100px; */
background-color: aqua;
}
</style>
</head>
<body>
<div class="box">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
</body>
</html>
使用flex属性修改弹性盒子缩放比;
使用:flex-wrap
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
padding: 0;
margin: 0;
}
.box {
display: flex;
height: 300px;
border: 1px solid #000;
}
.box div {
height: 200px;
margin: 0 20px;
background-color: aqua;
}
.box div:nth-child(1) {
width: 200px;
}
.box div:nth-child(2){
/* 占用父级剩余尺寸的份数 */
flex: 1;
}
.box div:nth-child(3){
flex: 1;
}
</style>
</head>
<body>
<div class="box">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
</body>
</html>