什么是flex
使用flex的元素就叫做容器,容器默认存在2条轴线,主轴线(main axis)和垂直的交叉轴线(cross axis)。轴线开始的位置被叫做main/cross start,结束的位置被叫做main/cross end。项目是沿着主轴线开始、结束方向排列的。
知识点
1、flex-direction
设置容器的主轴方向和主轴的起点
flex-direction: row; // (默认值)主轴为水平方向,起点在左侧
flex-direction: row-reverse; // 主轴为水平方向,起点在右侧
flex-direction: column; // 主轴为垂直方向,起点在顶部
flex-direction: column-reverse; // 主轴为垂直方向,起点在底部
2、flex-wrap
设置如果一条轴线上排满了是否换行,是否在来一条轴线
flex-wrap: nowrap; // (默认值)设置不换行,就挤着
flex-wrap: wrap; // 换行,按顺序第一行从交叉轴线起点端开始排列
flex-wrap: wrap-reverse; // 换行,但是被后来居上了,第一行从交叉轴线结束端开始排列
3、justify-content
设置项目在主轴方向的排列方式
justify-content: flex-start; //(默认值)主轴线起点对齐
justify-content: flex-end; // 主轴线终点对齐
justify-content: center; // 主轴线中心对齐
justify-content: space-between; // 主轴线两端对齐,项目间距相等
justify-content: space-around; // 项目两侧间距相等,所以项目间距是两端间距2倍
justify-content: space-evenly; // 项目间距相等,与两端间距也相等
4、align-items
设置项目在交叉轴上的排列对齐方式
align-items: flex-start; //交叉轴的起点对齐
align-items: flex-end; //交叉轴的终点对齐。
align-items: center; //交叉轴居中对齐。
align-items: baseline; //项目的第一行文字的基线对齐。
align-items: stretch; //如果项目未设置高度或设为auto,将占满整个容器的高度。
5、align-content
设置多轴线的在交叉轴线上的对齐方式,只对多轴线起作用
align-content: flex-start; //与交叉轴的起点对齐。
align-content: flex-end; //与交叉轴的终点对齐
align-content: center; //与交叉轴中心对齐
align-content: space-between; //与交叉轴两端对齐
align-content: space-around; //每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
align-content: stretch; //(默认值)轴线占满整个交叉轴
6、flex-grow
用来定义项目的放大比例,也就是对剩余空间的分配能力。默认值是0,表示不参与分配。如果是2则表示比1的多分配1倍。
flex-grow: number; // default 0
7、flex-shrink
定义项目的缩小比例,如果项目空间不足,将会默认缩小,默认值为1.设置为0则不会缩小,负数无效等价于1。如果设置成2时,压缩效果翻倍。
flex-shrink: number; // default 1
8、flex-basis
定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto
flex-basis: length | auto; // default auto
9、flex
flex-grow、flex-shrink、flex-basis三个属性的缩写
flex: none | [ <'flex-grow'> <'flex-shrink'> <'flex-basis'> ]
示例
<ul class="list">
<li>111111</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
* {
margin: 0;
padding: 0;
list-style: none;
}
.list {
height: 400px;
border: 5px solid #555;
/*
display: flex:
开启弹性布局
flex: 1;
均分宽度
*/
display: flex;
/*
flex-direction:
指定主轴方向,起点在左端|水平方向,起点在右端|垂直方向,起点在上沿|垂直方向,起点在下沿
row | row-reverse | column | column-reverse;
*/
flex-direction: column;
/*
justify-content: 主轴方向对其方式 默认值左对齐
左对齐| 右对齐| 居中| 两端对其,项目之间间隔相等| 每个项目两侧的间隔相等
flex-start | flex-end | center | space-between | space-around;
*/
justify-content: center;
/*
align-items: 和主轴交叉方向对齐方式,
起点对齐| 终点对齐| 中点对齐| 基线对齐| 默认值
flex-start | flex-end | center | baseline | stretch;
*/
align-items: center;
}
.list li {
height: 40px;
flex: 1;
}
.list li:nth-child(1) {
background-color: #00a3ed;
}
.list li:nth-child(2) {
background-color: #9198e5;
}
.list li:nth-child(3) {
background-color: #e66465;
}
.list li:nth-child(4) {
background-color: #9198e5;
}
.list li:nth-child(5) {
background-color: #00a3ed;
}