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 佈局語法教程