盒模型
CSS 盒模型 (Box Model) 規(guī)定了元素框處理元素內(nèi)容、內(nèi)邊距、邊框 和 外邊距 的方式
1.標(biāo)準(zhǔn)盒模型(瀏覽器默認(rèn))
1.1. 盒模型有哪些屬性構(gòu)成

盒子模型涉及到的四個(gè)區(qū)域,包含5個(gè)屬性
width/height 內(nèi)容區(qū)域: 這兩個(gè)屬性決定元素內(nèi)容content區(qū)域的的大小
padding 內(nèi)邊距:元素的內(nèi)容邊界到邊框之間的距離
border 邊框:元素的邊框
margin 外邊距: 邊框以外是外邊距,外邊距默認(rèn)是透明的,因此不會(huì)遮擋其后任何元素。
注意:
在 CSS 中,width 和 height 指的是內(nèi)容區(qū)域的寬度和高度。增加內(nèi)邊距、邊框和外邊距不會(huì)影響內(nèi)容區(qū)域的尺寸,但是會(huì)增加元素框的總尺寸
1.2 邊框 border
1.2.1 邊框三要素:
單樣式寫(xiě)法:
邊框大小(粗細(xì)) border-width
邊框樣式 border-style
邊框顏色 border-color
復(fù)合寫(xiě)法:
border :1px solid #000;
1.2.2 邊框的大小
大小 就是像素值 px
border-width: 20px
邊框大小可以繼續(xù)細(xì)分
因?yàn)楹凶佑兴膫€(gè)邊
border-top-width: 10px;
border-right-width: 10px;
border-bottom-width: 10px;
border-left-width: 10px;
1.2.3 邊框的樣式
border-style:solid;
邊框的樣式值:
none 無(wú)邊框
solid 實(shí)線
dashed 虛線
dotted 點(diǎn)狀線
double 雙線
邊框樣式細(xì)分:
border-top-style: solid;
border-right-style: solid;
border-bottom-style: solid;
border-left-style: solid;
1.2.4 邊框顏色
十六進(jìn)制顏色值 #CC00FF
英文單詞: red blue
邊框顏色細(xì)分
border-top-color: #000;
border-right-color: #000;
border-bottom-color: #000;
border-left-color: #000;
1.2.5 單獨(dú)定義某條邊的綜合樣式
border-top:1px solid #CC00FF;
border-right:5px solid red;
border-bottom:10px dotted #660033;
border-left:15px double blue;
1.3. 內(nèi)邊距 padding
元素內(nèi)容到邊框之間的距離
1.3.1 內(nèi)邊距的復(fù)合樣式(可以設(shè)置4個(gè)值)
padding:10px 20px 30px 40px;
1.3.2 內(nèi)邊距復(fù)合樣式不同值
padding:; 可以設(shè)置多個(gè)值
-
四個(gè)值
padding:上 右 下 左;
-
三個(gè)值
padding: 上 左右 下;
-
兩個(gè)值
padding: 上下 左右;
-
一個(gè)值
padding: 上下左右;
注意: 內(nèi)邊距不允許使用負(fù)值
1.3.3 內(nèi)邊距單樣式
padding-top 上面(頂部)內(nèi)邊距
padding-right 右邊內(nèi)邊距
padding-bottom 下面(底部)內(nèi)邊距
padding-left 左邊內(nèi)邊距
1.4. 外邊距 margin
margin 元素邊框外,元素與元素 或元素與瀏覽器之間的距離
1.4.1 外邊距復(fù)合樣式
margin:10px 20px 30px 40px;
1.4.2 外邊距復(fù)合樣式的不同值
margin:; 可以設(shè)置多個(gè)值
-
四個(gè)值
margin:上 右 下 左;
-
三個(gè)值
margin: 上 左右 下;
-
兩個(gè)值
margin: 上下 左右;
-
一個(gè)值
margin: 上下左右;
1.4.3 外邊距單樣式
margin-top 上面(頂部)外邊距
margin-right 右邊外邊距
margin-bottom 下面(底部)外邊距
margin-left 左邊外邊距
1.5. 決定盒模型的類型
<style>
div{
box-sizing:content-box;/*標(biāo)準(zhǔn)盒模型 盒子的寬度高度是給content設(shè)置的*/
}
</style>
2. 怪異盒模型
怪異盒模型需要手動(dòng)設(shè)置屬性
box-sizing:border-box;

