盒子模型托呕、BFC含蓉、清除浮動

盒子模型、BFC镣陕、浮動

  • 盒子模型box model谴餐。
    • 盒子屬性
    • 標(biāo)準(zhǔn)盒模型、IE盒模型的區(qū)別
    • CSS如何設(shè)置這兩種模型
    • JS如何設(shè)置呆抑、獲取盒模型對應(yīng)的寬和高
    • 根據(jù)盒模型解釋邊距重疊岂嗓。
  • BFC(邊距重疊解決方案)或IFC。
  • 浮動
    • 浮動的性質(zhì)
    • 浮動的清除
    • 瀏覽器的兼容性問題
    • 浮動中margin相關(guān)
    • 關(guān)于margin的IE6兼容問題

盒子模型box model

無論是div鹊碍、span厌殉、還是a都是盒子。侈咕,圖片公罕、表單元素一律看作是文本,它們并不是盒子耀销。比如說楼眷,一張圖片里并不能放東西,它自己就是自己的內(nèi)容熊尉。

盒子屬性

  • width和height:內(nèi)容的寬度罐柳、高度(不是盒子的寬度、高度)狰住。
  • padding:內(nèi)邊距张吉。
  • border:邊框。
  • margin:外邊距催植。
    <body>標(biāo)簽?zāi)J(rèn)有8像素 margin

標(biāo)準(zhǔn)盒子模型:

標(biāo)準(zhǔn)盒子模型.jpg

IE盒子模型:

IE盒子模型.jpg

標(biāo)準(zhǔn)盒模型和IE盒模型的區(qū)別:

  • 標(biāo)準(zhǔn)盒子模型中肮蛹,width 和 height 指的是內(nèi)容區(qū)域的寬度和高度。增加內(nèi)邊距创南、邊框和外邊距不會影響內(nèi)容區(qū)域的尺寸伦忠,但是會增加元素框的總尺寸。

  • IE盒子模型中稿辙,width 和 height 指的是內(nèi)容區(qū)域+border+padding的寬度和高度缓苛。

CSS如何設(shè)置這兩種模型

代碼如下:

    /* 設(shè)置當(dāng)前盒子為 標(biāo)準(zhǔn)盒模型(默認(rèn)) */
    box-sizing: content-box;

    /* 設(shè)置當(dāng)前盒子為 IE盒模型 */
    box-sizing: border-box;

備注:盒子默認(rèn)為標(biāo)準(zhǔn)盒模型。

JS如何設(shè)置、獲取盒模型對應(yīng)的寬和高

方式一:通過DOM節(jié)點(diǎn)的 style 樣式獲取

    element.style.width/height;

缺點(diǎn):通過這種方式未桥,只能獲取行內(nèi)樣式笔刹,不能獲取內(nèi)嵌的樣式和外鏈的樣式。這種方式有局限性冬耿,但應(yīng)該了解舌菜。

方式二(通用型)

    window.getComputedStyle(element).width/height;

方式二能兼容 Chrome、火狐亦镶。是通用型方式日月。

方式三(IE獨(dú)有的)

    element.currentStyle.width/height;

和方式二相同,但這種方式只有IE獨(dú)有缤骨。獲取到的即時(shí)運(yùn)行完之后的寬高(三種css樣式都可以獲劝А)。

方式四

    element.getBoundingClientRect().width/height;

此 api 的作用是:獲取一個(gè)元素的絕對位置绊起。絕對位置是視窗 viewport 左上角的絕對位置精拟。

此 api 可以拿到四個(gè)屬性:left、top虱歪、width蜂绎、height。

總結(jié):
上面的四種方式笋鄙,要求能說出來區(qū)別师枣,以及哪個(gè)的通用型更強(qiáng)。

margin塌陷/margin重疊

標(biāo)準(zhǔn)文檔流中萧落,水平方向margin疊加践美,豎直方向的margin不疊加,只取較大的值作為margin

如果不在標(biāo)準(zhǔn)流找岖,比如盒子都浮動了拨脉,那么兩個(gè)盒子之間是沒有margin重疊的現(xiàn)象的。

在標(biāo)準(zhǔn)流中父子結(jié)構(gòu)和兄弟結(jié)構(gòu)都存在margin塌陷/重疊問題宣增,舉個(gè)例子,講父子之間的margin重疊矛缨。

    <div>
        <p></p>
    </div>

上面的結(jié)構(gòu)中爹脾,我們嘗試通過給兒子p一個(gè)margin-top:50px;的屬性,讓其與父親保持50px的上邊距箕昭。結(jié)果卻看到了一個(gè)奇怪的現(xiàn)象灵妨,子元素P帶著父元素一起下降了50px:

此時(shí)我們給父親div加一個(gè)border屬性,就正常了:

** 如果父親沒有border落竹,那么兒子的margin實(shí)際上踹的是“流”泌霍,踹的是這“行”。所以,父親整體也掉下來了朱转。**

