flex佈局教程

flex 基本概念

flex佈局是W3C在2009年提出了一種彈性的自適應佈局方案,能夠簡便、完整、響應式地實現各類頁面佈局。目前,它已經獲得了全部瀏覽器的支持。 css

flex佈局
基本概念
flex的核心概念是 容器。其中容器包裹在外層的是父容器,內層的是子容器。容器默認存在兩根軸:水平的主軸 main axis和垂直的交叉軸 cross axis。主軸的開始位置與邊框的交叉點是 main start,結束位置是 main end;交叉軸的開始位置是 cross start,結束位置是 cross end。子容器默認沿主軸排列。每一個字容器佔據的主軸空間是 main size,佔據的交叉軸空間是 cross size。 使用 flex實現水平垂直居中。

.container {
	display: flex;
	justify-content: center;
	items-align: center;
}
複製代碼

父容器屬性

display: flex|inline-flex;
flex-direction: row | row-reverse | column | column-reverse;
flex-wrap: nowrap | wrap | wrap-reverse;
flex-flow: <‘flex-direction’> || <‘flex-wrap’>;
justify-content: flex-start | flex-end | center | space-between | space-around;
align-items: flex-start | flex-end | center | baseline | stretch;
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
複製代碼
display

設置容器爲flex佈局模式,其中flex爲塊級佈局,inline-flex爲行內佈局。瀏覽器

.container {
	display: flex;
}
複製代碼
flex-direction

flex-direction屬性決定了主軸的方向。默認方向是row便是left to right佈局

.container {
	flex-direction: row | row-reverse | column | column-reverse;
}
複製代碼

主軸方向

flex-wrap

flex-wrap屬性決定了當子元素沿軸線排列不下是否換行排列。flex

.container {
	flex-wrap: nowrap | wrap | wrap-reverse;
}
複製代碼
  • nowrap:不含行沿軸線排列。
  • wrap:從上到下換行排列。
  • wrap-reverse:從下到上換行排列。
flex-flow

flex-flow是屬性flex-directionflex-wrap的簡寫形式。spa

.container {
	flex-flow: <‘flex-direction’> || <‘flex-wrap’>;
}
複製代碼
justify-content

justify-content屬性決定了子元素沿主軸的對其方式。3d

.container {
	justify-content: flex-start | flex-end | center | space-between | space-around;
}
複製代碼
  • flex-start(默認值):沿main start開始方向左對齊。
  • flex-end:沿main end開始方向右對齊。
  • center:沿main axis中間居中。
  • space-between:沿main axis兩端對其,項目之間的間隔都相等。
  • space-around:沿main axis均勻分佈,每一個項目兩側的間隔相等,項目之間的間隔比項目與邊框的間隔大一倍。
align-items

align-items屬性決定了子元素沿交叉軸的對其方式。code

.container {
	align-items: flex-start | flex-end | center | baseline | stretch;
}
複製代碼
  • flex-start:cros start對齊。
  • flex-end:cros end對齊。
  • center:cros axis中點對齊。
  • baseline: 項目的第一行文字的基線對齊。
  • stretch(默認值):若是項目未設置高度或設爲auto,將佔滿整個容器的高度。
align-content

align-content屬性決定了多根軸線的對齊方式。cdn

.container {
	align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
複製代碼
  • flex-start:與cros axis的起點對齊。
  • flex-end:與cros axis的終點對齊。
  • center:與cros axis的中點對齊。
  • space-between:與cros axis兩端對齊,軸線之間的間隔平均分佈。
  • space-around:每根軸線兩側的間隔都相等。因此,軸線之間的間隔比軸線與邊框的間隔大一倍。
  • stretch(默認值):軸線佔滿整個交叉軸。

子容器屬性

order: <integer>;
flex-grow: <number>;
flex-shrink: <number>;
flex-basis: <length> | auto;
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ];
align-self: auto | flex-start | flex-end | center | baseline | stretch;
複製代碼
order

order是屬性決定了子元素的排列順序,數字越小的在前。blog

.item {
	order: <integer>;
}
複製代碼
flex-grow

flex-grow是屬性決定當有空餘空間時子元素的放大比例。頁面佈局

.item {
	flex-grow: <number>;
}
複製代碼
flex-shrink

flex-shrink是屬性決定當空間不足時子元素的縮小比例。

.item {
	flex-shrink: <number>;
}
複製代碼
flex-basis

flex-basis是屬性決定計算剩餘空間以前子元素默認的大小。

.item {
	flex-basis: <length> | auto;
}
複製代碼
flex

flex-flow是屬性flex-growflex-shrinkflex-basis的簡寫形式。

.item {
	flex-flow: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}
複製代碼
  • none:0 0 auto
  • initial:0 1 auto
  • auto:1 1 auto
flex-self

flex-self屬性決定了單個子元素與其餘子元素的對齊方式。

.item {
	flex-self: auto | flex-start | flex-end | center | baseline | stretch;
}
複製代碼
相關文章
相關標籤/搜索