CSS Display屬性與盒模型

2021-02-20 天碼營

點擊上面「天碼營」,加入我們,快速成長~

「內容簡介」因為HTML流式文檔的特性,頁面布局往往是新手最為頭疼的問題之一。  本文首先引入CSS盒模型,然後通過不同的display屬性分別介紹Box常見的呈現方式。

因為HTML流式文檔的特性,頁面布局往往是新手最為頭疼的問題之一。 每個HTML元素都會渲染為一個Box,可分為inline Box和block Box。 根據display屬性的不同,Box的呈現方式又有所不同。 本文首先引入CSS盒模型,然後通過不同的display屬性分別介紹Box常見的呈現方式。

Box Sizing:元素大小的計算方式

在HTML中,任何HTML元素都會被呈現為一個矩形。該矩形由內容、內邊距、邊框、外邊距構成。舉個例子:

<style>.box-demo{ width: 100px; height: 100px; border: 50px solid green; padding: 30px; margin: 50px; background: yellow;}</style><div></div>

上述的<div>中,內容、邊距與邊框如下圖所示:


例子中width屬性定義的是內容的寬度,不包含邊距、邊框。然而在IE中width定義的是內容+內邊距+邊框的寬度。 這是由box-sizing屬性來定義的,前者的默認值為content-box',後者的默認值為border-box`。

Display:渲染類型

了解了box-sizing之後,我們回到display屬性。display指定了元素渲染Box的類型(type of rendering box)。我們來看它常用的取值:

隱藏元素

none是最容易理解的取值。當一個元素的displayCSS屬性被設為none時,該元素不會被渲染,也不會佔位,就像不存在一樣。對布局不會產生任何影響。

行內元素

行內(inline)元素不會打斷文本流,默認(UA)顯示為inline的元素包括:<span>,<a>,<em>等。它們的出現不會使得後續元素另起一行。行內元素可以設置margin與padding,但margin只在水平方向上起作用:

div{ display: inline; background: red; padding: 10px; margin: 10px;}

上圖中,紅色背景的是一個<div>,其大小為內容大小+padding;左右的空隙即為外邊距margin。可以看到在Chrome中,這個inline的<div>遮擋了出現在它前面的文本,同時被出現在它後面的文本所遮擋。這正是流式文檔的特性。

另外,對inline元素設置width與height是不起作用的。

塊元素

塊(block)元素會中斷當前的文本流,另起一行,並在父元素中儘可能地佔據最大寬度。常見的塊元素有<p>,<div>,<section>等。通常塊元素不可包含在行內元素內部。例如下面的兩個<p>標籤,不論內容是否足夠,都會佔據整個body的寬:

行內塊

行內塊(inline-block)將會產生一個塊元素,並以行內元素的方式放置。什麼意思呢?該元素的樣式是以塊元素的方式來渲染的,例如可以設置寬和高,然後以行內元素的方式放置在其上下文中,就像在行內元素的位置上替換成這個塊元素一樣。

MDN:The element generates a block element box that will be flowed with surrounding content as if it were a single inline box.

同樣地,我們在一行文本內加入一個<div>,這次將它的display設為inline-block:

div{ display: inline-block; background: yellow; padding: 10px; margin: 10px; height: 20px;}

此時,垂直方向的margin和height都起作用了:

藍色部分為內容,可以看到其高度為20px;

綠色部分為10px的padding;

接著,border為空;

紅色為10px的margin。

inline-block與inline的不同在於:垂直方向上的margin也會起作用,並且可以設置width和height。inline-block是非常常用的樣式設置。

表格元素

display設為table-cell的元素與<td>標籤的行為一致,即:可設置padding,不接受margin,可伸縮的width。

IE6/7不支持table-cell,然而WinXP已經下架。Win7的標配是IE8。現在可以放心地使用table-cell了!

利用table-cell屬性可以在不寫<table>標籤的情況下完成表格布局:

<style>.left, .right{ display: table-cell; line-height: 50px;}.left{ background: yellow; min-width: 150px;}.right{ background: lightgreen; width: 100%;}</style><div> <div>This is left cell</div> <div>This is right cell</div></div>

左側固定150px寬度,右側自適應:

同時發表在:http://harttle.com/2015/05/28/css-display.html

了解更多Java Web開發內容:

三個月時間如何成為Java Web全棧工程師?

