iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
自我挑戰組

從零開始的 Tailwind CSS 學習之旅系列 第 15

Day15 - 探索 Flex 的奧妙

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20220928/20152047y4Yy5HoV92.png

在先前 Day07 - Display 的大小事 有針對 Display 屬性做說明,Flex 也是 Display 屬性之一,那麼開始今天的 Flex 章節吧。

什麼是 Flex?

網頁元素由上往下排列,當元素之間想要左右排列就可以使用 display: flex 使我們元件呈現左右排版。

舉例來說,這裡有一段 HTML。

<div class="w-40 h-40 bg-blue-700"></div>
<div class="w-40 h-40 bg-red-700"></div>

https://ithelp.ithome.com.tw/upload/images/20220928/20152047pu7EFeKSRr.png
正如上面所說,網頁元素由上往下排列,紅色方塊自然會在藍色方塊下方,我們改寫一下,讓兩個方塊左右排列。

<div class="flex">
  <div class="... bg-blue-700"></div>
  <div class="... bg-red-700"></div>
</div>

https://ithelp.ithome.com.tw/upload/images/20220928/20152047gJiME58TX4.png
兩個元素的外層我們加上 flex 即可改變排列的方向,是不是相當簡單。

Justify Content

用於控制容器主軸定位。

  • justify-start
  • justify-end
  • justify-center
  • justify-between
  • justify-around
  • justify-evenly

Start

藉由 justify-start 根據容器主軸起點對齊,默認情況下主軸以起點對齊,舉個例子:

<div class="... flex justify-start">
  <img src="..." alt="第一小隊" class="...">
  <img src="..." alt="第二小隊" class="...">
  <img src="..." alt="第三小隊" class="...">