2.1. 怪異盒模型的原理
width/height padding * 2 + border * 2 + content(內(nèi)容大小)
padding 內(nèi)邊距:元素的內(nèi)容邊界到邊框之間的距離
border 邊框:元素的邊框
margin 外邊距: 邊框以外是外邊距,外邊距默認(rèn)是透明的,因此不會(huì)遮擋其后任何元素。
2.2. 怪異盒模型和標(biāo)準(zhǔn)盒模型的對(duì)比
2.2.1 所設(shè)置的width/height 值作用的區(qū)域不同
-
標(biāo)準(zhǔn)盒模型
width/height 是作用在content區(qū)域內(nèi)
-
怪異盒模型
width/height 是作用在content區(qū)域+padding區(qū)域+border區(qū)域
2.2.2 盒子的大小計(jì)算不同
-
標(biāo)準(zhǔn)盒模型
盒子的占位 = width + padding(左右) + border(左右) + margin(左右)
盒子的占位 = height+ padding(上下) + border上下) + margin(上下)
盒子的寬度= width + padding(左右) + border(左右)
盒子的高度= height+ padding(上下) + border上下)
-
怪異盒模型
盒子的占位 = width + margin(左右)
盒子的占位 = height+ margin(上下)
盒子的寬度 = width
盒子的高度 = height
3.外邊距合并
3.1. 同級(jí)元素發(fā)生外邊距合并
當(dāng)一個(gè)元素出現(xiàn)在另一個(gè)元素上面時(shí),第一個(gè)元素的下外邊距與第二個(gè)元素的上外邊距會(huì)發(fā)生合并。請(qǐng)看下圖:

3.2. 父子級(jí)之間發(fā)生外邊距合并
當(dāng)一個(gè)元素包含在另一個(gè)元素中時(shí)(假設(shè)沒(méi)有內(nèi)邊距或邊框把外邊距分隔開(kāi)),它們的上和/或下外邊距也會(huì)發(fā)生合并。請(qǐng)看下圖:

3.3. 外邊距并的規(guī)則
- 正正取最大值 =====> 50 60 取60 . 正負(fù)值相加 =====> 50 -60 取-10 . 負(fù)負(fù)取最負(fù) =====> -50 -60 取-60
3.4. 外邊距合并的解決辦法
同級(jí)元素給第二個(gè)元素浮動(dòng),添加絕對(duì)定位,單獨(dú)設(shè)置某一個(gè)元素inline-block
-
父子級(jí)元素外邊距合并解決辦法
給父級(jí)設(shè)置內(nèi)邊距代替子級(jí)的外邊距
記住給父級(jí)加邊框
給父級(jí)overflow:hidden;
設(shè)置絕對(duì)定位
記住所有的外邊距的觸發(fā)都是在垂直方向上
必須是在普通文檔流的塊級(jí)元素才會(huì)觸發(fā)外邊距合并,這是大前提!!!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
.wrap {
height: 100px;
;
background-color: #ccc;
margin-top: 100px;
}
.box {}
.item {
float: left;
width: 25%;
box-sizing: border-box;
background-color: pink;
padding: 10px;
}
.item div {
height: 100%;
line-height: 50px;
background-color: #fff;
}
</style>
</head>
<body>
<!-- /*box-sizing:border-box;怪異盒模型根據(jù)屏幕寬度實(shí)現(xiàn)盒子之間間距不變,改變內(nèi)容區(qū)大小*/ -->
<div class="wrap">
<div class="box">
<div class="item">
<div>盒子一</div>
</div>
<div class="item">
<div>盒子一</div>
</div>
<div class="item">
<div>盒子一</div>
</div>
<div class="item">
<div>盒子一</div>
</div>
</div>
<div class="box">
<div class="item">
<div>盒子二</div>
</div>
<div class="item">
<div>盒子二</div>
</div>
<div class="item">
<div>盒子二</div>
</div>
<div class="item">
<div>盒子二</div>
</div>
</div>
</div>
</body>
</html>