再次簡單明瞭總結flex佈局,一看就懂...

sponing發表於2019-02-26

思維導圖

再次簡單明瞭總結flex佈局,一看就懂...

flex 佈局

型別

  •  display: flex;(本文章為此為主)
  •  display;inline-flex;

屬性

  • 父節點 容器flex-container
  • 子節點 flex-item

父節點容器

  1. flex-direction          主軸方向(一般水平方向)
  2. flex-warp                 處理一行排列不足的問題
  3. flex-flow                  1和2的簡寫(flex-flow: row nowrap)
  4. justify-content        主軸(水平方向)對齊方式
  5. align-items              與主軸的交叉軸(豎方向)對齊方式
  6. align-content          多行在交叉軸軸上的對齊方式

子節點專案

  1. order                            值是整數,預設為0,整數越小,item排列越靠前
  2. flex-grow                      是其他item的放大倍數
  3. flex-shrink                    但空間不足,按照比例被消化, 需在父節點容器中設定flex-basis寬度
  4. flex-basis                      規定item專案的寬度
  5. flex                               是flex-grow flex-shrink flex-basis的總和
  6. align-self                      允許item自己在交叉軸(豎方向)有對齊方式

父節點容器

  1. flex-direction          主軸方向(一般水平方向)
  2. flex-warp                 處理一行排列不足的問題
  3. flex-flow                  1和2的簡寫(flex-flow: row nowrap)
  4. justify-content        主軸(水平方向)對齊方式
  5. align-items              與主軸的交叉軸(豎方向)對齊方式
  6. align-content          多行在交叉軸軸上的對齊方式

html案例程式碼:

<div class="flex-container">
	<div class="flex-item red">
		1
	</div>
	<div class="flex-item green">
		2
	</div>
	<div class="flex-item yellow">
		3
	</div>
	<div class="flex-item black">
		4
	</div>
</div>
複製程式碼

css案例程式碼:

	html,body{
		background: #f7f7f7;
	}
	.flex-container{
		display: flex
		color: #fff;
	}
	.flex-item{
		width: 150px;
        height: 100px;
	}
	.red{
		background: red;
	}
	.green{
		background: green;
	}
	.yellow{
		background: yellow;
	}
	.black{
		background: black;
	}
複製程式碼

頁面如下:

image.png

flex-direction

決定主軸(一般是x軸)的方向,即專案排列的方向,有四個可能的值:row(預設)| row-reverse | column | column-reverse


  • row:主軸為水平方向,專案沿主軸從左至右排列
  • column:主軸為豎直方向,專案沿主軸從上至下排列
  • row-reverse:主軸水平,專案從右至左排列,與row反向
  • column-reverse:主軸豎直,專案從下至上排列,與column反向
.flex-container{
		display: flex;
		height: 100px;
    flex-direction: row; /* 1 */
    flex-direction: row-reverse; /*  2 */
    flex-direction: column; /*  3 */
    flex-direction: column-reverse;/* 4*/
		color: #fff;
}
.flex-item{
	flex: 1
}
複製程式碼

再次簡單明瞭總結flex佈局,一看就懂...

flex-wrap

預設情況下,item排列在一條線上,即主軸上,flex-wrap決定當排列不下時是否換行以及換行的方式,可能的值nowrap(預設) | wrap | wrap-reverse

  • nowrap:自動縮小專案,不換行
  • wrap:換行,且第一行在上方
  • wrap-reverse:換行,第一行在下面
.flex-container{
    display: flex;
    color: #fff;
    flex-wrap: nowrap; /* 1 */
    flex-wrap: wrap; /* 2 */
    flex-wrap: wrap-reverse; /* 3 */
}
.flex-item{
    width: 150px;
    height: 100px;
}
.red{
    width: 300px;   
}
複製程式碼

備註: flex-item寬度定義分別是300px 150px 150px 150px;  所以按照比例2:1:1:1來分割父節點寬度,實際寬度為 150px 75px 75px 75px (合計375px)

再次簡單明瞭總結flex佈局,一看就懂...

flex-flow

是flex-direction和flex-wrap的簡寫形式,如:row wrap | column wrap-reverse等。預設值為row nowrap,即橫向排列 不換行。

.flex-container{
    flex-flow: row nowrap;
}
複製程式碼

組合:

flex-flow nowrap wrap wrap-reverse
row 1、row nowrap 5、row wrap 9、row wrap-reverse
column 2、column nowrap 6、column wrap 10、column wrap-reverse
row-reverse 3、row-reverse nowrap 7、row-reverse wrap 11、row-reverse wrap-reverse
column-reverse 4、column-reverse nowrap 8、column-reverse wrap 12、column-reverse wrap-reverse

第一種:當flex-wrap設定為nowrap時,屬性(寬度比例,非px實際寬度)按照flex-direction來排列

再次簡單明瞭總結flex佈局,一看就懂...

第二種:當flex-wrap設定為wrap時,item則按照實際寬度排列,不足則到下行

再次簡單明瞭總結flex佈局,一看就懂...

第三種:當flex-wrap設定為wrap-reverse時, item則按照實際寬度排列,不足則到上行

再次簡單明瞭總結flex佈局,一看就懂...

justify-content

非常重要,決定item在主軸上的對齊方式,可能的值有flex-start(預設),flex-end,center,space-between,space-around。