</div>
.justify-start {
  justify-content: flex-start;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047DTpLOLk0ny.png

Center

藉由 justify-center 根據容器主軸中心對齊,舉個例子:

<div class="... flex justify-center">
  <img src="..." alt="第一小隊" class="...">
  <img src="..." alt="第二小隊" class="...">
  <img src="..." alt="第三小隊" class="...">
</div>
.justify-center {
  justify-content: center;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047YfgYNv7Snw.png

End

藉由 justify-end 根據容器主軸終點對齊,舉個例子:

<div class="... flex justify-end">
  <img src="..." alt="第一小隊" class="...">
  <img src="..." alt="第二小隊" class="...">
  <img src="..." alt="第三小隊" class="...">
</div>
.justify-end {
  justify-content: flex-end;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047PIRxGagLa5.png

Space between

藉由 justify-between 根據容器主軸對齊,每個項目之間的空間相等且第一個元素與最後一個元素會貼齊起點與終點,舉個例子:

<div class="... flex justify-between">
  <img src="..." alt="第一小隊" class="...">
  <img src="..." alt="第二小隊" class="...">
  <img src="..." alt="第三小隊" class="...">
</div>
.justify-between {
  justify-content: space-between;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047WJWo0sWir4.png

Space around

藉由 justify-around 根據容器主軸對齊,每個項目之間的空間是外側的兩倍,舉個例子:

<div class="... flex justify-around">
  <img src="..." alt="第一小隊" class="...">
  <img src="..." alt="第二小隊" class="...">
  <img src="..." alt="第三小隊" class="...">
</div>
.justify-around {
  justify-content: space-around;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047HwveHQxV11.png

Space evenly

藉由 justify-evenly 根據容器主軸對齊,每個項目之間的空間與周圍空間皆相等,舉個例子:

<div class="... flex justify-evenly">
  <img src="..." alt="第一小隊" class="...">
  <img src="..." alt="第二小隊" class="...">
  <img src="..." alt="第三小隊" class="...">
</div>
.justify-evenly {
  justify-content: space-evenly;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047OTsVJrHBET.png

Align Items

用於控制容器交叉軸定位。

  • items-start
  • items-end
  • items-center
  • items-baseline
  • items-stretch

Start

藉由 items-start 根據容器交叉軸起點對齊,默認情況下交叉軸以起點對齊,舉個例子:

<div class="... flex items-start">
  <div class="...">1</div>
  <div class="...">2</div>
  <div class="...">3</div>
</div>
.items-start {
  align-items: flex-start;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047mGngcfdNQ3.png

Center

藉由 items-center 根據容器交叉軸中心對齊,舉個例子:

<div class="... flex items-center">
  <div class="...">1</div>
  <div class="...">2</div>
  <div class="...">3</div>
</div>
.items-center {
  align-items: center;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047aRSBbUk9qW.png

End

藉由 items-end 根據容器交叉軸終點對齊,舉個例子:

<div class="... flex items-end">
  <div class="...">1</div>
  <div class="...">2</div>
  <div class="...">3</div>
</div>
.items-end {
  align-items: flex-end;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047ot9IA9jTDn.png

Flex Direction

用於控制項目的方向

  • flex-row
  • flex-row-reverse
  • flex-col
  • flex-col-reverse

flex-row

藉由 flex-row 元素水平放置且順序由左至右,默認情況下為 flex-row,舉個例子:

<div class="... flex flex-row">
  <img src="..." alt="第一小隊" class="...">
  <img src="..." alt="第二小隊" class="...">
  <img src="..." alt="第三小隊" class="...">
</div>
.flex-row {
  flex-direction: row;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047TN9dGqwYKe.png

flex-row-reverse

藉由 flex-row-reverse 元素水平放置且順序由右至左,舉個例子:

<div class="... flex flex-row-reverse">
  <img src="..." alt="第一小隊" class="...">
  <img src="..." alt="第二小隊" class="...">
  <img src="..." alt="第三小隊" class="...">
</div>
.flex-row-reverse {
  flex-direction: row-reverse;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047rQq29G3Xos.png

flex-col

藉由 flex-col 元素垂直放置且順序由上至下,舉個例子:

<div class="... flex flex-col">
  <img src="..." alt="第一小隊" class="...">
  <img src="..." alt="第二小隊" class="...">
  <img src="..." alt="第三小隊" class="...">
</div>
.flex-col {
  flex-direction: column;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047GHCnKjGw5p.png

flex-col-reverse

藉由 flex-col-reverse 元素垂直放置且順序由下至上,舉個例子:

<div class="... flex flex-col-reverse">
  <img src="..." alt="第一小隊" class="...">
  <img src="..." alt="第二小隊" class="...">
  <img src="..." alt="第三小隊" class="...">
</div>
.flex-col-reverse {
  flex-direction: column-reverse;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047EBonJkrq5D.png

Flex Direction 影響 Justify Content(主軸)與 Align Items(交叉軸)

flex-direction 預設是 row,主軸是 X 軸、交叉軸是 Y 軸,若將 row 改為 col,此時主軸是 Y 軸、交叉軸是 X 軸,col 將元素以垂直且由上而下呈現,如果今天元素要在置中,主軸與交叉軸改變,使用 justify-center 會沒有效果,而是使用 items-center

<div class="... flex flex-col items-center">
  <img src="..." alt="第一小隊" class="...">
  <img src="..." alt="第二小隊" class="...">
  <img src="..." alt="第三小隊" class="...">
</div>

https://ithelp.ithome.com.tw/upload/images/20220928/20152047ot7u7NDMk7.png

Flex Wrap

用於控制元素是否斷行

  • flex-wrap
  • flex-wrap-reverse
  • flex-nowrap

flex-nowrap

藉由 flex-nowrap 元素不會斷行,會一直排序下去,默認情況下為 flex-nowrap,舉個例子:

<div class="... flex flex-nowrap">
  <div class="... w-1/3">1</div>
  <div class="... w-1/3">2</div>
  <div class="... w-1/2">3</div>
</div>
.flex-nowrap {
  flex-wrap: nowrap;
}

https://ithelp.ithome.com.tw/upload/images/20220928/201520471Grcf70qiQ.png

flex-wrap

藉由 flex-wrap 元素超過容器寬度時自動斷行,舉個例子:

<div class="... flex flex-wrap">
  <div class="... w-1/3">1</div>
  <div class="... w-1/3">2</div>
  <div class="... w-1/2">3</div>
</div>
.flex-wrap {
  flex-wrap: wrap;
}

https://ithelp.ithome.com.tw/upload/images/20220928/201520471gXkhOuOfq.png

從上方可以看到兩個 w-1/3 加上 w-1/2 已經超出寬度100%,flex-wrap 會讓元素自動斷行,很常用於斷點式的網格。

flex-wrap-reverse

藉由 flex-wrap 元素超過容器寬度時會自動斷行並以反方向呈現,舉個例子:

<div class="... flex flex-wrap-reverse">
  <div class="... w-1/3">1</div>
  <div class="... w-1/3">2</div>
  <div class="... w-1/2">3</div>
</div>
.flex-wrap-reverse {
  flex-wrap: wrap-reverse;
}

https://ithelp.ithome.com.tw/upload/images/20220928/20152047I8caD9jPil.png

codepen 連結

本日重點

  1. flex 語法使元素左右排版。
  2. justify-content 控制主軸、align-Items 控制交叉軸。
  3. 改變 flex-direction 會影響主軸(並非都是 X 軸)與交叉軸(並非都是 Y 軸)。
  4. 寬度超過100% 時 flex-wrap 使元素自動斷行。

參考


上一篇
Day14 - 效果輔助,讓元件更生動
下一篇
Day16 - 探討網格系統
系列文
從零開始的 Tailwind CSS 學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
秘密基地
iT邦新手 4 級 ‧ 2022-09-28 10:41:47

讚啦詳細

我要留言

立即登入留言