[筆記] Flexbox & Grid

Jyun
4 min readJan 11, 2022

--

Flexbox: 用於單一方向的排版 ( 元素們排列於同一個方向[水平 |垂直] ),通常會拿來作為排版上的細節微調( 間距、對齊方式 )。

Grid: 可同時操作水平與垂直方向的元素。( 如果已經先有桌機和手機的 UI 稿,可以先對稿進行觀察,是否有需要 grid 實作的元件)

Flexbox 起手式

display: flex

將該元素宣告為 flex container,而在這個 container 裡頭的所有子元素就會成為 flex item,這些 item 可以利用 flex 相關屬性來指定他們排列的方向、順序,以及彼此對齊的方式,或尺寸比例。

預設屬性:

  1. item 水平方向排列
  2. 若 item 沒有已經先定義的寬高,其大小就會變成該元素中內容的大小
  3. item 若比 flex container 還要寬,會自適應縮小其寬度,不會溢出 flex container

flex-direction ( 也可以說是 main axis 的指向 )

item 的排列方向

  • row ( 水平左至右 )
  • column ( 垂直上至下 )
  • row-reverse ( 水平右至左 )
  • column-reverse ( 垂直下至上 )

flex-wrap

wrap 有包起來的意思

  • no-wrap [ 預設值 ] 表示 當 item 碰到 flex container 的邊界( 要超過容器範圍時 ),會以縮小自己的尺寸來乖乖排列在 flex container 裡。但要注意若是 item 有設定min-width(height),item 就不會自適應縮小,而是直接超出容器範圍。
  • wrap ( item 超過容器邊界則自動換到下一行排列 )
  • wrap-reverse ( 反方向遇邊界換行 )

flex item 的排列方式

在 flexbox 的系統中,主要是由兩條軸線來決定排列的操作會如何進行

  1. main axis 主軸
  2. cross axis 就且叫他副軸好了

決定現在誰是 main 而誰是 cross 的,要從 flex-direction 來決定。例如現在設定 flex-direction: row ,表示 main axis 會是一條由左指向右的水平線 ; 反之設定 flex-direction: column,則 main axis 會變成一條由上只到下的垂直線。

< — 以下使用 flex-direction: row 為例 — >

justify-content : 控制 主軸上 item 的對齊方式

  • flex-start [ 預設值 ] item 於容器左邊靠攏排列 ( main start )
  • flex-end ( item 於容器右邊靠攏排列 ( main end ) )
  • center ( item 靠攏排列於 主軸線 的中間( 就是置中的意思 ) )
  • space-between ( 最左邊和最右邊的 item 會各自貼齊 容器邊界(main start 和 main end ),剩餘空間會平均分配 item,讓彼此的間距相等 )
  • space-around ( item 被平均分配,item 彼此的間距 為 兩邊 item 與 flex container 的間距的 2倍 )
  • space-evenly ( item 被平均分配,item 彼此的間距和 兩邊 item 與 flex container 的間距 相等 )

align-items : 控制 副軸上 item 的對齊方式

  • stretch [ 預設值 ] 將 item 撐開至 flex container 的高度
  • flex-start ( item 排列於容器最上方 ( cross start ) )
  • flex-end ( item 排列於容器最下方( cross end ) )
  • center ( item 排列於 副軸線 的中間( 也是置中的意思 ) )
  • baseline ( 依照所有 item 的內容作為基準線進行排列 )

align-self : 對指定 item 覆寫在 align-items 就已經設定的屬性

*也就是說這個屬性要下在 item 上才能發揮作用喔!

align-content

--

--

Jyun

轉職路上的喃喃自語 喜歡攝影、音樂和戲劇