iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 27
0

在認識了normal flowBFCIFC的概念後,我們要來認識以這兩個佈局規則為基準的display屬性。display屬性也有特殊的佈局如flex及grid等,但不在此筆記範圍。

Display基本概念

Display的outer與inner

CSS的Display屬性可以改變元素對外所參與的佈局環境(outer display type),例如:

  • inline
    參與inline formatting context。
  • block
    參與block formatting context。

也可以為元素創造內部的佈局環境,提供後代元素佈局的規則(inner display type)。對內創造的佈局例如:

  • flow layout
    block container的佈局環境,等於normal flow佈局:IFC水平佈局+BFC垂直佈局。
  • flow root
    創建一個新的BFC時,其內部的佈局叫做flow root,一個新的normal flow佈局。
  • flex
    彈性盒佈局,該屬性值的元素本身對外仍參與normal flow,可是內部環境為獨立的flex formatting context。
  • grid
    格線佈局,該屬性值的元素本身對外仍參與normal flow,可是內部環境為獨立的彈性盒佈局grid formatting context。

所有的Diaplay的屬性值可見CSS規範

Display參數值介紹

這篇僅選擇 none | contents | inline | block | inline-block 來介紹

display: block

我們以<header><div>元素來說明,這兩個元素都是block-level element,它們都是預設display: block
html:

<header></header>
<div>阿囉哈</div>
<header></header>

css:兩個元素的預設都是display: block,所以不再累贅聲明一次。

header {
    width: 300px;
    height: 50px;
    border: 5px solid;
}

div {
    width: 300px;
    height: 50px;
    background-color: green;
}   

它們的box佔滿<body>作為block container的寬度,並垂直向下排列。width跟height的聲明也都有效。

display: none

同樣的條件,對<div>元素聲明:

div {
    display: none;
}

<div>的box被忽略,不予顯示

display: contents

相同條件下,對<div>元素聲明:

div {
    display: contents;
}

<div>的box被取代成只有contents area的box,只顯示內容文字。

display: inline

相同條件下,對所有元素聲明:

header {
    display: inline;
}

div {
    display: inline;
}

<div><header>成為inline box,參與IFC,一個接一個水平排列,且width及height聲明無效。

display: inline-block

相同條件下,對所有元素聲明:

header {
    display: inline-block;
}

div {
    display: inline-block;
}

<div><header>對外參與IFC佈局,對內創建了BFC佈局,成為一個block container,width與height聲明有效。

<div><header>內部就是一個新的normal flow的環境,block box參與BFC ; inline box參與IFC:

<header>
  <span>你好</span>
  <span>你好</span>
  <span>你好</span>
  <p>三瓦滴咖</p>
</header>
<div>
  ...
</div>
<header>
  ...
</header>

CSS的display屬性筆記告一段落,接下來我們會認識讓元素脫離normal flow(out of flow)float屬性,以及其定位參數,那就明天見~

*有任何錯誤或描述不夠精準之處,歡迎指教,非常感謝。/images/emoticon/emoticon41.gif


參考資料

MDN display

CSS Display Module Level 3-2. Box Layout Modes: the display property

視覺格式化模型 - 行內格式化上下文(IFC)


上一篇
Day22 CSS:IFC(Inline formatting context)
下一篇
Day28 CSS:Float
系列文
從門外漢到前端新手30

尚未有邦友留言

立即登入留言