當主軸沿水平方向時,具體含義為

  • flex-start:左對齊
  • flex-end:右對齊
  • center:居中對齊
  • space- between:兩端對齊
  • space-around:沿軸線均勻分佈

備註: 當專案item不滿父節點item-container時,flex-start, flex-end不起到作用

.flex-container{
    justify-content: flex-start; /* 1 */
    justify-content: flex-end; /* 2 */
    justify-content: center; /* 3 */
    justify-content: space-between; /* 4 */
    justify-content: space-around; /* 5 */
}
.flex-item{
    width: 50px;
    height:50px;
}
複製程式碼

再次簡單明瞭總結flex佈局,一看就懂...

align-items

決定了item在交叉軸上(Y軸)的對齊方式,可能的值有flex-start | flex-end | center | baseline | stretch

當主軸水平(Y軸)時,其具體含義為:

  • flex-start:頂端對齊
  • flex-end:底部對齊
  • center:豎直方向上居中對齊
  • baseline:item第一行文字的底部對齊
  • stretch:當item未設定高度時,item將和容器等高對齊

備註:父節點flex-container與子節點flex-item存在高度差,才能起到作用

.flex-container{
    height: 200px;
    align-items: flex-start; /* 1 */
    align-items: flex-end; /* 2 */
    align-items: center; /* 3 */
    align-items: baseline; /* 4 */
    align-items: stretch; /* 5 */
}
.flex-item{
    height: 100px;
}
.red,.green{
    font-size: 14px;
}
複製程式碼

再次簡單明瞭總結flex佈局,一看就懂...

align-content

該屬性定義了當有多根主軸時,即item不止一行時,多行在交叉軸軸上的對齊方式。注意當有多行時,定義了align-content後,align-items屬性將失效。

align-content可能值含義如下(假設主軸為水平方向):

  • flex-start:左對齊
  • flex-end:右對齊
  • center:居中對齊
  • space- between:兩端對齊
  • space-around:沿軸線均勻分佈
  • stretch:各行將根據其flex-grow值伸展以充分佔據剩餘空間

備註:1、設定flex-wrap:wrap,不然預設nowrap按照比例排滿一行。
2、父節點flex-container與子節點flex-item存在高度差,才能起到作用

.flex-container{
    flex-wrap: wrap;
    height:300px;
    background: #969799;
    align-content: flex-start; /* 1 */
    align-content: flex-end; /* 2 */
    align-content: center; /* 3 */
    align-content: space-between; /* 4 */
    align-content: space-between; /* 5 */
    align-content: stretch; /* 6 */
}
複製程式碼

再次簡單明瞭總結flex佈局,一看就懂...

子節點專案

item的屬性在item的style中設定。item共有如下六種屬性

order

order的值是整數,預設為0,整數越小,item排列越靠前

.flex-container{
    flex-flow: wrap;
}
.flex-items{
  order:1;
}
複製程式碼

flex-grow

定義了當flex容器有多餘空間時,item是否放大。預設值為0,即當有多餘空間時也不放大;可能的值為整數,表示不同item的放大比例

備註:item專案未規定寬度,則分配一行寬度,即使規定了寬度也分配多餘空間

.flex-item{
	flex-grow: 1;
}
/* 1 */
.flex-contanier{
	flex-wrap: wrap;
}
/* 2 */
.flex-contanier{
	flex-wrap: nowrap;
}
複製程式碼

再次簡單明瞭總結flex佈局,一看就懂...

flex-shrink

定義了當容器空間不足時,item是否縮小。預設值為1,表示當空間不足時,item自動縮小,其可能的值為整數,表示不同item的縮小比例。

備註:這個比較懵逼,待解析

flex-basis

表示專案在主軸上佔據的空間,預設值為auto。

.red{
	flex-basis: 100px;
}
.green {
	flex-basis: 100px;
}
複製程式碼

再次簡單明瞭總結flex佈局,一看就懂...

flex

flex屬性是flex-grow、flex-shrink和flex-basis三屬性的簡寫總和

具體檢視以上三個

align-self

align-self屬性允許item有自己獨特的在交叉軸上的對齊方式,它有六個可能的值,預設值為auto

  • auto:和父元素align-self的值一致
  • flex-start:頂端對齊
  • flex-end:底部對齊
  • center:豎直方向上居中對齊
  • baseline:item第一行文字的底部對齊
  • stretch:當item未設定高度時,item將和容器等高對齊

備註:與父節點flex-container中的align-item, align-content同個意思,不同的是align設定的是單個的,而align-items設定的

.green{
    align-self: auto;
    align-self: flex-start;
    align-self: flex-end;
    align-self: center;
    align-self: baseline;
    align-self: stretch;
}
複製程式碼

再次簡單明瞭總結flex佈局,一看就懂...

備註:align-self: baseline;   align-self: stretch; 與1 2一樣在此不做多介紹,可以參考align-items

總結

在實際專案中,關於flex這麼多屬性,能用到的比較少,常用的就那幾個,記住這幾個基本在專案開發中能夠很好的實現佈局

常用屬性

  • justify-content
  • align-items
  • flex
屬性 場景 常用值
justify-content 水平居中,左右浮動,左右間隙分開 flex-end center space- between space- around
align-items 垂直居中 center
flex item子元素的寬度比例分配 flex:1 1 100px / flex: 2等等

有不足之處,請評論留言... 謝謝

相關文章