Skip to main content

CSS Display:Block、Inline、Inline-Block 與 Flex 的差異與應用

1. display: block

特性:

  • 佔據整行:元素會獨佔一整行,寬度預設為父元素的 100%。

  • 垂直排列:多個 block 元素會從上到下排列。

  • 可設定寬高:可以自由設定 width 和 height。

  • 內邊距和外邊距:支援完整的 margin 和 padding。

  • 常見元素:例如 <div><p><h1> 等預設為 block。

使用場景:

  • 需要元素獨立一行,例如段落、標題、容器。

  • 希望元素有明確的寬高設定。

2. display: inline

特性:

  • 不換行:元素會在同一行顯示,不會強制換行。

  • 寬高無效:無法直接設定 width 和 height,寬高由內容決定。

  • 外邊距限制:僅支援左右的 margin 和 padding,上下無效。

  • 常見元素:例如 <span><a><strong> 等預設為 inline。

使用場景:

  • 用於文字或小範圍的樣式調整,例如超連結、強調文字。

  • 不希望元素換行,適合行內元素。

3. display: inline-block

特性:

  • 結合 inline 和 block

    • 像 inline 一樣不換行,元素會在同一行排列。

    • 像 block 一樣支援設定 width 和 height,以及完整的 margin 和 padding。

  • 間距問題:由於元素間的空白字符(例如換行或空格),可能會有小間距,需注意。

使用場景:

  • 希望元素在同一行排列,但又需要設定寬高。

  • 例如按鈕、圖片列表、卡片布局等。

4. display: flex

特性:

  • 彈性布局:啟用 Flexbox 布局,子元素(flex items)可以靈活排列。

  • 不限於一行:可以設定是否換行(透過 flex-wrap)。

  • 可設定寬高:支援完整的 width、height、margin 和 padding。

  • 對齊方式:提供強大的對齊控制,例如 justify-content(主軸對齊)和 align-items(交叉軸對齊)。

  • 常見用途:用於複雜的布局,例如導航欄、卡片排列、響應式設計。

使用場景:

  • 需要靈活的布局,例如水平或垂直居中、等分欄位。

  • 適合現代網頁設計,取代傳統的 float 或 inline-block 布局。

總結比較表

屬性換行可設寬高外邊距/內邊距典型使用場景
block完整支援獨立區塊、段落、容器
inline僅左右支援行內文字、超連結
inline-block完整支援行內排列但需設定寬高的元素
flex可控完整支援彈性布局、響應式設計

注意事項

  • 間距問題:inline-block 元素間可能因 HTML 的空白字符產生小間距,可透過設定 font-size: 0 於父元素或移除 HTML 換行來解決。

  • Flex 進階:flex 提供了許多屬性(如 flex-grow、flex-shrink),適合更複雜的布局,建議深入學習 Flexbox。

  • 瀏覽器相容性:現代瀏覽器都支援這四種 display 值,但老舊瀏覽器可能對 flex 支援不完整,需檢查相容性。