iT邦幫忙

2022 iThome 鐵人賽

DAY 20
0
Modern Web

意識界歸來的前端系列 第 20

box 大集合:principal box、inline-level box、block box

  • 分享至 

  • xImage
  •  

principal box

當一個元素生成一個或多個 box 時,其中一個是 principal box,用來代表該元素本身的內容子元素的 box

Tips

  • principal box 本身可以使用 position 定位的佈局方式。
  • 一些元素可能會生成除 principal box 之外的其他 box(例如 list-item 會生成一個額外的 ::marker 偽元素 box,或 table 元素會生成一個 table wrapper box
    table grid box),這些附加產生的 box 位置會相對於 principal box 的位置。
  • 某些值(none、contents)也會導致該元素或子元素不會產生任何 box。

根據 W3C Outer Display 中有提到 principal box 佈局的方式有以下三種

  • inline,代表在 flow 佈局中會生成一個 inline-level box
  • block,代表在 flow 佈局中會生成一個 block-level box
  • run-in

run-in 是一種特殊行為的 inline-level box,將元素 合併到 後方 block container 中,使該元素在結構呈現上,像是後方區塊元素的第一個行內元素,若後方元素不是 block box 時,該元素本身會變為 block box,詳細可以參考 W3C 文件

常見的範例為,將標題合併到段落中,請參考下方圖片。

上方效果,其實也可以透過 float 來達到,請參考此 codepen

此屬性目前很少用到,因為瀏覽器支援度極差(請參考下方 can i use 結果)


inline-level box

inline-level box,代表的是由行內元素(inline-level elements)組成的 box,box 內的元素會呈現水平排列。

Tips

  • 行內元素(inline-level element)會按照行來分佈內容(例如:段落、圖片)。
  • display 的 inline-level 這三種值(inline、inline-table、inline-block),可以使元素變為行內元素。
  • 所有 inline-level box 皆會參與 inline formatting context (IFC)。

inline-level box 又分為以下兩種

  • inline box
  • atomic inline-level box

inline box

Tips

  • 該 box 的內容會參與該 box 外部的 IFC。
  • 所有 display inline 的 non-replaced element(非替換元素)皆會生成 inline box。

常見的 inline box 範例:span、a。

atomic inline-level boxes

非 inline-level boxes 的 inline boxes 就稱為 atomic inline-level boxes 。例如下方三種元素

  • replaced inline-level
  • inline-block elements
  • inline-table elements

Tips

  • 作為 single opaque (不透明) box,代表與其子元素皆不會參 box 外部 的 IFC。
  • 該內容不會將分成多行顯示(除了 inline boxes 和 ruby containers 例外)。
  • 當任何 inner display type 不是 flow 的 inline-level box 時,都會建立新的 formatting context(佈局環境) 並指定其 inner display type。

block box

block-level box 會參與 BFC 佈局。

區塊元素之為盒模型( box model ),由 content、padding、border、margin 所組成。

元素寬度預設會撐到最大,使其占滿整個容器
多個元素會換行來呈現,並不會並排

區塊盒例子:div、h1、p、ul、li、table 等等。
常見區塊元素標籤:div、ul li、p、h1

block container

block-level

Block-level elements 代表那些會生成 principal box 為 block-level 的元素。


上一篇
透過認識 element tree、document tree、box、display type 來理解 HTML 排版
下一篇
content、padding、border、margin 與它們的 Box model
系列文
意識界歸來的前端30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言