1. 程式人生 > >CSS3:box-sizing:不再為盒子模型而煩惱

CSS3:box-sizing:不再為盒子模型而煩惱

題外話:

W3C奉行的標準,就是content-box,就是需要計算邊框,填充還有內容的;但是就我個人而言,
比較喜歡的是傳統IE6時候的怪異模式,不用考慮容器是否會被撐開(打亂佈局);

盒子模型差異

盒子大小計算原理

W3C標準盒子 = (邊框 + 填充 + 內容塊大小) ,牽一髮而動全身;
傳統IE6盒子 = 整體寬高(邊框,填充和隨盒子大小而調整變化)

若是計算佔用位置,兩種盒子都要算上margin(邊距)

簡言之,W3C標準盒子是需要相加各種大小得到總體的寬高,而傳統的IE6是從整體減去內在元素大小而達到調整效果

CSS3:box-sizing

box-sizing : content-box | border-box | inherit;

,針對火狐的還有個padding-box,幾乎不用啊!!!

  • content-box : 標準的W3C盒子模型
  • border-box: 傳統IE6的盒子模型
  • padding-box: 目前只對火狐生效,也是減去適應..但是從padding開始

驗證及效果

程式碼

簡易程式碼,三個盒子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>box-sizing</title>
    <style
>
.demo1,.demo2,.demo3{ width:200px; height:200px; background-color: #2277AD; margin:20px; } .demo1{ box-sizing: content-box; border:30px solid #12D732; padding:10px; } .demo2{ box-sizing
: border-box
; border:30px solid #12D732; padding:10px; }
.demo3{ box-sizing: padding-box; border:30px solid #12D732; padding:10px; }
</style> </head> <body> <div class="demo1"> 我是盒子內部的內容啊!! </div> <div class="demo2"> 我是盒子內部的內容啊!! </div> <div class="demo3"> 我是盒子內部的內容啊!! </div> </body> </html>

效果圖

  • 標準模型的盒子大小(280X280) = 200 +10*2 + 30*2 — 相加效果

Demo1

  • 傳統IE6盒子大小(200X200) = 120 + 10 * 2 + 30*2 — 減去效果

Demo2

  • 針對火狐的padding-box盒子大小(260X260) = 180 + 10*2 + 30*2 –減去效果從padding開始

Demo3

總結

  1. 這個屬性支援IE8+,其他瀏覽器基本都支援了(應該很少人用非常老的FF,CHROME這些吧)
  2. 感覺border-box非常適合用來排版佈局,因為不用擔心內距填充這些導致盒子大於包裹層大小,導致換行,或者其他亂七八糟的問題
  3. 標準盒子也有他的好處,可以針對性的控制內容塊的大小..很細緻的做出調整,就是需要計算比較麻煩點