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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...