[CSS] Flexbox 再次遇見你

Huge Gun
5 min readMay 6, 2018

--

Flex-box 是 CSS3 新增的排版方式,雖然已經不是新的東西,只是最近又重新碰到它的時候,發現自己似乎當初有些觀念不正確,所以才誕生這篇關於它的筆記,畢竟剛好遇見你;留下足跡才美麗!

Flex-box 結構圖

上圖中有2個重要的關鍵字 main 和 cross (水平與垂直)

Main:
*main-axis: flex container 的水平軸,flex item 都依照他來排列
*main-size: flex item 的寬高
main-start & main-end: 水平軸的起點&終點

Cross:
*cross -axis: flex container 的垂直軸,flex item 都依照他來排列
*cross -size: flex item 的寬高
cross -start & cross -end: 垂直軸的起點&終點

(有 * 表示會被 flex-direction 屬性影響)

Flex-box 屬性:

結構圖中區分 Flex-box 的部分有2個,分別是 container 和 item
來看一下他們各自有哪些可以用的屬性,並說明一下

( Container 容器元件 )

可用屬性
1. display
2. flex-direction
3. flex-wrap
4. justify-content
5. align-items
6. align-content

display: flex | inline-flex | block

display 是 Flex-box 的開關,預設: flex

flex: 他會依容器裡 item 的大小來看,若水平軸有空間先彈性補滿
inline-flex: 容器裡 item 不換行直接水平排到底,會爆出容器
block: 強迫容器裡的每一個 item 都做換行的動作,會爆出容器

flex-direction: row | row-reverse | column | column-reverse

flex-direction 控制容器內 item 排列方向,預設: row

row: item 排列 左到右,上到下
row-reverse: row 倒過來 (不是鏡射,我起初以為是效果會像鏡射)
column: item 排列 上到下,左到右
column-reverse: column 倒過來

flex-wrap: nowrap | wrap | wrap-reverse

flex-wrap 控制容器內 item 換行,預設: nowrap

nowrap: 單行
wrap: 多行
wrap-reverse: 多行,但裡面的 item 反轉

justify-content:
flex-start | flex-end | center | space-around | space-between

justify-content 控制容器內 item 的水平分布,預設: flex-start

flex-start: 靠最左的 main start
flex-end: 靠最右的 main end
center: 水平置中
space-around: item 均分水平,間距也均分
space-between: item 均分水平 最左右的 item 分別靠 main start & main end

align-items: flex-start | flex-end | center | stretch | baseline

align-items 控制容器內 item 的垂直分布(單行),預設: stretch

flex-start: 靠最上的 cross start
flex-end: 靠最下的 cross end
center: 垂直置中
stretch: item 的垂直分布撐滿到容器的高度
baseline: 全部的 item 靠基線

align-content:
flex-start | flex-end | center | space-around | space-between

align-content 控制容器內 item 的垂直分布(多行),預設: stretch

flex-start: 靠最上的 cross start
flex-end: 靠最下的 cross end
center: 垂直置中
space-around: 每行均分容器垂直的間距
space-between: 均分容器垂直的間距,最先&最後行靠 cross start & cross end

( Item 項目元件 )

可用屬性
1. align-self
2. order
3. flex-grow
4. flex-shrink
5. flex-basis
6. flex

align-self:

覆蓋既有的 align-items 屬性

order:

透過給他數字,直接達到自訂排列順序

flex-grow,預設: 0

給他數字,讓 item 在 container 中按照比例填滿剩餘的空間

flex-shrink,預設: 1

給他數字,item 如果撐爆 container 按照比例縮小

flex-basis 預設: 0

設定 item的基本大小,單位: px em 等等熟悉的

flex: 前述3種 flex 結合的縮寫方式

縮寫順序: flex-grow flex-shrink flex-basis

EX: flex:1 2 300px;

--

--

Huge Gun
Huge Gun

Written by Huge Gun

槍再大把,沒子彈是不行的;通過學習,鍛造自己的子彈!https://github.com/HsienW

No responses yet