盒子模型、CSS邊距合并猪半、inline-block縫隙娘香、BFC

1 盒子模型的組成

盒子模型是由邊距、邊框办龄、填充和內(nèi)容組成的烘绽。其中邊距、邊框俐填、填充可以在盒子模型上下左右四個方向上設(shè)置屬性值安接。在HTML文檔中,每個元素(element)都有盒子模型(不論是塊級元素還是行內(nèi)元素)英融。

Paste_Image.png

在 CSS 中盏檐,width 和 height 指的是內(nèi)容區(qū)域(element)的寬度和高度。增加內(nèi)邊距驶悟、邊框和外邊距不會影響內(nèi)容區(qū)域的尺寸胡野,但是會增加元素框的總尺寸。

padding和margin

對于行內(nèi)元素痕鳍,設(shè)置padding和margin屬性的上下方向的屬性值是無效的,不占用頁面空間硫豆,但是上下padding會占用元素背景色龙巨。

邊距合并

什么是邊距合并呢?在這里分兩種情況:
1. 兄弟間邊距合并
2. 父子間邊距合并
我們先說兄弟間邊距合并熊响,先看代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>清除浮動</title>
    <style>
        .wrapper {
            border: 1px solid ;
            width:300px;
        }

        .box1,.box2 {
            width: 100px;
            height: 100px;
            border:1px solid red;
            margin:30px;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="box1"></div>
        <div class="box2"></div>
    </div>
</body>
</html>
Paste_Image.png

那么外邊距是如何產(chǎn)生的呢旨别?(其實說白了就是沒有邊框和填充屬性引起的,最重要的是讓其形成BFC汗茄,下面我們就會講到BFC)在正常的文檔流之中秸弛,相鄰的兩個塊級元素如果在垂直方向上有外邊距,則會產(chǎn)生外邊距合并洪碳。合并之后兩個塊級元素在垂直方向上的距離是取兩者之間外邊距最大值递览。

另外一種情況是父子之間的外邊距合并,先看代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>清除浮動</title>
    <style>
        html,body{
            margin: 0;
            padding: 0;
        }

        .wrapper {  
            width:400px;
            background: pink;
            margin:10px;
        }

        .box1,.box2 {
            width: 100px;
            height: 100px;
            border:1px solid red;
            margin:20px;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="box1"></div>
        <div class="box2"></div>
    </div>
</body>
</html>
Paste_Image.png

顯然瞳腌,在父子之間也產(chǎn)生了邊距合并非迹。那怎么取消外邊距合并呢?
對于兄弟外邊距纯趋,我們可以設(shè)置兄弟元素是浮動元素或是行內(nèi)元素或是overflow:hidden憎兽,這樣就不會產(chǎn)生外邊距合并。

display:float;
/*或者是*/
display:inline-block
/*或者是*/
<div class="wrapper">
        <div class="box1">
                     < div class="box"></div>
                </div>
        <div class="box2">
                    <div class="box> </div>
                </div>
    </div>
.box1,.box2 {
overflow:hidden
}

而對于父子外邊距合并吵冒,則需要在父元素添加邊框或者padding:1px 纯命。

border:1px;
/*或者是*/
padding:1px;

另外還有一種情況是自身合并,主要是這個塊級元素中什么內(nèi)容都沒有痹栖,

<div class="box5"></div>
<h3>hello</h3>
.box5 {
margin:40px;
}

解決辦法:形成BFC

overflow:hidden;//或者
border:1px solid transparent;//或者
padding:1px;

BFC

  • BFC 是什么
    對于有浮動屬性的元素亿汞、絕對定位屬性的元素,塊級容器(inline-block,table-cell),塊級元素OverFlow屬性值不是Visible的元素揪阿。塊級容器和塊級元素OverFlow屬性值不是Visible的元素雖不是塊級元素疗我,但是有塊級元素的屬性。上述元素就會建立塊格式化上下文為里面的內(nèi)容南捂。
    在BFC之中吴裤,盒子在水平方向上是一個緊挨著一個排列的,兩個相鄰的盒子垂直方向上的距離依賴于margin屬性溺健,垂直方向上的不同的兩個盒子margin屬性會折疊麦牺。
    在BFC之中,盒子的左邊界會觸碰到父元素的左邊界(或者右邊界)鞭缭。即使浮動元素也如此剖膳。

父容器使用overflow: auto| hidden撐開高度的原理是什么?

使父容器形成BFC岭辣。

使用display:inline-block 之后的塊級元素會產(chǎn)生縫隙吱晒,如何去除呢?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>清除浮動</title>
    <style>
        html,body,ul,li{
            margin: 0;
            padding: 0;
        }
        .wrapper {
            width: 400px;
            background: pink;
        }
        .wrapper li {
            display: inline-block;
            width: 100px;
            height: 100px;
            border: 1px solid blue;
        }
    </style>
</head>
<body>
    <ul class="wrapper">
        <li></li>
        <li></li>
        <li></li>
    </ul>
</html>
Paste_Image.png

這個縫隙之所以會產(chǎn)生是因為沦童,li元素之間有空白仑濒,

Paste_Image.png

消除空白有四種方法 分別是
1. 讓li排成一列(這個只不過方法肯定不行叹话,最起碼影響代碼的閱讀性。)
2.給每一個li負邊距 margin-left:-4px;
3.li 浮動躏精,li {float:left;}
4.ul {font-size:0}

浮動導致的父容器高度塌陷指什么渣刷?為什么會產(chǎn)生鹦肿?有幾種解決方法矗烛?

指的是父容器無法再次包裹其子元素了,會產(chǎn)生這種情況是因為浮動元素脫離的正常的文檔流了箩溃。
沒有添加浮動元素之前


Paste_Image.png
Paste_Image.png

添加浮動元素之后

Paste_Image.png

這就是父元素的高度塌陷瞭吃,如果想讓父元素重新包裹子元素,解決的方案由如下幾種涣旨,主要是給父元素添加屬性歪架。
1. display:inline-block
2. overflow:hidden
3. float:left
4. 添加偽類元素
這種方式同上面的方式有所不同,上面的方式是在父元素內(nèi)部形成塊格式化上下文霹陡,形成一個獨立的小空間和蚪,但是這種方式是虛擬的向父元素添加一個標簽。作用是清除浮動烹棉,清除浮動后重新讓父元素包裹子元素攒霹。

      .clearfix:after{ /*在父元素內(nèi)部添加一個標簽元素*/
           content: ''; /*元素為行內(nèi)元素,內(nèi)容為空*/
           display: block; /*元素轉(zhuǎn)化為塊級元素*/
           clear: both;/*清除浮動*/
          }
          .clearfix{ *zoom: 1;/*屬性是IE瀏覽器的專有屬性浆洗,F(xiàn)irefox等其它瀏覽器不支持催束。它可以設(shè)置或檢索對象的縮放比例。除此之外伏社,它還有其他一些小作用抠刺,比如觸發(fā)ie的hasLayout屬性,清除浮動摘昌、清除margin的重疊等速妖。*/}

另外BFC 還有一個作用 就是讓圍繞浮動元素的文字不再環(huán)繞。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>清除浮動</title>
    <style>
        html,body,ul,li{
            margin: 0;
            padding: 0;
        }
        .wrapper li {
            list-style: none;
        }
        .wrapper {
            width: 300px;
            border: 1px solid red;          
        }

        .wrapper img {
            float: left;
            width:100px;
        }
        
        .wrapper p {
            /*overflow: auto;*/
        }
    </style>
</head>
<body>
    <div class="wrapper">
        ![](https://www.baidu.com/img/baidu_jgylogo3.gif)
        <p>HTML HTML HTML HTML HTML HTML HTML HTML HTML HTML HTML HTML HTML HTML HTML HTML</p>
    </div>
</html>

P標簽沒有添加overflow屬性之前聪黎,

Paste_Image.png

添加overflow屬性之后

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末买优,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挺举,更是在濱河造成了極大的恐慌杀赢,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湘纵,死亡現(xiàn)場離奇詭異脂崔,居然都是意外死亡,警方通過查閱死者的電腦和手機梧喷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門砌左,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脖咐,“玉大人,你說我怎么就攤上這事汇歹∑ㄉ茫” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵产弹,是天一觀的道長派歌。 經(jīng)常有香客問我,道長痰哨,這世上最難降的妖魔是什么胶果? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮斤斧,結(jié)果婚禮上早抠,老公的妹妹穿的比我還像新娘。我一直安慰自己撬讽,他們只是感情好蕊连,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著游昼,像睡著了一般甘苍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酱床,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天羊赵,我揣著相機與錄音,去河邊找鬼扇谣。 笑死昧捷,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的罐寨。 我是一名探鬼主播靡挥,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸯绿!你這毒婦竟也來了跋破?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤瓶蝴,失蹤者是張志新(化名)和其女友劉穎毒返,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舷手,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡拧簸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了男窟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盆赤。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡贾富,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牺六,到底是詐尸還是另有隱情颤枪,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布淑际,位于F島的核電站畏纲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏庸追。R本人自食惡果不足惜霍骄,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一台囱、第九天 我趴在偏房一處隱蔽的房頂上張望淡溯。 院中可真熱鬧,春花似錦簿训、人聲如沸咱娶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膘侮。三九已至,卻和暖如春的榛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工快鱼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胶哲,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓晓淀,卻偏偏與公主長得像所袁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凶掰,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 一、在什么場景下會出現(xiàn)外邊距合并畅涂?如何合并港华?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例 在CSS當中毅戈,相...
    dengpan閱讀 572評論 0 0
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案苹丸? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,748評論 1 92
  • 問題 1. 在什么場景下會出現(xiàn)外邊距合并?如何合并商模?如何不讓相鄰元素外邊距合并奠旺?給個父子外邊距合并的范例 外邊距合...
    Timmmmmmm閱讀 487評論 0 0
  • 一瞪醋、在什么場景下會出現(xiàn)外邊距合并忿晕?如何合并?如何不讓相鄰元素外邊距合并银受?給個父子外邊距合并的范例 1践盼、外邊距和并的...
    鴻鵠飛天閱讀 605評論 0 0
  • 收拾心情顶霞,重新出發(fā)肄程。加油。 一选浑、在什么場景下會出現(xiàn)外邊距合并蓝厌?如何合并?如何不讓相鄰元素外邊距合并鲜侥?給個父子外邊距...
    婷樓沐熙閱讀 1,330評論 0 1