1. 程式人生 > >CSS Box Model 盒子模型

CSS Box Model 盒子模型

strong size 情況 箱子 nbsp 一起 ner ted 對象

1.概述

1.1前言

css盒子模型具備的屬性:內容(content)、填充(padding)、邊框(border)、邊界(margin);而日常生活中所見的盒子也就是能裝東西的一種箱子,也具有這些屬性,所以用盒子模式來理解。

生活中的盒子說明:

內容(content):盒子裏裝的東西。

填充(padding):怕盒子裏裝的東西(貴重的)損壞而添加的泡沫或者其他抗震的輔料。

邊框(border):盒子本身。

邊界(margin):盒子擺放的時候不能全部堆在一起,留一些空隙保持通風,同時也為了方便取出。

網頁中的盒子說明:

內容(content):文字、圖片等元素(一張圖片裏不能放東西,它自己就是自己的內容,故不是盒子

),也可以是小盒子(div嵌套)。

填充(padding):像素填充,可有可無。

邊框(border):像素展示,可有可無。

邊界(margin):像素填充,可有可無。

兩種盒子的差異:生活中的盒子中東西一般不能大於盒子,否則盒子會被撐壞。而css盒子具有彈性,裏邊的東西大過盒子本身最多把它撐大,但它不會損壞。

1.2 組成結構

以Chrome瀏覽器中盒子模型為例:

技術分享圖片

content:內容區域,文本、圖片出現的位置。CSS中的width、height屬性直接作用的區域。

padding:內邊距區域,存在於content 和 border 之間的區域。可使用CSS的屬性有padding-top、padding-right、padding-bottom、padding-left以及padding。

border:邊框區域,存在於padding 和 margin 之間的區域。在默認布局中border的寬度會設置為0,從而不顯示元素的邊框。

margin:外邊距區域,控制其他元素與當前元素的邊距距離。可使用CSS的屬性有margin-top、margin-right、margin-bottom、margin-left以及margin。

1.2.1 示例

技術分享圖片

技術分享圖片

說明:樣式寬度和真實占有寬度,不是同一內容

2.盒子模型

標準盒子模型與IE盒子模型差異說明:

  • 在CSS盒子模型(Box Model)規定了屬性為:內容(content)、內邊距(padding)、邊框(border)、外邊距(margin)
  • 在CSS的標準盒子模型中,width和height指的是內容區域的寬度和高度。增加內邊距、邊框和外邊距不會影響內容區域的尺寸,但是會增加元素框的總尺寸。IE盒子模型中,width和height指的是內容區域+邊框(左右或上下之和)+內邊距(左右或上下之和)的寬度和高度。

2.1 標準盒子模型

技術分享圖片

2.2 IE盒子模型

技術分享圖片

2.3 盒子說明【標準盒子模型】

內容:width、height

盒子樣例(真實占有寬高都為:302*302):

.box1{
        width: 100px;
        height: 100px;
        padding: 100px;
        border: 1px solid red;
   }
/*盒子真實占有寬度 = 左border + 左padding + width + 右padding + 右border  盒子真實占有高度 = 上border + 上padding + height + 下padding + 下border*/
.box2{
        width: 250px;
        height: 250px;
        padding: 25px;
        border: 1px solid red;
    }

盒子模型:

技術分享圖片 技術分享圖片

總結:

如果想保持一個盒子的真實占有高寬不變,那麽加width/height的時候,就要減相應的padding。加padding的時候就要減相應的width/height。因為盒子變胖是災難性的,會把別的盒子擠下去

3.元素的寬與高

默認情況下,CSS中width、height屬性是指content(內容)區域的寬高。

在DOM中,獲取元素高寬有以下屬性:clientWidth/clientHeight、offsetWidth/offsetHeight、scrollWidth/scrollHeight。

3.1 clientWidth、clientHeight

說明:對象內容的可視區的寬度、高度;包含內邊距、內容區域的寬度、高度,不包滾動條等邊線。

公式:

element.clientWidth = padding-left + width + padding-right
element.clientHeight = padding-top + height + padding-bottom

示例:

技術分享圖片

3.2 offsetWidth、offsetHeight

說明:對象整體的實際寬度、高度;包含了邊框、內邊距、內容區域以及滾動條等範圍的寬度、高度;

公式:

element.offsetWidth = border-left + padding-left + width + padding-right + border-right
element.offsetHeight = border-top + padding-top + height + padding-bottom + border-bottom

示例:

技術分享圖片

3.3 scrollWidth、scrollHeight

說明:與clientWidth、clientHeight類似(包含內邊距、內容區域,但不包括滾動條),不同的是scrollWidth、scrollHeight與元素的overflow樣式屬性息息相關:

當塊級元素的內容超出元素大小時,其內容會根據overflow設定的值出現滾動條或內容溢出,scrollWidth、scrollHeight包含了這些不可見的內容區域。

示例:

技術分享圖片

4. box-sizing

在默認情況下,CSS中的width和height屬性的值只會應用到元素的content(內容區域),而box-sizing屬性可修改此默認範圍。

box-sizing的值有content-box(默認值)和border-box

4.1 box-sizing:content-box

說明:表示CSS中的width和height屬性的值只會應用到元素的內容區域。

如設置一個元素的width為200px,那麽只是這個元素的內容區域寬度有200px。

4.2 box-sizing:border-box

說明:表示元素的邊框和內邊距的範圍包含在CSS中的width、height內。

如設置一個元素的width為200px,那麽此元素內容區域的寬度 = 200 - border - padding。

5. jQuery中元素寬度(高度)

jQuery提供了以下幾種獲取元素的寬度方法:

$(element).width():獲取元素content(內容)區域的寬度。若元素的含有 box-sizing: border-box ,會減去相應的padding、boder。

$(element).innerWidth():獲取元素 content區域 + padding 的寬度。

$(element).outerWidth():獲取元素 content區域 + padding + boder 的寬度。

$(element).outerWidth(true):獲取元素 content區域 + padding + boder + margin 的寬度。

示例圖

技術分享圖片

CSS Box Model 盒子模型