相關焦點

  • CSS Display屬性的雙值寫法
    display屬性,なに?display屬性用來控制一個元素及其子元素的格式化上下文,你應該在剛剛學習CSS的時候就知道,有些元素是塊級元素,有些則是行內元素。有了display屬性,你就可以切換元素不同的狀態。比如說,通常一個h1元素是一個塊級元素,但是通過切換,它就能以內聯元素展現。
  • 如何理解CSS的display屬性
    來自:w3cplus連結:http://www.w3cplus.com/css/how-well-do-you-know-display.html
  • HTML+CSS實戰系列——盒模型製作
    主要內容盒模型的概念標準盒模型怪異盒模型彈性盒模型CSS盒模型本質上是一個盒子,封裝周圍的HTML元素,它包括:邊距(margin),邊框(border),填充(padding),和實際內容(content)。盒模型允許我們在其它元素和周圍元素邊框之間的空間放置元素。
  • CSS : Visibility 和 Display 屬性的比較
    這兩個屬性有什麼不同?在頁面元素可見性改變時你如何應對?Visibility 和 Display 屬性的區別這裡有個 Demo 可以比較 visibility: hidden 和 display: none 的區別。點擊頁面上部的連結,頁面裡綠色的 Div 將會進行相應的改變。
  • H5:常用css3屬性box-sizing,display:box
    box-sizing有三個取值:content-box|border-box|inherit;默認情況下值為content-boxcontent-box:寬度和高度分別應用到元素的內容框。在寬度和高度之外繪製元素的內邊距和邊框。border-box:為元素設定的寬度和高度決定了元素的邊框盒。
  • CSS盒模型之內邊距、邊框、外邊距-19問 (持續更新)
    第一問:什麼是盒模型?可以說,頁面就是由一個個盒模型堆砌起來的,每個HTML元素都可以叫做盒模型,盒模型由外而內包括:外邊距(margin)、邊框(border)、填充(亦稱內邊距)(padding)、內容(content)。它在頁面中所佔的實際寬度是margin + border + paddint + content 的寬度相加。但是,盒模型有標準盒模型和IE的盒模型。
  • css flex屬性筆記
    flex屬性定義及用法在css中,flex屬性是使用來設置或檢索彈性盒模型對象的子元素如何分配空間,是 flex-grow屬性、flex-shrink屬性和 flex-basis 屬性的簡寫屬性。flex屬性針對的是彈性盒模型對象的子元素,對於其它元素,flex屬性不起任何作用;一些主流瀏覽器還不支持flex屬性,需要在該屬性之前加對應的前綴才能識別該屬性。Internet Explorer 9及更早版本不支持flex屬性,但是可以通過-ms-flex屬性來支持, IE11 及更新版本完全支持flex屬性,不再需要-ms-前綴。
  • 探究CSS display屬性用法
    探究CSS display屬性用法 你對CSS display 屬性的用法是否了解,display 屬性規定元素應該生成的框的類型,它用於定義建立布局時元素生成的顯示框類型。
  • CSS中display屬性的妙用
    CSS中display屬性的妙用 CSS中visibility屬性隱藏元素但保持元素的浮動位置,而display實際上是設置元素的浮動特徵,這裡就向大家描述一下display屬性的具體使用,希望對你有所幫助。
  • 面試題聯盟之CSS篇
    3、介紹一下CSS的盒模型理論上分為四個盒子,content box、padding box、border box、margin box,但是實際上padding-box 只有 Firefox 曾經支持過,現在也不支持了,margin box更慘從未支持過
  • 面試整理(三)CSS部分
    display: none;是⾮繼承屬性,⼦孫節點消失是由於元素從渲染樹消失造成,通過修改⼦孫節點屬性⽆法顯示;visibility: hidden; 是繼承屬性,⼦孫節點消失是由於繼承了 hidden ,通過設置 visibility: visible; 可以讓⼦孫節點顯式修改常規流中元素的 display 通常會造成⽂檔重排。
  • HTML DOM display屬性語法實例解析
    HTML DOM display屬性語法實例解析 大家對CSS display屬性的用法應該比較熟悉,這個屬性用於定義建立布局時元素生成的顯示框類型,那麼HTML DOM display 屬性有何用途呢,請看本文詳細介紹。
  • 前端基礎篇之CSS世界
    important;min-width: 200px;上面代碼計算之後會被引擎解析成:width: 200px;盒模型(盒尺寸)元素的內在盒子是由margin box、border box、padding box、content box組成的,這四個盒子由外到內構成了盒模型。
  • 關於CSS中display的32種寫法
    display: block;這個值大家不陌生,我們最熟悉的預設就是這個值,最基本的塊級元素,屬於 css入門初學者都知道的概念,只要是容器類型的元素基本都是這個值。2009年誕生的這個屬性可以說是不亞於 css界一場蒸汽機誕生一樣的工業革命,它的誕生標誌著馬車一樣的 float被徹底拋進歷史的垃圾堆。關於它的詳情,會中文的可以參考阮一峰的這篇文章,但我認為,格式編排的更好還是 csstrick上的這篇文章。
  • 關於CSS不得不知的9條面試經驗
    怪異模式的盒模型寬度 = (width + padding + border) + margin 整體來說跟標準盒模型是相類似的,主要是 width + padding + border 這三者算在一起了。
  • CSS的盒子模型和浮動,都在這了
    點關注,不迷路,每天分享大量前端知識css中的盒子模型 css處理網頁時,他認為每個元素都包含在一個不可見的矩形盒子 盒子是由 內容區,內邊距(padding),邊框,外邊距(margin)組成在瀏覽器中,其默認樣式中存在一些body等元素存在的默認樣式,比如一些外邊距
  • 關於CSS屬性display:inline-block的深入理解
    在使用 CSS 實現表現的時候,會經常接觸到 display:inline-block 這一屬性,大都會對這一屬性感覺很模糊。 display:inline-block 將對象呈遞為內聯對象,但是對象的內容作為塊對象呈遞。旁邊的內聯對象會被呈遞在同一行內,允許空格。
  • CSS教程:認真學習haslayout
    要想更好的理解 css, 尤其是 IE 下對 css 的渲染,haslayout 是一個非常有必要徹底弄清除的概念。大多IE下的顯示錯誤,就是源於 haslayout。什麼是 haslayout ?
  • 104道 CSS 面試題,助你查漏補缺(上)
    相關知識點:(1)有兩種盒子模型:IE盒模型(border-box)、W3C標準盒模型(content-box)(2)盒模型:分為內容(content)、填充(padding)、邊界(margin)、邊框(border)四個部分IE盒模型和W3C標準盒模型的區別:
  • html/css基礎面試
    HTML語義化就是讓頁面的內容結構化,便於對瀏覽器,搜尋引擎解析;在沒有樣式css情況下也以一種文檔格式顯示,並且是容易閱讀。搜尋引擎的爬蟲依賴於標記來確定上下文和各個關鍵字的權重,利於SEO。6.css盒模型有哪些及區別content-box border-box padding-box1》IE盒子模型box-sizing:border-box;(怪異模式)