box-sizing -- 盒模型

来源:http://www.cnblogs.com/sqh17/archive/2017/12/19/8047026.html
-Advertisement-
Play Games

項目開發中,在瀏覽同事的代碼,發現他經常用一個屬性--box-sizing,很好奇是什麼,於是乎,上網查閱資料學了起來。 首先我們先複習一下盒模型的組成:一個div通常由 content(內容)+margin+padding+border組成。 瀏覽器有兩種盒模型:w3c說的標準模型和ie下的傳統模 ...


  項目開發中,在瀏覽同事的代碼,發現他經常用一個屬性--box-sizing,很好奇是什麼,於是乎,上網查閱資料學了起來。
  首先我們先複習一下盒模型的組成:一個div通常由 content(內容)+margin+padding+border組成。

     
  瀏覽器有兩種盒模型:w3c說的標準模型和ie下的傳統模型。也就是css3中box-sizing中對應的屬性值。

  拿盒子的尺寸來說: box-sizing
    w3c的標準模型: content-box     
      盒子的高度= conent的height + padding + margin + border   
      盒子的寬度= content的width + padding + margin + border
    ie下的傳統模型:   border-box
      盒子的高度= content的height + margin (height 包含了padding+border+content)
      盒子的寬度= content的width + margin (width 包含了padding+border+content)

  看這理論感覺很亂,動手實踐才是真道理。
    看一下w3下的標準模型:box-sizing:content-box

              

    這意思就是你給div本身的寬度和高度是100px,但是因為margin,padding和border的添加,導致這個div的寬度和高度隨之變大。可以想象一下,一排上正好可以放5個等大的div,但是半路上給一個div添加了margin或padding或border,一排還能放下5個div嗎,也許是3個或者2個,總之放不下5個。    
  box-sizing:content-box  是瀏覽器預設的樣式,即使不添加,也會 遵遁content-box。
  看一下ie下的傳統模型: box-sizing:border-box

  

      這意思就是你給div的高度和寬度是100px,不管你加了padding和border,其寬度和高度不會改變,改變的是裡面(content)內容的高度和寬度。舉個例子:一排上可以放5個等大的div,你給其中的一個div添加了padding或者border(沒有margin),這一排上還是5個div,只不過你添加padding或border的div里的內容縮小了。

  關於這兩者的區別,只要仔細觀察一下layout圖,就會恍然大悟,原來是這樣啊。在項目開發中,我們經常遇到一行上放等大的li時,只要添加了padding或者border時,容易往下排,右邊一片空白,我們不得不調一下li的height和width,現在不用啦,通過box-sizing:border-box就可以直接解決了。
  box-sizing:border-box主要用於:佈局以及表單元素,表單中不同類型type的預設寬度不一致,可以通過border-box解決。

  相容性:
  box-sizing是css3的新屬性,會有相容性問題。

    
   box-sizing現代瀏覽器都支持,但IE家族只有IE8版本以上才支持,雖然現代瀏覽器支持box-sizing,但有些瀏覽器還是需要加上自己的首碼,Mozilla需要加上-moz-,Webkit內核需要加上-webkit-,Presto內核-o-,IE8-ms-,所以box-sizing相容瀏覽器時需要加上各自的首碼。例如:

  

div{
     -moz-box-sizing: content-box;  
     -webkit-box-sizing: content-box; 
     -o-box-sizing: content-box; 
     -ms-box-sizing: content-box; 
     box-sizing: content-box; 
}


div {
     -moz-box-sizing: border-box;  
     -webkit-box-sizing: border-box; 
     -o-box-sizing: border-box; 
     -ms-box-sizing: border-box; 
     box-sizing: border-box; 
  }

  css3的計算屬性calc()的意思和box-sizing=border-box一樣。簡單用box-sizing,複雜可以用calc()

  另外,有一位大神對box-sizing的理解以及講解特別好,我也是看他的文章才搞明白的,如果想瞭解更深,可以去訪問他的文章 http://blog.sina.com.cn/s/blog_877284510101kt87.html

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 從模塊流可以看出,這個NodeWatchFileSystem模塊非常深,這裡暫時不會深入到chokidar模塊,有點太偏離本系列文章了,從WatcherManager開始講解。 流程如圖: 源碼非常簡單,包括一個工廠函數與兩個原型方法,整理如下: 包含一個容器類和三個實例方法,每一次調用watchF ...
  • 首先我們要在<body>中創建一個按鈕<button>來用作點擊創建圖片,在<button>中寫一個點擊事件(隨便命名), 在創建一個<div>存放圖片,在<div>中創建一個id(跟上面一樣隨便命名) 代碼如下: <button onclick="hehe()">創建圖片</button> <di ...
  • 個人筆記,學習JavaScript以來積累的一些常遇問題的方法和總結 不斷更新中... 轉載需註明 不引入第三個變數,調換兩個數的值 熟悉了這樣的寫法,可以少聲明一個變數 x=10;y=8; //法一: x=x y;//x=2,y=8 y=y+x;//y=10,x=2 x=y x;//x=8,y=1 ...
  • 背景 最近公司要開發一個移動端的類網頁游戲: 長按按鈕有個自行車一直騎行,碰到某個國家的地標就彈出該國的相應say hello的tip,要求橫屏顯示,不能豎屏。 然而當用戶豎屏打開時,而且沒開啟手機里的橫屏模式,還要逼用戶去開啟。這時候用戶早就不耐煩的把你的游戲關掉了。 而且有些機型有些app不能橫 ...
  • [html] view plain copy print?<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ...
  • 一、什麼是sticky footer 在網頁設計中,Sticky footers設計是最古老和最常見的效果之一。它可以概括如下:如果頁面內容不夠長的時候,頁腳塊粘貼在視窗底部;如果內容足夠長時,頁腳塊會被內容向下推送。 二、應用場景案例 如下: 當頁面內容不夠長,比較少時,’X’關閉按鈕粘貼在視窗底 ...
  • .first level{ font size: 1.2rem; cursor: default; color: 666; } .second level{ font size: 1.1rem; padding left: 2.4rem; } .order number{ float: left; ...
  • <!doctype html> <html> <head> <meta charset="utf-8"> <meta name="Author" content="猿道教育-Will老師" > <meta name="Keywords" content="猿說教育,HTML,CSS,JavaScri ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...