Skip to content

CSS 排版方式比較:float、position、flex 與 grid

CSS 排版介紹:各種版面配置方式的比較

CSS 排版是網頁設計與前端開發的核心能力之一。理解並熟練各種排版方式,例如:floatflexgrid 等,能協助開發者打造彈性、高效且響應式的畫面布局。透過不同技術的比較與實務應用,能選擇最合適的排版方法解決不同需求。

表格

除了 HTML 表格display 的表格系列值也能讓任何元素表現得像表格,過去常用來做等高欄位與垂直置中。現在很少當排版主力,但相容性極佳。

說明
table讓元素表現得像一個表格。
table-row相當於表格的一列。
table-cell相當於一格,可做等高欄位與垂直置中。
table-layout欄寬依內容計算還是依固定比例。

詳細用法請見 表格

浮動

float 讓元素浮到左側或右側,文字會繞著它排,是早期排版的主要方式。需要另外處理父元素的高度塌陷,新的版面配置建議改用 flex 或 grid。

屬性說明
float讓元素浮動到 leftright
clear清除浮動,讓後方元素不受前面的浮動影響。

詳細用法請見 浮動

定位

position 把元素從正常的文件流中拉出來另外擺放,適合浮層、提示框與固定的導覽列。五個值的差別在於以誰為基準、以及會不會脫離文件流。

說明
static預設值,照正常的文件流擺放。
relative相對自己原本的位置偏移,仍佔著原位。
absolute相對最近一個有定位的祖先,脫離文件流。
fixed相對瀏覽器視窗,捲動時不會跟著移動。
sticky捲到指定位置後才固定住。

詳細用法請見 定位

彈性盒子

flex 適合一維排版,把一排元素在水平或垂直方向上排列、對齊與伸縮,導覽列與按鈕群組最常用。

屬性說明
flex-direction主軸方向,決定水平還是垂直排列。
flex-wrap空間不足時要不要換行。
justify-content主軸上的對齊與分佈。
align-items交錯軸上的對齊。
order調整單一項目的排列順序。

詳細用法請見 彈性盒子

格線系統

grid 適合二維排版,同時控制欄與列,適合頁面骨架、儀表板與圖片牆。要記的語法較多,但版面越複雜越划算。

屬性說明
grid-template-columns定義欄的數量與寬度。
grid-template-rows定義列的數量與高度。
grid-columngrid-row讓項目跨欄或跨列。
repeat()minmax()重複軌道與設定上下限,自動響應欄數的關鍵。

詳細用法請見 格線系統

怎麼選

排版方式維度適合的情境
彈性盒子 flex一維導覽列、按鈕群組、卡片內部對齊
格線系統 grid二維頁面骨架、儀表板、圖片牆
定位 position浮層、提示框、固定導覽列
浮動 float文繞圖,或維護舊專案
表格排版等高欄位、垂直置中的相容寫法

實務上常是 外層 grid 切骨架、內層 flex 做對齊,浮層另外用 position。

常見問題

flex 和 grid 該怎麼選?

看版面是幾維。一整排按鈕、導覽列這種單方向的排列用 flex;同時要控制欄與列的整體版面用 grid。實務上常是外層 grid、內層 flex。

現在還需要學 float 嗎?

需要知道它的行為,因為舊專案還很多,文繞圖也仍然只能靠它。但新的版面配置不該再用 float,改用 flex 或 grid 會輕鬆很多。

position 算是排版方式嗎?

它比較像是把元素從正常流程中拉出來另外擺放,適合浮層、提示框、固定的導覽列。整體版面骨架還是交給 flex 或 grid。

一個頁面可以混用嗎?

可以,而且很常見。外層用 grid 切出主要區塊、卡片內部用 flex 對齊、浮層用 position,各自做各自擅長的事。

延伸閱讀