margin這個(gè)屬性蟹地,本質(zhì)上描述的是兄弟和兄弟之間的距離; 最好不要用這個(gè)marign表達(dá)父子之間的距離藤为。所以怪与,如果要表達(dá)父子之間的距離,我們一定要善于使用父親的padding缅疟,而不是兒子的margin分别。


BFC(邊距重疊解決方案)

BFC的概念:塊級格式化上下文。

BFC 的原理/BFC的布局規(guī)則【非常重要】

BFC 的原理存淫,其實(shí)也就是 BFC 的渲染規(guī)則:

  • (1)BFC 內(nèi)部的子元素耘斩,在垂直方向,邊距會發(fā)生重疊桅咆。
  • (2)BFC在頁面中是獨(dú)立的容器括授,外面的元素不會影響里面的元素,反之亦然轧邪。(稍后看舉例1
  • (3)BFC區(qū)域不與旁邊的float box區(qū)域重疊刽脖。(可以用來清除浮動帶來的影響)。(稍后看舉例2
  • (4)計(jì)算BFC的高度時(shí)忌愚,浮動的子元素也參與計(jì)算曲管。(稍后看舉例3

如何生成BFC

有以下幾種方法:

  • 方法1:overflow: 不為vidible,可以讓屬性是 hidden硕糊、auto院水。【最常用】
  • 方法2:浮動中:float的屬性值不為none简十。意思是檬某,只要設(shè)置了浮動,當(dāng)前元素就創(chuàng)建了BFC螟蝙。
  • 方法3:定位中:只要posiiton的值不是 static或者是relative即可恢恼,可以是absolutefixed,也就生成了一個(gè)BFC胰默。
  • 方法4:display為inline-block, table-cell, table-caption, flex, inline-flex

參考鏈接:

BFC 的應(yīng)用

舉例1:解決 margin 重疊overflow: hidden

當(dāng)父元素和子元素發(fā)生 margin 重疊時(shí)场斑,解決辦法:給子元素或父元素創(chuàng)建BFC。子元素設(shè)置overflow: hidden就創(chuàng)建一個(gè) BFC牵署,就解決了:

<div class="father">
    <p class="son" style="overflow: hidden">
    </p>
</div>

因?yàn)?strong>第二條:BFC區(qū)域是一個(gè)獨(dú)立的區(qū)域漏隐,不會影響外面的元素。

舉例2:BFC區(qū)域不與float區(qū)域重疊:

針對下面這樣一個(gè)div結(jié)構(gòu)奴迅;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>

        .father-layout {
            background: pink;
        }

        .father-layout .left {
            float: left;
            width: 100px;
            height: 100px;
            background: green;
        }

        .father-layout .right {
            height: 150px;  /*右側(cè)標(biāo)準(zhǔn)流里的元素青责,比左側(cè)浮動的元素要高*/
            background: red;
        }

    </style>
</head>
<body>

<section class="father-layout">
    <div class="left">
        左側(cè),生命壹號
    </div>
    <div class="right">
        右側(cè),smyhvae脖隶,smyhvae扁耐,smyhvae,smyhvae浩村,smyhvae做葵,smyhvae,smyhvae心墅,smyhvae酿矢,smyhvae,smyhvae怎燥,smyhvae瘫筐,smyhvae,
    </div>
</section>

</body>
</html>

效果如下:

image

上圖中铐姚,由于右側(cè)標(biāo)準(zhǔn)流里的元素策肝,比左側(cè)浮動的元素要高,導(dǎo)致右側(cè)有一部分會跑到左邊的下面去隐绵。

如果要解決這個(gè)問題之众,可以將右側(cè)的元素創(chuàng)建BFC,因?yàn)?strong>第三條:BFC區(qū)域不與float box區(qū)域重疊依许。解決辦法如下:(將right區(qū)域添加overflow屬性)

    <div class="right" style="overflow: hidden">
        右側(cè)棺禾,smyhvae,smyhvae峭跳,smyhvae膘婶,smyhvae,smyhvae蛀醉,smyhvae悬襟,smyhvae,smyhvae拯刁,smyhvae脊岳,smyhvae,smyhvae垛玻,smyhvae割捅,
    </div>
image

上圖表明,解決之后夭谤,father-layout的背景色顯現(xiàn)出來了,說明問題解決了巫糙。

舉例3:清除浮動

現(xiàn)在有下面這樣的結(jié)構(gòu):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>

        .father {
            background: pink;
        }

        .son {
            float: left;
            background: green;
        }

    </style>
</head>
<body>

<section class="father">
    <div class="son">
        生命壹號
    </div>

</section>
</body>
</html>

效果如下:

image

上面的代碼中朗儒,兒子浮動了,但由于父親沒有設(shè)置高度,導(dǎo)致看不到父親的背景色(此時(shí)父親的高度為0)醉锄。正所謂有高度的盒子乏悄,才能關(guān)住浮動

如果想要清除浮動帶來的影響恳不,方法一是給父親設(shè)置高度檩小,然后采用隔墻法。方法二是 BFC:給父親增加 overflow=hidden屬性即可烟勋, 增加之后规求,效果如下:

image

為什么父元素成為BFC之后,就有了高度呢卵惦?這就回到了第四條:計(jì)算BFC的高度時(shí)阻肿,浮動元素也參與計(jì)算。意思是沮尿,在計(jì)算BFC的高度時(shí)丛塌,子元素的float box也會參與計(jì)算

清除浮動

1畜疾、加高法:給前面一個(gè)父級元素設(shè)置高度

** 工作上赴邻,我們絕對不會給所有的盒子加高度,這是因?yàn)槁闊┓却罚⑶也荒苓m應(yīng)頁面的快速變化姥敛。**

