---
# System prepended metadata

title: 六角學院體驗營 Week2 - Flexbox 多欄式排版全攻略
tags: [六角學院, ' 2024 軟體工程師體驗營']

---

---
tags: 六角學院, 2024 軟體工程師體驗營
---
# 六角學院體驗營 Week2 - Flexbox 多欄式排版全攻略
> 本週主題重點：講解 Flex 最常使用的六大語法，Flexbox 多欄式排版的應用。以下是一些自己的筆記和心得~

## :pushpin:本週課程的重點語法
* **display: flex**
* **flex-direction**
    * 決定 flex 的軸線
    * 可以根據使用者習慣的資訊流使用 reverse

* **justify-content**
    * 主軸對齊

* **flex-wrap** 
    * 換行設定
    * 當子元素(們)寬度超過父層時，flex 預設會自適應寬度，可以用 wrap 來實現換行

* **align-items**
    * 交錯軸單行對齊
    * 相對於主軸的另一個軸線，所以要先確定自己的主軸是哪個方向

* **align-content**
    * 交錯軸多行對齊
    * 就簡單的理解上來說，比較是當 flex 出現 wrap 時會發生
    * 跟 align-items 都是交錯軸的對齊方式
    * 補充：[align-content 屬性介紹](https://w3c.hexschool.com/flexbox/d0e569ef)、[align-items與align-content比較](https://guiblogs.com/flex-align/)

* **Flex 裡還可以包 Flex**
    * 父層的設定 flex 只會影響子層
    * 子層裡面可以繼續有 flex

![flex css](https://hackmd.io/_uploads/rySBtzcfR.png)

>圖片來源：[CSS-Tricks](https://css-tricks.com/snippets/css/a-guide-to-flexbox/#aa-flex-direction)

## :pushpin:常見錯誤和心得
### 主軸和交錯軸的概念
> 不要用right、left的方式來想，也不要用X軸、Y軸的概念去想，利用"主軸"和"交錯軸"去理解軸線對齊。

以前最初寫版型要讓內容置中的時候，可能會寫`margin`、`padding`、`text-align`、`float`、`position`等等的方式（用些奇奇怪怪的方式來寫😂），當第一次嘗試寫 flex 時，很單純地只想：**「水平置中後要怎麼讓垂直也置中？」** 並沒有所謂主軸和交錯軸的概念。

即使後來有自己練習刻過一些版型，自認對於`flex-direction`、`justify-content`的使用算是了解，但一直對於`align-items`、`align-content`、`align-self`的使用上還是常常會搞不太清楚… 這次在看過課程影片中的 flex 單元介紹以及這週直播課洧杰老師講解的這個圖後⬇⬇⬇，我覺得我好像真的有懂了！！！

![image](https://hackmd.io/_uploads/BJy1M19f0.png)

:::warning
`flex-direction`定義你的主軸方向，`justify-content`是主軸對齊的方式，`align-items`是交錯軸對齊的方式。
:::

### Flex的設定只能影響下一層
> 富不過三代，無法到第三層

當在寫 flex 設定時，記住自己要寫的位置是很重要的，不需要將每一層都加上，而父層的設定會影響子層，但不會影響到子層的子層（~~孫子層？~~） 不過 **Flex 裡還可以包 Flex**，所以只要另外把子層加上 flex 設定，就可以再下一層繼續有 flex 的排版。

另外，在寫設定時，如果有同樣的 flex 設定也可以另外設置成 class，例如：要將內容置中，可以摘出來寫`.d-center`，重複使用或是修改上也比較方便。

```css!
.d-center{
    display: flex;
    justify-content: center;
    align-items: center;
}
```


## :pushpin:Flex 實用小工具 & 補充
* [FLEXBOX FROGGY](https://flexboxfroggy.com/)
* [Flexbox Playground](https://codepen.io/peiqun/pen/WYzzYX)
* [Flexbox 海盜](https://hexschool.github.io/flexbox-pirate/index.html#/)
* [圖解：CSS Flex 屬性一點也不難](https://www.casper.tw/css/2017/07/21/css-flex/)

很久之前就有被推坑玩過青蛙的練習遊戲（但忘了有沒有玩到底😅），而這次洧杰老師提供的 flex 資源裡面，六角竟然也有一個有趣的海盜遊戲！很推薦用這些遊戲去練習自己吸收到的程式語法，相信會對於大家內化這些知識有幫助~

![image](https://hackmd.io/_uploads/By_SPGqGA.png)

![image](https://hackmd.io/_uploads/Hy-_MVtfC.png)


## :pushpin:小組任務介紹 & 下週課程預習
### 小組任務二
1. 和小組成員共同提交切版任務作業一
2. 與組員們一起完成 Flex 精神時光屋

### 下週課程內容預習
1. 下禮拜會講RWD
2. 提前觀看【RWD - 伸縮自如的 RWD 排版術】單元


## :pushpin:未來學習方向
給予自己一些小目標吧：
* 盡可能地完成每日練習
* 完成 Flex 精神時光屋
* 繼續練習自己的英打能力
* 繼續練習[emmet語法](https://github.com/hexschool/EmmetPractice)（現在還是有些語法會記錯🥺），加快自己的開發速度
* 已經在小組團隊裡面擔任第三週的組長，希望能好好完成小組任務
* 可以試著回答作業討論的問題，從解決問題的同時去檢視自己的觀念

> 想給自己勉勵：一個版型要寫出來，不一定會有正確答案，可能有很多種解法，不用急於和別人比較，找到自己習慣和用起來順暢的方式！