CSS 習作|Flexbox 網頁排版術

更新於 發佈於 閱讀時間約 9 分鐘
raw-image

六角切版直播班進入到第 9 天 😱,課前預習影音也來到了「Flex 網頁排版技巧」這個章節,本篇習作內容進入到 CSS 排版實作,一起瞭解 Flexbox,開始第一個網頁排版吧 💪🏻!

The Flexible Box Layout Module, makes it easier to design flexible responsive layout structure without using float or positioning.

🤔 Flexible Box Layout Module 是什麼?

Flexbox 彈性盒子,是一種透過欄與列的布局來排列內容的 CSS 模組,Flexbox 可以讓我們更輕鬆且靈活的設計響應式佈局結構,使元素能夠依最父層的容器尺寸來自適應、伸縮元素寬高,也能過通過 CSS 的設定來使物件水平且垂直對齊,而無需使用浮動 ( Float ) 或定位 ( Position )來排版。


Flexbox 如何撰寫?

Flexbox 由 Flex container 以及 Flex items 兩個要素所組成。

Flex container 以及 Flex items 兩要素

Flex container 以及 Flex items 兩要素

因此要開始使用 Flexbox 模型,首先需定義一個父層元素 Parent Element
如下圖,以 class 命名為 flex-container 的容器為父層元素,而裡頭再放入三個 <div> 容器作為 子層元素 Flex items

製作 flexbox 的結構

製作 flexbox 的結構

為父層容器宣告 CSS:display: flex;

第二步,我們為「flex-container」這個容器的 CSS 宣告:display: flex;

宣告 display: flex;

宣告 display: flex;

我們可以看到本來呈現 3 列的 flex-child 變成 3 欄式排版了,如下圖:

變化呈現

變化呈現

理解 Flex :主軸 Main axis、交錯軸 Cross axis

CSS 語法「display:flex」

flex 將容器劃分為「主軸 Main axis」「交錯軸 Cross axis 」,裡面的子元素將「根據主軸與交錯軸的起點」來產生不同的方向性:

主軸 Main axis 和交錯軸 Cross axis

主軸 Main axis 和交錯軸 Cross axis

flex-direction 屬性

flex-direction 屬性定義容器要在哪個方向堆疊 flex items。
flex-direction 屬性值有以下這些:

  • flex-direction: row; 由左至右
  • flex-direction: row-reverse; 由右至左
  • flex-direction: column; 由上至下
  • flex-direction: column-reverse; 由下至上
flex-direction: value;

flex-direction: value;

一般來說預設都是由左至右的 flex-direction: row

需要釐清的觀念是,當我們將父元素設定為 flex-direction: column 時,主軸線和交錯軸線位置會調換(兩者永遠互相垂直),因此連帶著 justify-content 和 align-items 等屬性的對齊方式也會跟著變動。

raw-image

justify-content 屬性

The justify-content property is used to align the flex items.

透過定義 justify-content,我們可以使 flex-item 在依循主軸的 flex-direction 下產生其他排版變化,根據 flex-direction 屬性值的不同, justify-content 也會產生不同排列,如下圖:

如有畫錯請留言告知我 😂

如有畫錯請留言告知我 😂

  • justify-content: flex-start;
    flex-start 為預設值,依主軸的 flex-direction 下,對齊主軸的起點
  • justify-content: flex-end;
    依主軸的 flex-direction 下,對齊主軸的終點
  • justify-content: center;
    依主軸的 flex-direction 下,對齊主軸的中央
  • justify-content: space-around;
    依主軸的 flex-direction 下,平均分配主軸寬度和間距
  • justify-content: space-between;
    依主軸的 flex-direction 下,第一項和最後一項各自貼齊起點和終點,平均分配寬度。
justify-content

justify-content

需要注意的是,「justify-content: center;」並不是一種水平置中效果,而是一種「建立在主軸方向下的對齊方式」。

