FLEX弹性布局
为盒装模型提供最大的灵活性,任何一个容器都可以指定为Flex布局。
当我们为父元素设为Flex布局后,子元素的float、clear和vertical-align属性将失效
**布局原理:**通过给父盒子添加flex属性,来控制子盒子的位置和排列方式
- 给父元素设置的属性
1.flex-direction 设置主轴方向
默认为:
属性值:
值 | 说明 |
---|---|
row | 从左到右(默认值) |
row-reverse | 从右到左 |
column | 从上到下 |
column-reverse | 从下到上 |
- justify-content 设置主轴上子元素的排列方式
注:使用前一定要确定好哪个是主轴方向
属性值 | 说明 |
---|---|
flex-start | 从头部开始,若为X轴,即为从左到右 |
flex-end | 从尾部开始排列 |
center | 在主轴居中对齐 |
space-around | 平分剩余空间 |
space-between | 先贴两边,在平分剩余空间(important) |
- flex-wrap 设置子元素是否换行
默认情况下,子元素都排在一条线上不换行
为no-wrap
要换行则改为:wrap(第一行在上方)
wrap-reverse(第一行在最下方)
<!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>
.father {
display: flex;
width: 100%;
height: 100px;
background-color: darkkhaki;
}
div[class^=son]{
width: 200px;
height: 50px;
background-color: darkmagenta;
}
</style>
</head>
<body>
<div class="father">
<div class="son1">1</div>
<div class="son2">1</div>
<div class="son3">1</div>
<div class="son4">1</div>
<div class="son5">1</div>
</div>
</body>
</html>
flex布局中默认的是子元素是不换行的,若果装不开,会缩小子元素的宽度放到父元素里面
<!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>
.father {
display: flex;
width: 100%;
height: 100px;
background-color: darkkhaki;
}
div[class^=son]{
width: 200px;
height: 50px;
background-color: darkmagenta;
}
</style>
</head>
<body>
<div class="father">
<div class="son1">1</div>
<div class="son2">1</div>
<div class="son3">1</div>
<div class="son4">1</div>
<div class="son5">1</div>
<div class="son5">1</div>
<div class="son5">1</div>
<div class="son5">1</div>
</div>
</body>
</html>
- align-items设置侧轴上的子元素的排列方式(单行)
|属性值|说明|
|–|--|
| flex-start | 从上到下 |
| flex-end | 从下到上 |
| center | 挤在一起居中(垂直居中) |
| stretch | 拉伸(默认值) |
*注意:*拉伸时子盒子不要给高度 - align-content 设置侧轴上子元素的排列方式(多行)
此属性只能用于子元素换行,为多行时用,在单行下是没有效果的
|属性值| 说明 |
|–|--|
| flex-start | 从侧轴头部开始 |
|flex-end| 从尾部开始排列 |
| center | 在侧轴中间显示 |
| space-around |子项在侧轴平分剩余空间|
|space-between| 先贴两边,在平分剩余空间(important) |
|stretch|设置子项元素高度平分父元素高度 | - flex-flow
此属性是flex-direction和flex-wrap的复合属性
eg:flex-flow:row wrap;(默认) - flex布局子项常见的属性、
1.flex属性
flex属性定义子项分配剩余空间,用flex来表示占多少份
.itmes{
flex: <number>;/*default:0*/
}
- align-self控制子项自己在侧轴上的排列方式
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-self属性。默认为auto,表示继承父元素的align-items属性,若没有父元素,则等同于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>
.father {
display: flex;
align-items: center;
width: 100%;
height: 100px;
background-color: darkkhaki;
}
div[class^=son]{
width: 200px;
height: 50px;
background-color: darkmagenta;
}
.father div:nth-child(3){
/* 让第三个子元素下边对齐 */
align-self: flex-end;
}
</style>
</head>
<body>
<div class="father">
<div class="son1">1</div>
<div class="son2">1</div>
<div class="son3">1</div>
<div class="son4">1</div>
<div class="son5">1</div>
</div>
</body>
</html>
3. order属性定义项目的排列顺序
数值越小,排列越靠前,默认为0;
注意:和z-index不一样
<!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>
.father {
display: flex;
justify-content: space-between;
width: 100%;
height: 100px;
background-color: darkkhaki;
}
div[class^=son]{
width: 200px;
height: 50px;
background-color: darkmagenta;
}
</style>
</head>
<body>
<div class="father">
<div class="son1" style="order: 5; background-color:red">1</div>
<div class="son2" style="order: 2; background-color:green">2</div>
<div class="son3" style="order: 4; background-color:skyblue">3</div>
<div class="son4" style="order: 3; background-color:yellow">4</div>
<div class="son5">5</div>
</div>
</body>
</html>