CSS 盒模型淺談

盒模型的定義

在瀏覽器中,每個元素都可以被認爲是盒模型。盒模型一般有以下屬性:display, position, float, width, height, padding, border, margin.

盒模型一般由 元素內容, padding, border, margin 組成 , 所以又有內盒和外盒的概念。其中內外盒元素的寬高計算如下:

  • 內盒元素寬(高)
    • 內盒元素寬(高) = 元素內容寬(高) + padding寬(高) + border寬(高)
  • 外盒元素寬(高)
    • 外盒元素寬(高) = 元素內容寬(高) + padding寬(高) + border寬(高) + margin寬(高)

tips: 可以看出外盒元素比內盒元素多個 margin 屬性。

由於不同瀏覽器的對於 CSS 實現差異,盒模型又分爲 CSS 標準模型 和 IE(IE6 以下版本) 傳統模型兩種模式。

其中這兩種盒模型的主要區別在於對 CSS 的 width(height) 屬性的計算方式,計算方式分別如下:

  • CSS 標準模型
    • width(height) = 元素內容寬(高)
  • IE 傳統模型
    • width(height) = 元素內容寬(高) + padding寬(高) + border寬(高)

解釋: 從以上公式也可以看出 width(height) 在 CSS 標準模型中是直接等於元素內容的寬(高)的,而在 IE 傳統模型中是等於元素內容paddingborder 的寬(高)之和的。

tips: 雖然傳統的盒模型只有在 IE6 以下的版本中存在,而且目前 IE6 的使用用戶非常少,但出於兼容性的考慮還是應該清除這兩種模式的區別。另外在 input 中,submit, reset, button 和 select 等元素仍然是基於傳統的盒模型的,如果給他們設置 border和padding,它們會向盒內延伸。

當然我們也可以 box-sizing 屬性來定義元素盒模型的模式。

box-sizing 有以下三種取值:

  • content-box:CSS 標準盒模型,width(height) 與 元素內容寬(高) 相同。
  • border-box: IE 傳統盒模型,width(height) 是計算 border ,padding, 元素內容 的寬(高)之和。
  • inherit:繼承父元素的盒模型

inline,block,inline-block 的區別

特性

  • inline:設置寬高無效,margin 只對水平方向有效,padding 在水平和垂直方向都有效,不換行。
  • block:可以有效設置寬高,margin 對水平垂直方向都有效,padding 在水平和垂直方向都有效,換行。
  • inline-block:可以有效設置寬高,margin 對水平垂直方向都有效,padding 在水平和垂直方向都有效,不換行。

元素

  • inline:a, span, i, em, strong, label...
  • block:div, p, h1...h6, ol, ul, li, table, form...
  • inline-block:img, input

position

  • absolute/fixed:不論 inline,block,inline-block,都可以有效設置寬高,都可以有效設置 margin, padding 值,脫離文檔流,通過top, right, bottom, left 定位。
  • relative:相對於正常文檔流的位置,不改變盒模型的 inline,block,inline-block 特性。
  • static:默認值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章