主軸為 display: flex 的時候,它的 direction 是從左到右,主軸的左邊為起點,右邊為終點,而裡面的 item 會依照主軸的位置來去做排列。

而在不同的 flex-direction 下設置不同 justify-content 也會有不同的變化及排列組合,可參考六角學院設計的「Flexbox Playground」或是「Flexbox Demo」、「MDN flexbox」、「A Complete Guide to Flexbox」來加深瞭解!


align-items 屬性

align-items 決定交錯軸的排列方式,而 align-items 又有以下幾種:

  • align-items: flex-start;
    flex-start 為預設值,依主軸的 flex-direction 下,對齊交錯軸的起點
  • align-items: flex-end;
    依主軸的 flex-direction 下,對齊交錯軸的終點
  • align-items: center;
    依主軸的 flex-direction 下,對齊交錯軸的中央
  • align-items: stretch;依主軸的 flex-direction 下,flex-item 被拉伸以填滿整個容器
  • align-items: baseline;
    依主軸的 flex-direction 下,對齊 flex-item 內容物的基線


需注意的是,在不同 flex-direction 下,align-items 的排列方式也有多種變化,如下圖所示,在 justify-content 和 align-items 兩者值同樣是 center 時,會因為 flex-direction 的不同(一個為 row ,另一個為 column)而產生不同排版,因此在使用 justify-content 和 align-items 時,需特別注意由 flex-direction 所影響的主軸、交錯軸起點及終點方向:

flex-direction 影響主軸、交錯軸起點及終點方向

flex-direction 影響主軸、交錯軸起點及終點方向

Flexbox 小遊戲

Flexbox 的變化有非常多種,上述知識點還沒有放入更多混用方式,可以藉由下面兩個遊戲挑戰來審視自己的觀念有沒有理解透徹,而遊戲裡面也有更多本篇習作還沒有討論到的「flex-wrap」、「align-content」、「align-slef」、「order」、「flex-flow」...等( 燒腦 😶‍🌫️ )

raw-image
raw-image
raw-image
raw-image

本篇參考學習資源

hexschool Flexbox

金魚都能懂網頁設計入門 : 排版的聖品

玩轉 CSS FLEX

CSS Flex 超詳解,彈性版型任你操控!

Practice make perfect, 我是正在自我習作中的 Draw,我們下篇見 🙇🏻


