1.Flex容器属性
- 基本用法 设置父容器为
display: flex
PS:如果想要容器以行内元素展示,则将其设定为
display: inline-flex
flex布局可以让块级子元素排列在同一行
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<style>
*{
padding: 0;
margin: 0;
}
ul{
margin: 20px auto;
list-style: none;
width: 500px;
height: 200px;
border: 1px solid red;
/* 设置为flex容器 */
display: flex;
}
ul>li{
width: 100px;
height: 100px;
line-height: 100px;
text-align: center;
color:#fff;
font-size: 30px;
}
</style>
<body>
<ul>
<li style="background-color: red">1</li>
<li style="background-color: green">2</li>
<li style="background-color: blue">3</li>
<li style="background-color: pink">4</li>
</ul>
</body>
</html>
效果:
2.设置子元素在(主轴)水平方向的对齐方式 justify-content
它有5个可能的值:
flex-start:默认,左对齐,子元素在左边,空白在右边
flex-end:右对齐,子元素在右边,空白在左边
center:居中对齐,子元素在中间,空白在两边
space-between:第一个和最后一个子元素占据两端,中间区域用空白均分隔开
space-around:子元素均分所有空白
3.设置子元素在交叉轴(垂直方向)的对齐方式 align-items
推荐子元素只有一排时使用
它有5个可能的值:
flex-start:顶对齐,子元素在顶部,空白在底部
flex-end:底对齐,子元素在底部,空白在顶部
center:居中对齐,子元素在中间,空白在两边
baseline: 项目的第一行文字的基线对齐
stretch:默认,拉伸,如果项目未设置高度或设为auto将占满整个容器的高度
如果子元素位设定高度或高度位auto,他将占满整个容器的高度,如果子元素有高度,则默认顶对齐
4.换行和排列方向
flex-wrap属性:如果子元素在一条轴线排列不下,是否换行?如何换行?
flex-direction属性:设置主轴的方向(默认为水平方向)
元素排序的方向就是主轴方向,元素排列不下需要需要换行时的方向就是交叉轴方向
它有4个可能的值:
row:水平方向(默认),从左到右排列
column:垂直方向,从上到下排列
row-reverse:水平反转
column-reverse:垂直反转
flex-wrap和flex-direction 可以简写成flex-flow
例如
flex-flow: row wrap
5.align-content属性:定义多根轴线的对齐方式
推荐有多排子元素时使用(处理换行时的间隔)
注意:align-content与align-items不能同时设置
6.子元素的属性
- flex-grow属性:定义项目的放大比例
如果同一行的子元素未填满那一整行的话,子元素之间就会有间隔存在,flex-grow可以吸收这些间隔来扩展自己的宽度。
默认值为0,可以是小数,子元素根据这个属性的值按比例划分剩余空间。
语法:flex-grow:number
如果父容器一共有3个子元素,他们flex-grow分别为a,b,c,他们均分空白间隙空间的公式为
剩余空白空间 * a / (a+b+c)
剩余空白空间 * b / (a+b+c)
剩余空白空间 * c / (a+b+c)
- flex-shrink 定义缩小的比例
语法:flex-shrink:number
如果设置了子元素不换行,当子元素的大小超出flex容器时,子元素就会自动收缩。
这个属性默认值为1,即所有的子元素收缩的比例一致,可以为每个子元素单独设置新的数值
如果所有项目都为0,则当空间不足时,项目撑破容器而溢出
下面的实例中,本来每个子元素都是正方形,即宽高都是100px,5个子元素总宽度就是500px,而flex容器只有400px,少了100px,而每个元素的 flex-shrink都为1,所以每个子元素都缩小 100/5=20px 最后每个元素的宽度为80px
但如果5个子元素的 flex-shrink值分别为 0/1/0/1/0
- order 属性
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
- 简写
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
通常元素需要占据剩余空间的情况居多,这时候直接设置flex属性值即可,而不用写flex-grow - align-self属性
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖父元素的align-items属性
可选值与align-items一致
flex-start:默认,顶对齐,子元素在顶部,空白在底部
flex-end:底对齐,子元素在底部,空白在顶部
center:居中对齐,子元素在中间,空白在两边
baseline: 项目的第一行文字的基线对齐
stretch:拉伸,如果项目未设置高度或设为auto,将占满整个容器的高度。
li:nth-of-type(1){
align-self:center;
}