12. Flexbox

Flex也是配置在一個容器內的元件之方法,需使用關鍵字 display: flex;來實現。首先先設計html元件如下:



flex-direction

在使用flex時,首先可以控制其流動方向,使用 flex-direction關鍵字,有以下選擇: 現在加上css code看看結果如何。



A
B
C
D
E
F


flex-wrap

接下來介紹flex-wrap屬性,這是關於容器中元件超過容器寬度時的處理, 在縮放視窗時會用到。有以下幾種選擇: 因為要便於觀察,將容器中的元件增加。

顯示結果如下:試著縮放視窗看其變化。
A
B
C
D
E
F
G
H
I
J
K
L


justify-content

跟Grid類似,Flex也有justify-content屬性,相關參數如下:
原則上與Grid的justify-content類似。在第一例中加上 justify-content: space-around; 這行,顯示結果如下:
A
B
C
D
E
F


align-items

在垂直向對齊則使用align-items屬性,可選擇的參數有:
修改css code如下:
我們調整個別元件的height,可以看到元件都根據中點置中了。
A
B
C
D
E
F


align-content

align-content是調整的是垂直向多行對齊。可用的參數有:
舉例如下,為了較好顯示,容器內元件增加到12個。

結果顯示如下:
A
B
C
D
E
F
G
H
I
J
K
L

關於容器內元件

容器內的元件也包含數個屬性可以用於調整。

order 屬性

我們可以直接調整其順序,例如以下之html 與 css code:
A
B
C
D
E
F
可以看到元件位置依照order的順序改變了。

flex

flex包含flex-grow, flex-shrink, flex-basis這三個屬性可用來控制容器內元件的尺寸, 以下分別舉例說明。

flex-grow

A
B
C

flex-grow: 0;表示寬度不伸展,數字越大表示分配到更多多餘空間。

flex-shrink

顧名思義是收縮,以下範例說明。

A
B
C
D
E
F
G
H
I
J
K
L


此例中因為元件(200px)總寬度超過容器總寬度,所以元件會自然收縮,但是第2,5元件 收縮率為0,所以保持原大小,最後一個收縮率為3,所以變更小,預設值為1。

flex-basis

flex-basis表示設定元件至特定大小。 例如:

此例中讓第2及3元件的寬度分別為50及200px,並讓最後一個元件grow, 因此顯示以下結果。
A
B
C
D
E
F




以上三屬性可合併簡寫為例如flex: 0 0 50px;分別表示grow, shrink, and basis。 如下例:
A
B
C
D
E
F

用flex實現layout

很顯然flex可以幫助我們layout,與grid有類似的效果,接下來看以下例子:


顯示如下:

Header
Nav Bar
Left Bar
Content
Right Bar

使用flex貼上圖片