2、clear:both;法:給后面的盒子添加clear屬性

最簡單的清除浮動的方法届慈,就是給盒子增加clear:both徒溪;表示自己的內(nèi)部元素,不受其他盒子的影響金顿。

** 這個(gè)方法浮動確實(shí)被清除了臊泌,不會互相影響了。但是有一個(gè)問題揍拆,就是margin失效渠概。兩個(gè)div之間,沒有任何的間隙了嫂拴。**

3播揪、隔墻法:

在兩部分浮動元素中間,建一個(gè)墻筒狠。隔開兩部分浮動猪狈,讓后面的浮動元素,不去追前面的浮動元素辩恼。
外墻法:
內(nèi)墻法:

4雇庙、overflow:hidden;

這個(gè)屬性的本意谓形,就是將所有溢出盒子的內(nèi)容,隱藏掉疆前。但是寒跳,我們發(fā)現(xiàn)這個(gè)東西能夠用于浮動的清除。
我們知道竹椒,一個(gè)父親童太,不能被自己浮動的兒子撐出高度,但是胸完,如果這個(gè)父親加上了overflow:hidden书释;那么這個(gè)父親就能夠被浮動的兒子撐出高度了。這個(gè)現(xiàn)象舶吗,不能解釋征冷,就是瀏覽器的偏方。
并且,overflow:hidden;能夠讓margin生效誓琼。

5.偽類清除浮動:.clearfix清除浮動寫在父級元素身上

    .clearfix::after {
        content: '';
        display: block;
        clear: both;
    }

    /* 兼容 IE */
    .clearfix {
        zoom: 1;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末检激,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子腹侣,更是在濱河造成了極大的恐慌叔收,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件傲隶,死亡現(xiàn)場離奇詭異饺律,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)跺株,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門复濒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乒省,你說我怎么就攤上這事巧颈。” “怎么了袖扛?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵砸泛,是天一觀的道長。 經(jīng)常有香客問我蛆封,道長唇礁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任惨篱,我火速辦了婚禮盏筐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砸讳。我一直安慰自己琢融,他們只是感情好楷拳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吏奸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陶耍。 梳的紋絲不亂的頭發(fā)上奋蔚,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機(jī)與錄音烈钞,去河邊找鬼泊碑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛毯欣,可吹牛的內(nèi)容都是我干的馒过。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼酗钞,長吁一口氣:“原來是場噩夢啊……” “哼腹忽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起砚作,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤窘奏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后葫录,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體着裹,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年米同,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骇扇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡面粮,死狀恐怖少孝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情但金,我是刑警寧澤韭山,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站冷溃,受9級特大地震影響钱磅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜似枕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一盖淡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凿歼,春花似錦褪迟、人聲如沸冗恨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掀抹。三九已至,卻和暖如春心俗,著一層夾襖步出監(jiān)牢的瞬間傲武,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工城榛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留揪利,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓狠持,卻偏偏與公主長得像疟位,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子喘垂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案甜刻? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,754評論 1 92
  • 1. 前言 前端圈有個(gè)“梗”:在面試時(shí)正勒,問個(gè)css的position屬性能刷掉一半人罢吃,其中不乏工作四五年的同學(xué)。在...
    YjWorld閱讀 4,446評論 5 15
  • relative:生成相對定位的元素昭齐,通過top,bottom,left,right的位置相對于其正常位置進(jìn)行定位...
    zx9426閱讀 943評論 0 2
  • 一尿招,浮動元素有什么特征?對父容器阱驾、其他浮動元素就谜、普通元素、文字分別有什么影響? 浮動模型是一種可視化格式模型里覆,浮動...
    DeeJay_Y閱讀 874評論 0 4
  • 【原文】子貢曰:“我不欲人之加諸我也丧荐,吾亦欲無加諸人⌒希”子曰:“賜也虹统,非爾所及也∷砩酰” 【譯文】子貢說:“我不想別人...
    轉(zhuǎn)念館閱讀 824評論 0 0