- CSS flex 属性
- 一、声明定义
- 1 声明块级弹性盒子 display:flex
- 2 声明内联级弹性盒子 display:inline-flex
- 二、flex-direction:用于控制盒子元素排列的方向
- row-reverse 从右向左排列元素
- column-reverse 从下到上垂直排列元素
- 三、flex-wrap
- 行元素换行 row 、wrap
- 水平排列反向换行 row 、wrap-reverse
- 垂直元素换行 column 、wrap
- 垂直元素反向换行 column wrap-reverse
- 四、flex-flow
- 轴说明
- 水平排列
- 垂直排列
- justify-content
- 水平排列元素,并使用 justify-content: flex-end 对齐到主轴终点
- 使用 space-evenly 平均分配容器元素
- 垂直排列时对齐到主轴终点
- 交叉轴行
- align-items 用于控制容器元素在交叉轴上的排列方式
- (1)横向排列
- (2)纵向排列
- align-content 只适用于多行显示的弹性容器,用于控制行(而不是元素)在交叉轴上的排列方式
- 水平排列在交叉轴中居中排列
- 垂直排列时交叉轴的排列
- 弹性元素
- 1. align-self
flex 属性用于设置或检索弹性盒模型对象的子元素如何分配空间。
flex 属性是 flex-grow、flex-shrink 和 flex-basis 属性的简写属性。
注意:如果元素不是弹性盒模型对象的子元素,则 flex 属性不起作用。
让所有弹性盒模型对象的子元素都有相同的长度,且忽略它们内部的内容:
DOCTYPE html>
菜鸟教程(runoob.com)
#main
{
width:220px;
height:300px;
border:1px solid black;
display:flex;
}
#main div
{
flex:1;
}
红色
蓝色
带有更多内容的绿色 div
注意: Internet Explorer 9 及更早版本不支持 flex 属性。
注意: Internet Explorer 10 通过 -ms-flex 属性来支持。 IE11 及更新版本完全支持 flex 属性 (不需要 -ms- 前缀)。
注意: Safari 6.1 (及更新浏览器) 通过 -webkit-flex 属性支持。
容器盒子里面包含着容器元素,使用 display:flex
或 display:inline-flex
声明为弹性盒子。
DOCTYPE html>
* {
padding: 0;
margin: 0;
}
article {
height: 150px;
margin-left: 100px;
margin-top: 100px;
outline: solid 5px silver;
display: flex;
padding: 20px;
}
article div {
outline: solid 5px orange;
text-align: center;
font-size: 28px;
line-height: 5em;
width: 300px;
}
1
2
3
DOCTYPE html>
* {
padding: 0;
margin: 0;
}
article {
height: 150px;
margin-left: 100px;
margin-top: 100px;
outline: solid 5px silver;
display: inline-flex;
padding: 20px;
}
article div {
outline: solid 5px orange;
text-align: center;
font-size: 28px;
line-height: 5em;
width: 300px;
}
1
2
3
使用在 display:flex
的父容器里,改变横轴的方向:
DOCTYPE html>
* {
padding: 0;
margin: 0;
}
body {
margin: 100px;
font-size: 14px;
color: #555;
}
article {
width: 500px;
border: solid 5px silver;
display: flex;
box-sizing: border-box;
padding: 10px;
/* row-reverse 从右向左排列元素 */
flex-direction: row-reverse;
}
article * {
border: solid 5px orange;
padding: 10px;
margin: 10px;
}
1
2
3
DOCTYPE html>
* {
padding: 0;
margin: 0;
}
body {
margin: 100px;
font-size: 14px;
color: #555;
}
article {
width: 500px;
border: solid 5px silver;
display: flex;
box-sizing: border-box;
padding: 10px;
/* column-reverse 从下到上垂直排列元素 */
flex-direction: column-reverse;
}
article * {
border: solid 5px orange;
padding: 10px;
margin: 10px;
}
1
2
3
规定 flex 容器是单行或者多行,同时横轴的方向决定了新行堆叠的方向。
选项说明nowrap元素不拆行或不拆列(默认值)wrap容器元素在必要的时候拆行或拆列。wrap-reverse容器元素在必要的时候拆行或拆列,但是以相反的顺序 行元素换行 row 、wrapDOCTYPE html>
* {
padding: 0;
margin: 0;
outline: solid 1px silver;
padding: 10px;
margin: 10px;
}
head {
display: block;
background:#eee;
}
body {
font-size: 14px;
color: #555;
}
article {
width: 500px;
height: 250px;
border: solid 5px silver;
box-sizing: border-box;
padding: 10px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
article div {
border: solid 5px orange;
padding: 30px 80px;
margin: 10px;
text-align: center;
font-size: 28px;
}
1
2
3
flex-direction: row;
flex-wrap: wrap-reverse;
DOCTYPE html>
* {
padding: 0;
margin: 0;
outline: solid 1px silver;
padding: 10px;
margin: 10px;
}
head {
display: block;
background:#eee;
}
body {
font-size: 14px;
color: #555;
}
article {
width: 500px;
height: 250px;
border: solid 5px silver;
box-sizing: border-box;
padding: 10px;
display: flex;
flex-direction: row;
flex-wrap: wrap-reverse;
}
article div {
border: solid 5px orange;
padding: 30px 80px;
margin: 10px;
text-align: center;
font-size: 28px;
}
1
2
3
垂直元素换行 column 、wrap
flex-direction: column;
flex-wrap: wrap;
DOCTYPE html>
* {
padding: 0;
margin: 0;
outline: solid 1px silver;
padding: 10px;
margin: 10px;
}
head {
display: block;
background:#eee;
}
body {
font-size: 14px;
color: #555;
}
article {
width: 500px;
height: 350px;
border: solid 5px silver;
box-sizing: border-box;
padding: 10px;
display: flex;
flex-direction: column;
flex-wrap: wrap;
}
article div {
border: solid 5px orange;
padding: 30px 80px;
margin: 10px;
text-align: center;
font-size: 28px;
}
1
2
3
垂直元素反向换行 column wrap-reverse
flex-direction: column;
flex-wrap: wrap-reverse;
DOCTYPE html>
* {
padding: 0;
margin: 0;
outline: solid 1px silver;
padding: 10px;
margin: 10px;
}
head {
display: block;
background:#eee;
}
body {
font-size: 14px;
color: #555;
}
article {
width: 500px;
height: 350px;
border: solid 5px silver;
box-sizing: border-box;
padding: 10px;
display: flex;
flex-direction: column;
flex-wrap: wrap-reverse;
}
article div {
border: solid 5px orange;
padding: 30px 80px;
margin: 10px;
text-align: center;
font-size: 28px;
}
1
2
3
四、flex-flow
是 flex-direction
与 flex-wrap
的组合简写模式。
下面是从右向左排列,换行向上拆分行。
DOCTYPE html>
* {
padding: 0;
margin: 0;
outline: solid 1px silver;
padding: 10px;
margin: 10px;
}
head {
display: block;
background:#eee;
}
body {
font-size: 14px;
color: #555;
}
article {
width: 500px;
height: 350px;
border: solid 5px silver;
box-sizing: border-box;
padding: 10px;
display: flex;
flex-flow: row-reverse wrap-reverse;
}
article div {
border: solid 5px orange;
padding: 30px 80px;
margin: 10px;
text-align: center;
font-size: 28px;
}
1
2
3
4
轴说明
水平排列
下面是使用 flex-flow: row wrap
的主轴与交叉轴说明。 下面是使用
flex-flow: row-reverse wrap-reverse
的主轴与交叉轴说明。
下面是使用 flex-flow: column wrap
的主轴与交叉轴说明。
用于控制元素在主轴上的排列方式,再次强调是主轴的排列方式。
选项说明flex-start元素紧靠主轴起点flex-end元素紧靠主轴终点center元素从弹性容器中心开始space-between第一个元素靠起点,最后一个元素靠终点,余下元素平均分配空间space-around每个元素两侧的间隔相等。所以,元素之间的间隔比元素与容器的边距的间隔大一倍space-evenly元素间距离平均分配 水平排列元素,并使用 justify-content: flex-end 对齐到主轴终点DOCTYPE html>
* {
padding: 0;
margin: 0;
padding: 10px;
margin: 10px;
}
body {
font-size: 14px;
color: #555;
}
article {
border: solid 5px silver;
box-sizing: border-box;
display: flex;
flex-flow: row wrap;
justify-content: flex-end;
}
article div {
width: 80px;
border: solid 5px orange;
text-align: center;
font-size: 28px;
}
1
2
3
4
使用 space-evenly 平均分配容器元素
flex-flow: row wrap;
justify-content: space-evenly;
DOCTYPE html>
* {
padding: 0;
margin: 0;
padding: 10px;
margin: 10px;
}
body {
font-size: 14px;
color: #555;
}
article {
border: solid 5px silver;
box-sizing: border-box;
display: flex;
flex-flow: row wrap;
justify-content: space-evenly;
}
article div {
width: 80px;
border: solid 5px orange;
text-align: center;
font-size: 28px;
}
1
2
3
4
垂直排列时对齐到主轴终点
flex-flow: column wrap;
justify-content: flex-end;
DOCTYPE html>
* {
padding: 0;
margin: 0;
padding: 10px;
margin: 10px;
}
body {
font-size: 14px;
color: #555;
}
article {
border: solid 5px silver;
box-sizing: border-box;
display: flex;
flex-flow: column wrap;
justify-content: flex-end;
}
article div {
width: 80px;
border: solid 5px orange;
text-align: center;
font-size: 28px;
}
1
2
3
4
交叉轴行
align-items 用于控制容器元素在交叉轴上的排列方式
选项说明stretch元素被拉伸以适应容器(默认值)center元素位于容器的中心flex-start元素位于容器的交叉轴开头flex-end元素位于容器的交叉轴结尾
(1)横向排列
拉伸适应交叉轴
如果设置了 width | height | min-height | min-width | max-width | max-height
,将影响stretch 的结果,因为 stretch
优先级低于你设置的宽高。
DOCTYPE html>
* {
padding: 0;
margin: 0;
padding: 10px;
margin: 5px;
}
head {
display: block;
}
body {
font-size: 14px;
color: #555;
}
article {
height: 200px;
border: solid 5px silver;
box-sizing: border-box;
display: flex;
flex-direction: row;
align-items: stretch;
}
article div {
width: 80px;
border: solid 5px orange;
text-align: center;
font-size: 28px;
}
1
2
3
4
对齐到交叉轴的顶部
flex-direction: row;
align-items: flex-start;
对齐到交叉轴底部
flex-direction: row;
align-items: flex-end;
对齐到交叉轴中心
flex-direction: row;
align-items: center;
纵向排列时交叉轴排列
DOCTYPE html>
* {
padding: 0;
margin: 0;
padding: 10px;
margin: 5px;
}
article {
height: 400px;
border: solid 5px silver;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: center;
}
article div {
height: 50px;
min-width: 100px;
border: solid 5px orange;
text-align: center;
font-size: 28px;
}
1
2
3
4
align-content 只适用于多行显示的弹性容器,用于控制行(而不是元素)在交叉轴上的排列方式
选项说明stretch将空间平均分配给元素flex-start元素紧靠主轴起点flex-end元素紧靠主轴终点center元素从弹性容器中心开始space-between第一个元素靠起点,最后一个元素靠终点,余下元素平均分配空间space-around每个元素两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍space-evenly元素间距离平均分配
水平排列在交叉轴中居中排列
DOCTYPE html>
* {
padding: 0;
margin: 0;
padding: 10px;
margin: 5px;
}
article {
height: 300px;
border: solid 5px silver;
box-sizing: border-box;
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: flex-start;
align-content: center;
}
article div {
width: 90px;
border: solid 5px orange;
text-align: center;
font-size: 28px;
}
1
2
3
4
垂直排列时交叉轴的排列
flex-direction: column;
flex-wrap: wrap;
align-items: flex-start;
align-content: center;
放在容器盒子中的元素即为容器元素。
不能使用 float 与 clear 规则
弹性元素均为块元素
绝对定位的弹性元素不参与弹性布局
1. align-self
用于控制单个元素在交叉轴上的排列方式,align-items
用于控制容器中所有元素的排列,而 align-self
用于控制一个弹性元素的交叉轴排列。
DOCTYPE html>
* {
padding: 0;
margin: 0;
padding: 10px;
margin: 5px;
}
article {
height: 400px;
border: solid 5px silver;
box-sizing: border-box;
display: flex;
flex-direction: row;
align-items: center;
}
article div {
height: 50px;
min-width: 50px;
border: solid 5px orange;
text-align: center;
font-size: 28px;
}
article div:nth-of-type(1) {
/* 元素紧靠主轴起点 */
align-self: flex-start;
}
article div:nth-of-type(3) {
/* 元素紧靠主轴终点 */
align-self: flex-end;
}
1
2
3
4