CSS3:box-sizing:不再為盒子模型而煩惱
阿新 • • 發佈:2019-01-02
題外話:
W3C奉行的標準,就是content-box,就是需要計算邊框,填充還有內容的;但是就我個人而言,
比較喜歡的是傳統IE6時候的怪異模式,不用考慮容器是否會被撐開(打亂佈局);
盒子模型差異
盒子大小計算原理
W3C標準盒子 = (邊框 + 填充 + 內容塊大小) ,牽一髮而動全身;
傳統IE6盒子 = 整體寬高(邊框,填充和隨盒子大小而調整變化)
若是計算佔用位置,兩種盒子都要算上margin(邊距)
簡言之,W3C標準盒子是需要相加各種大小得到總體的寬高,而傳統的IE6是從整體減去內在元素大小而達到調整效果
CSS3:box-sizing
box-sizing : content-box | border-box | inherit;
- 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 — 相加效果
- 傳統IE6盒子大小(200X200) = 120 + 10 * 2 + 30*2 — 減去效果
- 針對火狐的padding-box盒子大小(260X260) = 180 + 10*2 + 30*2 –減去效果從padding開始
總結
- 這個屬性支援IE8+,其他瀏覽器基本都支援了(應該很少人用非常老的FF,CHROME這些吧)
- 感覺border-box非常適合用來排版佈局,因為不用擔心內距填充這些導致盒子大於包裹層大小,導致換行,或者其他亂七八糟的問題
- 標準盒子也有他的好處,可以針對性的控制內容塊的大小..很細緻的做出調整,就是需要計算比較麻煩點