整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          前端開發:看了就會的CSS盒模型詳解

          源 | https://juejin.im/post/59ef72f5f265da4320026f76


          CSS的盒模型是CSS的基礎,同時也是難點,這個問題經常在面試中會被問到,屬于經典問題了。很多博客里講得也很模糊不清,于是,我在這里重新整理一下。
          可以認為每個html標簽都是一個方塊,然后這個方塊又包著幾個小方塊,如同盒子一層層的包裹著,這就是所謂的盒模型。

          盒模型分為IE盒模型和W3C標準盒模型。

          IE盒模型和W3C標準盒模型的區別是什么?

          1. W3C 標準盒模型:

          屬性width,height只包含內容content,不包含border和padding。

          2. IE 盒模型:

          屬性width,height包含border和padding,指的是content+padding+border。

          在ie8+瀏覽器中使用哪個盒模型可以由box-sizing(CSS新增的屬性)控制,默認值為content-box,即標準盒模型;如果將box-sizing設為border-box則用的是IE盒模型。如果在ie6,7,8中DOCTYPE缺失會觸發IE模式。在當前W3C標準中盒模型是可以通過box-sizing自由的進行切換的。

          content-box(標準盒模型)

          width = 內容的寬度

          height = 內容的高度

          border-box(IE盒模型)

          width = border + padding + 內容的寬度

          height = border + padding + 內容的高度

          谷歌瀏覽器,按下F12,然后把右邊欄的滾動條拉到最下面你就會看到一個東西:

          通過代碼來對其進行理解,更直觀,如下
          .box{        width:200px;        height:200px;        background-color:pink;}

          此時,盒子大小就是content的大小。
          .box{        width:200px;        height:200px;        background-color:pink;        padding:20px;}

          此時,盒子的長寬變成了240x240,顯然,padding是能夠改變盒子的大小的,這時盒子大小就等于content+padding。
          .box{        width:200px;        height:200px;        background-color:pink;        padding:20px;        border:10px solid black;}

          此時,盒子的長寬變成了260x260,所以這時盒子大小就等于content+padding+border。
          .box{        width:200px;        height:200px;        background-color:pink;        padding:20px;        border:10px solid black;        margin-bottom:10px;}.box1{        width: 100px;        height: 100px;        background: green;}
          效果圖如下:

          此時,盒子的長寬仍為260x260,即盒子的大小并未發生變化。

          可以看到,盒子的底部產生了10px的空白。

          所以說,盒子的大小為content+padding+border即內容的(width)+內邊距的再加上邊框,而不加上margin。

          很多時候,我們會錯誤地把margin算入,若那樣的話,上面這種情形盒子的大小應該是260x270,但實際情況并不是這樣的。

          css的盒模型由content(內容)、padding(內邊距)、border(邊框)、margin(外邊距)組成。但盒子的大小由content+padding+border這幾部分決定,把margin算進去的那是盒子占據的位置,而不是盒子的大小!

          我們可以試著給上面的粉色方塊設置box-sizing屬性為border-box發現,會發現:無論我們怎么改border和padding盒子大小始終是定義的width和height。如下
          .box{        width:200px;        height:200px;        background-color:pink;        box-sizing:border-box;        padding:20px;}

          我們在編寫頁面代碼時應盡量使用標準的W3C模型(需在頁面中聲明DOCTYPE類型),這樣可以避免多個瀏覽器對同一頁面的不兼容。

          因為若不聲明DOCTYPE類型,IE瀏覽器會將盒子模型解釋為IE盒子模型,FireFox等會將其解釋為W3C盒子模型;若在頁面中聲明了DOCTYPE類型,所有的瀏覽器都會把盒模型解釋為W3C盒模型。

          在前端面試的過程中,CSS盒模型是一道問的頻率非常高的問題。目前網上也有很多解釋CSS盒模型的文章,看了之后自己也總結了下相關知識點,大家一起來看看吧。

          感興趣的同學可以加下我自己維護的群624-576-634。

          CSS

          CSS盒模型-What?

          我們首先要了解的一個內容就是,什么是CSS盒模型呢?

          簡單點說我們可以把一個HTML頁面看做一個大的方塊,在這個大的方塊里會嵌套很多小方塊(DOM元素),然后小方塊又會嵌套其他的小方塊,這樣一層層的嵌套著就構成了一個盒模型。

          既然頁面的結構都是由一系列HTML標簽構成,為什么還會有不同的盒模型呢?

          想當年微軟的IE瀏覽器占據超過80%市場份額的時候,覺得自己財大氣粗(是不是有點黑-_-!),想自己獨立制定一套瀏覽器標準,其中就包括IE的盒模型,但是其他諸如Mozilla,Google等公司不同意IE的做法,他們遵循的是W3C的標準來定制瀏覽器,也就是W3C標準盒模型,因此就造成了現在瀏覽器不同的CSS盒模型了。

          接下來我們具體看看IE盒模型和W3C盒模型有什么具體的不同吧。

          對比

          • W3C標準盒模型

          元素的width和height屬性只包含內容content部分,不包含內邊距padding和邊框border部分。

          • IE標準盒模型

          元素的width和height屬性同時包含內容content,內邊距padding和邊框border部分,即:

          width = content + padding + border

          使用

          那么我們該如何切換兩種盒模型的展示呢?

          在IE8及以下的瀏覽器中只支持IE盒模型,在IE8+及其他主流瀏覽器中,通過CSS新增的box-sizing屬性可以設置瀏覽器的盒模型。box-sizing屬性的默認值是content-box,即W3C標準盒模型;而將box-sizing值設置為border-box時,則會更改為IE盒模型。

          接下來我們通過代碼和界面效果來看看兩種盒模型的差異。

          效果展示

          以下測試都在Chrome瀏覽器中進行。

          • W3C盒模型

          首先定義一個div,有如下CSS屬性。

          定義一個div

          如上所講,在不設置box-sizing屬性的情況下會采用W3C標準盒模型,在頁面呈現的結果如下所示。

          頁面效果

          左側是HTML頁面的效果,右側是通過查看瀏覽器的style效果。從中可以看出內容寬度(淺藍色部分)為100px,橫向實際占據的空間為content+padding+border,也就是100px+20px*2+10px*2=160px,乘以2是因為有左右兩個方向。

          • IE盒模型

          同樣的元素我們再看看在IE盒模型下是什么樣的展示。只需要添加box-sizing: border-box;屬性即可。

          css樣式

          其呈現的效果如下圖所示。

          頁面效果

          從圖中可以看出,width設為100px,其占據的寬度也就是100px,其中實際內容的寬度只有40px大小(淺藍色部分),padding-left和padding-right各占20px,border-left和border-right各占10px,因此是40+20*2+10*2=100px。

          由以上的例子就可以很明顯的看出IE盒模型和W3C標準盒模型的區別了。

          關于margin

          不管是在IE盒模型還是W3C標準盒模型中,margin產生的效果是一樣的,都是會占用實際的空間,但是不改變盒子大小。

          我們在上面例子的CSS屬性中再加入margin: 30px;

          首先看看在IE盒模型下效果圖如下。

          IE盒模型

          通過上圖可以看出盒子需要占據的空間寬度為100+30*2=160px,而盒子實際寬度仍然為100px。

          然后看看在W3C標準和模型下的效果。

          W3C盒模型

          通過上圖可以看出盒子需要占據的空間寬度為100+20*2+10*2+30*2=220px,而盒子的實際寬度為100+20*2+10*2=160px。

          總結

          今天這篇文章通過圖例和代碼講解了CSS中兩種不同的盒模型,分別是IE盒模型和W3C標準盒模型,大家都學會了嗎?

          解盒模型:CSS3 中的盒模型有以下兩種:標準盒模型、IE盒子模型(怪異盒模型),盒模型是由4個部分組成,由內向外分別是content(下圖藍色部分)、padding、border、margin盒模型有5個屬性:

          • width 元素寬
          • height 元素高
          • border 元素邊框線
          • pdding元素內邊距
          • margin元素外邊距

          一張圖來理解盒模型的5個屬性

          父子間間距,通過給父元素設置padding來實現

          兄弟間間距,通過給元素設置margin來實現

          標準盒模型和 IE盒模型- 兩者區別

          標準盒模型IE盒模型的區別在于設置 widthheight 屬性時,所對應的范圍不同:

          • 標準盒模型的 width 和 height 屬性的范圍只包含了 content內容區。
          • IE盒模型(怪異盒模型)的 width 和 height 屬性的范圍包含了 border、padding 和 content

          案例展示

          <style>
               .box {
                 width: 100px;
                 height: 150px;
                 padding: 20px;
                 border: 10px;
                 margin: 50px;
                 box-sizing: border-box;/*怪異地盒子模型*/
              }
             </style>
           <body>
             <div class="box"></div>
           </body>

          以上代碼,在未添加box-sizing: border-box;和添加后,兩者渲染后的效果如下

          標準盒模型

          標準盒模型下的width:100px;height:150px;只包含了content部分,所以content的寬高為100px和150px;

          怪異盒模型

          width:100px;height:150px;包含了border、padding、content三部分,則通過計算得出content內容區的高為: 150px-20px*2-10px*2=90px寬為:100px -20px*2 -10px*2=40px

          盒模型轉換

          可以通過修改元素的 box-sizing 屬性來改變元素的盒模型:

          • box-sizing: content-box表示標準盒模型(默認值)
          • box-sizing: border-box表示 IE 盒模型(怪異盒模型)

          你學會了嗎?

          為幫助到一部分同學不走彎路,真正達到一線互聯網大廠前端項目研發要求,首次實力寵粉,打造了《30天挑戰學習計劃》,內容如下:

          HTML/HTML5,CSS/CSS3,JavaScript,真實企業項目開發,云服務器部署上線,從入門到精通

          • PC端項目開發(1個)
          • 移動WebApp開發(2個)
          • 多端響應式開發(1個)

          共4大完整的項目開發 !一行一行代碼帶領實踐開發,實際企業開發怎么做我們就是怎么做。從學習一開始就進入工作狀態,省得浪費時間。

          從學習一開始就同步使用 Git 進行項目代碼的版本的管理,Markdown 記錄學習筆記,包括真實大廠項目的開發標準和設計規范,命名規范,項目代碼規范,SEO優化規范

          從藍湖UI設計稿 到 PC端,移動端,多端響應式開發項目開發

          • 真機調試,云服務部署上線;
          • Linux環境下 的 Nginx 部署,Nginx 性能優化;
          • Gzip 壓縮,HTTPS 加密協議,域名服務器備案,解析;
          • 企業項目域名跳轉的終極解決方案,多網站、多系統部署;
          • 使用 使用 Git 在線項目部署;

          這些內容在《30天挑戰學習計劃》中每一個細節都有講到,包含視頻+圖文教程+項目資料素材等。只為實力寵粉,真正一次掌握企業項目開發必備技能,不走彎路 !

          過程中【不涉及】任何費用和利益,非誠勿擾 。

          如果你沒有添加助理老師微信,可以添加下方微信,說明要參加30天挑戰學習計劃,來自頭條號!老師會邀請你進入學習,并給你發放相關資料

          30 天挑戰學習計劃 Web 前端從入門到實戰 | arry老師的博客-艾編程


          主站蜘蛛池模板: 国产日韩高清一区二区三区| 国产高清在线精品一区二区| 一区二区在线视频观看| 国精产品一区一区三区免费视频| 91久久精品无码一区二区毛片| 国产成人精品一区在线| 亚洲av色香蕉一区二区三区蜜桃| 中文字幕精品一区| 国产精品亚洲专一区二区三区| 亚洲一区综合在线播放| 国产免费一区二区视频| 国产精品免费一区二区三区| 亚洲AV无码一区二区三区久久精品| 亚洲综合无码AV一区二区| 亚洲一区精品伊人久久伊人| 国产一区风间由美在线观看| 日韩美女视频一区| 成人久久精品一区二区三区| 亚洲色精品三区二区一区| 亚洲av无码一区二区三区观看| 免费视频精品一区二区三区| 一区二区三区人妻无码| 无码精品黑人一区二区三区| 精品少妇一区二区三区在线| 国产精品无码不卡一区二区三区 | 免费一区二区三区在线视频| 成人无号精品一区二区三区 | 无码人妻视频一区二区三区| 亚洲中文字幕无码一区二区三区| 精品免费久久久久国产一区| 国产高清精品一区| 国产午夜精品一区二区三区嫩草| 日韩制服国产精品一区| 狠狠色婷婷久久一区二区| 中文字幕亚洲乱码熟女一区二区 | 小泽玛丽无码视频一区| 国产乱码伦精品一区二区三区麻豆| 国产福利电影一区二区三区,日韩伦理电影在线福 | 精品久久一区二区三区| 久久亚洲色一区二区三区| 中文字幕精品亚洲无线码一区|