flex布局简化了前端布局问题,例如垂直居中,水平居中等,且目前为止主流浏览器都支持了这种布局,特别是移动端的浏览器,支持度更好。下面是在can i use上查询的结果。从查询的结果来看,支持IE10及以上浏览器,移动端几乎全线支持!css
flex布局意思是“弹性布局”,块级元素和行内元素均可以设置为flex布局。html
DOM结构前端
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
...
</div>
复制代码
块级元素设置flex布局web
.flex-container{
display:flex;
display: -webkit-flex; /* Safari */
display: -ms-flex; /* IE10+ */
}
复制代码
行内元素设置flex布局浏览器
.flex-container{
display:-webkit-inline-box;
display:-ms-inline-flexbox; /* IE10+ */
display:inline-flex; /* Safari */
}
复制代码
flex布局通常包含容器(flex-container)和若干个子元素(flex-item),布局上分为主轴和交叉轴。默认状况下,水平方向为主轴,垂直方向为交叉轴,能够经过设置flex-direction
切换主轴和交叉轴(稍后会讲解如何切换)。flex布局的属性比较多,但能够归类为 容器属性 和 子元素属性,教程会先讲解容器的属性,而后讲解子元素的属性,这样比较容易理解和记忆!网络
flex有6个属性能够设置,它们分别是:布局
DOM结构字体
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
</div>
复制代码
CSS样式flex
.flex-container{
display:flex;
flex-direction: row | row-reverse | column | column-reverse | initial | inherit;
}
复制代码
initial,初始值,和默认值效果同样,这里再也不贴图。flexbox
inherit,继承父容器的值,主要在嵌套使用flex布局会用到,父容器设置什么,它就是什么,效果和上面的其中一种相同,这里再也不贴图
DOM结构
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
<div class="flex-item">5</div>
<div class="flex-item">6</div>
<div class="flex-item">7</div>
<div class="flex-item">8</div>
</div>
复制代码
CSS样式
.flex-container{
display:flex;
flex-wrap : nowrap | wrap | wrap-reverse | initial | inherit;
}
复制代码
flex-flow 属性是 flex-direction 和 flex-wrap 属性的复合属性,用于设置或检索弹性盒模型对象的子元素排列方式。flex-direction 属性规定方向, flex-wrap 属性规定是否拆行或拆列。
DOM结构
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
<div class="flex-item">5</div>
<div class="flex-item">6</div>
<div class="flex-item">7</div>
<div class="flex-item">8</div>
</div>
复制代码
CSS样式
.flex-container{
display:flex;
flex-flow: flex-direction flex-wrap | initial | inherit;
}
复制代码
justify-content属性用于设置主轴上元素的排列方式。
DOM结构
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
</div>
复制代码
CSS样式
.flex-container{
display:flex;
justify-content: flex-start | flex-end | center | space-between | space-around | initial | inherit;
}
复制代码
justify-content属性用于设置交叉轴上元素的排列方式。
DOM结构
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
</div>
复制代码
CSS样式
.flex-container{
display:flex;
height: 300px; /* 设置高度,才能看到效果 */
align-items: stretch | center | flex-start | flex-end | baseline | initial | inherit;
}
复制代码
align-content规定flex-container有剩余空间时,如何分配给子元素。这个属性设置的是全部子元素的对齐方式,须要设置flex-wrap(wrap或wrap-reverse),而且指定flex-container的高度(或宽度)才会生效。
DOM结构
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
<div class="flex-item">5</div>
<div class="flex-item">6</div>
<div class="flex-item">7</div>
<div class="flex-item">8</div>
</div>
复制代码
CSS样式
.flex-container{
display: flex;
background: #eeeeee;
align-content: center;
height: 300px;
flex-wrap: wrap | wrap-reverse;
align-content: stretch | center | flex-start | flex-end | space-between | space-around | initial | inherit;
}
复制代码
flex子属性有6个属性能够设置,它们分别是:
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
DOM结构
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">-1</div>
<div class="flex-item">0</div>
<div class="flex-item">未设置order</div>
</div>
复制代码
CSS样式
.flex-container{
display:flex;
}
.flex-item{
order: number | initial | inherit;
}
复制代码
DOM结构
<div class="flex-container">
<div class="flex-item">0</div>
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
</div>
复制代码
CSS样式
.flex-container {
display: flex;
background: #eeeeee;
}
.flex-item {
flex-grow: flex-grow: number | initial | inherit;
}
复制代码
DOM结构
<div class="flex-container">
<div class="flex-item">0</div>
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
<div class="flex-item">5</div>
<div class="flex-item">6</div>
<div class="flex-item">7</div>
</div>
复制代码
CSS样式
.flex-container {
display: flex;
background: #eeeeee;
}
.flex-item {
background: #b48882;
flex-shrink: number | initial | inherit;
}
复制代码
flex-basis属性用于设置子元素的伸缩基准值,默认值为auto,即元素自己的大小。若是子元素同时设置宽高和flex-basis属性,flex-basis的优先级更高。
DOM结构
<div class="flex-container">
<div class="flex-item">width:100px</div>
<div class="flex-item">flex-basis: 200px;</div>
<div class="flex-item">flex-basis: 300px;</div>
<div class="flex-item">flex-basis: 400px;</div>
</div>
复制代码
CSS样式
.flex-container {
display: flex;
background: #eeeeee;
}
.flex-item{
flex-basis: auto | number | initial | inherit;
}
复制代码
flex属性是flex-grow、flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。flex支持缩写,例如常常用到的:flex: 1
,等价于flex: 1 1 0%
。
DOM结构
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
</div>
复制代码
CSS样式
.flex-container {
display: flex;
background: #eeeeee;
}
.flex-item{
display: flex;
justify-content: center;
align-items: center;
width: 100px;
height: 100px;
margin: 5px;
flex: flex-grow [flex-shrink] [flex-basis] | auto | none | 1 | 0 | initial | inherit;
}
复制代码
flex:1
,等价于flex: 1 1 0%
flex: 0
,等价于 flex: 0 1 0%
flex: auto
,等价于flex: 1 1 auto
flex: none
,等价于flex: 0 0 auto
flex: 0%
等价于flex: 1 1 0%
,设置的是flex-basis
的值flex:2 3
等价于flex 2 3 0%
(下图给第一个子元素设置flex:2 3
)。flex: 2 200px
等价于 flex: 2 1 200px
(下图给第一个子元素设置flex:2 200px
)。align-self 容许单个子元素设置与其余项目不同的对齐方式,默认值:auto。 DOM结构
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
</div>
复制代码
CSS样式
.flex-container {
display: flex;
background: #eeeeee;
height:300px;
}
.flex-item{
display: flex;
justify-content: center;
align-items: center;
width: 100px;
height: 100px;
margin: 5px;
align-self: auto | stretch | center | flex-start | flex-end | baseline | initial | inherit;
}
复制代码
font-size:60px;height:auto
)最后,奉献一个九宫格布局的例子:codepen.io/linlif/pen/…,效果图以下:
本文完
参考资料: 30 分钟学会 Flex 布局 Flex 布局语法教程