留言
avatar-img
留言分享你的想法!
avatar-img
學習如何學習
5會員
10內容數
從零開始,記錄網頁設計的學習過程。
學習如何學習的其他內容
2024/04/04
CSS 裡的「寬度,最大寬度,最小寬度」分別是什麼呢? ➊ width 用來設定元素的寬度,且 width 作用範圍僅在 content-box 區塊 ➋ max-width → 用來設定元素的最大寬度 ➌ min-width → 用來設定元素的最小寬度
Thumbnail
2024/04/04
CSS 裡的「寬度,最大寬度,最小寬度」分別是什麼呢? ➊ width 用來設定元素的寬度,且 width 作用範圍僅在 content-box 區塊 ➋ max-width → 用來設定元素的最大寬度 ➌ min-width → 用來設定元素的最小寬度
Thumbnail
2023/09/10
我想分享給那些曾有過相同感受的同學,覺得自己能力不適合、在學習中感到自卑想要放棄的那些時候。而後半篇則想分享自己對於老師、助教的感謝。
Thumbnail
2023/09/10
我想分享給那些曾有過相同感受的同學,覺得自己能力不適合、在學習中感到自卑想要放棄的那些時候。而後半篇則想分享自己對於老師、助教的感謝。
Thumbnail
2023/09/10
本篇為隨筆紀錄,將看完的影片疏理為短小筆記 。 特別有感的是,現在回頭看,發現影片中每個提及的知識點或是誤區自己都踩過好幾輪了,這是在學習及練習中很常會反覆發生、需要注意的地方,提醒自己在接下來的練習中,能將老師提及的思維及作法吸取並應用。
Thumbnail
2023/09/10
本篇為隨筆紀錄,將看完的影片疏理為短小筆記 。 特別有感的是,現在回頭看,發現影片中每個提及的知識點或是誤區自己都踩過好幾輪了,這是在學習及練習中很常會反覆發生、需要注意的地方,提醒自己在接下來的練習中,能將老師提及的思維及作法吸取並應用。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
Flexbox一種強大佈局技術,主要用於一維排列 的元素。它提供了更靈活的對齊方式,能夠輕鬆控制子元素的方向、對齊方式、間距與自適應能力,適用於現代網頁設計與響應式開發。使用方式為在 HTML 的父元素當中,透過寫入 display:flex; 這行語法,即能夠讓子元素產生各種排列的方式。
Thumbnail
Flexbox一種強大佈局技術,主要用於一維排列 的元素。它提供了更靈活的對齊方式,能夠輕鬆控制子元素的方向、對齊方式、間距與自適應能力,適用於現代網頁設計與響應式開發。使用方式為在 HTML 的父元素當中,透過寫入 display:flex; 這行語法,即能夠讓子元素產生各種排列的方式。
Thumbnail
在這一章節中,我們介紹了 Flexbox 這個 CSS 模型及其用法,重點講解了 Flex 容器和項目的各種屬性。通過具體的示例,展示了如何使用 Flexbox 進行一維佈局設計,並且通過實踐案例,展示了多行 Flex 項目和不同對齊方式的應用。
Thumbnail
在這一章節中,我們介紹了 Flexbox 這個 CSS 模型及其用法,重點講解了 Flex 容器和項目的各種屬性。通過具體的示例,展示了如何使用 Flexbox 進行一維佈局設計,並且通過實踐案例,展示了多行 Flex 項目和不同對齊方式的應用。
Thumbnail
本篇習作內容進入到 CSS 排版實作,一起瞭解 Flexbox,開始第一個網頁排版吧 💪🏻!
Thumbnail
本篇習作內容進入到 CSS 排版實作,一起瞭解 Flexbox,開始第一個網頁排版吧 💪🏻!
Thumbnail
box-sizing 是 CSS 屬性的一種,它使我們可以改變盒模型的計算方式。
Thumbnail
box-sizing 是 CSS 屬性的一種,它使我們可以改變盒模型的計算方式。
Thumbnail
本篇習作加強自我對 CSS Box Model 的觀念,也是在實作練習中發現自己雖然看似理解了盒模型,但其實在應用上尚不熟悉,因此藉由筆記重新梳理和練習,將 CSS Box Model 的基礎觀念整理並釐清,一起來看看吧!
Thumbnail
本篇習作加強自我對 CSS Box Model 的觀念,也是在實作練習中發現自己雖然看似理解了盒模型,但其實在應用上尚不熟悉,因此藉由筆記重新梳理和練習,將 CSS Box Model 的基礎觀念整理並釐清,一起來看看吧!
Thumbnail
在 Modern Web 的世界中,已經有非常多的套件、語法、框架,可以解決大部分網頁排版問題。 以我近期的觀察來說,在專案開發時,大部分公司會為了讓下一個接手、維護的開發者能更快上手專案架構,而採取原生的 CSS 寫法,而不是仰賴快速又方便的套件。
Thumbnail
在 Modern Web 的世界中,已經有非常多的套件、語法、框架,可以解決大部分網頁排版問題。 以我近期的觀察來說,在專案開發時,大部分公司會為了讓下一個接手、維護的開發者能更快上手專案架構,而採取原生的 CSS 寫法,而不是仰賴快速又方便的套件。
Thumbnail
都市傳說:「網頁跑版時,設定 box-sizing: border-box一切搞定!」
Thumbnail
都市傳說:「網頁跑版時,設定 box-sizing: border-box一切搞定!」
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News