面試常見問(wèn)題之css盒模型

題目:談?wù)勀銓?duì)css盒模型的認(rèn)識(shí)

基本概念:標(biāo)準(zhǔn)模型+IE模型

相關(guān)問(wèn)題及答案:

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

CSS盒模型的標(biāo)準(zhǔn)模型和IE的盒模型的區(qū)別在于寬度不同术吝。css的寬度是指content的寬度,而IE盒模型則是content+padding+border


1.png

2.png

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

? 利用 box-sizing:content-box和box-sizing:border-box來(lái)區(qū)別兩種盒模型彬向。瀏覽器默認(rèn)的是content-box。

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

? dom.style.width/height(只能取到內(nèi)聯(lián)式的寬和高)

? dom.currentStyle.width/height(能及時(shí)拿到渲染后的寬和高颅拦,但是只有IE支持)

? window.getComputedStyle(dom).width/height(支持所有瀏覽器)

? dom.getBoundingClientRect().width/height(計(jì)算絕對(duì)位置)

4)實(shí)例題(根據(jù)盒模型解釋邊距重疊)

1583124314684.png
塊級(jí)元素套了一個(gè)塊元素臊恋,已知子元素的高度為100px.子元素與父元素的上邊距距離高度是10px.那么父盒子的高度是多少?

答案:100px或110px
代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>css盒模型</title>
    <style>
        html * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <section id="sec">
        <style>
            #sec{
                background-color: red;
            }
            .child{
                height: 100px;
                margin-top: 10px;
                background-color: yellow;
            }
        </style>
        <article class="child"></article>
    </section>
</body>
</html>

代碼添加完 打開瀏覽器后如下圖所示:


1583147859227.png

發(fā)現(xiàn)父盒子的高度為100px虱肄。
然而這時(shí)候我們并沒(méi)有看見父盒子的顏色致板,所以嘗試添加overflow-hidden嘗試發(fā)現(xiàn)紅色區(qū)域露了出來(lái)


1583147584523.png

高度也發(fā)生了變化 為110px


1583147679226.png

5)BFC(邊距重疊解決方案)

問(wèn)題:

一、BFC的基本概念:塊級(jí)格式化上下文 (引申:IFC內(nèi)聯(lián)元素上下文)

二咏窿、BFC的原理(BFC的渲染規(guī)則):
1.BFC的邊距會(huì)發(fā)生重疊

  1. BFC的區(qū)域不會(huì)與浮動(dòng)元素的BOX重疊
  2. BFC在獨(dú)立頁(yè)面上是一個(gè)容器 外面的元素不會(huì)影響他里面的元素 里面的元素也不會(huì)影響它外面的元素
  3. 計(jì)算BFC高度的時(shí)候斟或,浮動(dòng)元素的高度也會(huì)計(jì)算

三、如何創(chuàng)建BFC翰灾?

1)根元素
2)float屬性不為none(CSS屬性的默認(rèn)值為none缕粹,只要你設(shè)置了浮動(dòng)稚茅,當(dāng)前元素就創(chuàng)建了BFC)
3)position不為static和relative(position的默認(rèn)值是static)
4)overflow不為visible (可以為hidden等)
5)display為inline-block, table-cell, table-caption, flex, inline-flex

四、BFC的使用場(chǎng)景有哪些平斩?

示例代碼:

首先設(shè)定BFC發(fā)生邊距重疊的情況
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>css盒模型</title>
    <style>
        html * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <section id="sec">
        <style>
            #sec{
                background-color: red;
            }
            .child{
                height: 100px;
                margin-top: 10px;
                background-color: yellow;
            }
        </style>
        <article class="child"></article>
    </section>
<!-- BFC垂直方向重疊 -->

<section id="margin">
    <style>
        #margin{
            background-color: pink;
            overflow: hidden;
        }
        #margin>p{
            margin:5px auto 25px;
            background-color: red;
        }
    </style>
    <p>1</p>
    <p>2</p>
    <p>3</p>
</section>



</body>
</html>

打開發(fā)現(xiàn) 2的下邊距和3的上邊距發(fā)生重疊


1583150061936.png

如何消除這種重疊呢亚享?

只需要給子元素創(chuàng)建一個(gè)父元素 而父元素創(chuàng)建一個(gè)BFC即可 如下圖所示:


1583150205775.png

打開瀏覽器


1583150452762.png

再次利用float創(chuàng)建雙欄布局 左側(cè)固定 右側(cè)自適應(yīng)
讓浮動(dòng)元素的BOX重疊
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>css盒模型</title>
    <style>
        html * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>

<body>
    <section id="sec">
        <style>
            #sec {
                background-color: red;
            }

            .child {
                height: 100px;
                margin-top: 10px;
                background-color: yellow;
            }
        </style>
        <article class="child"></article>
    </section>
    <!-- BFC垂直方向重疊 -->

    <section id="margin">
        <style>
            #margin {
                background-color: pink;
                overflow: hidden;
            }

            #margin>p {
                margin: 5px auto 25px;
                background-color: red;
            }
        </style>
        <p>1</p>
        <div style="overflow: hidden;">
            <p>2</p>
        </div>

        <p>3</p>
    </section>

    <section id="layout">
        <!-- 以兩欄布局為例,左邊寬度固定绘面,右邊寬度自適應(yīng) -->
        <style>
           
            #layout .container{
                
                background-color: #000;
            }

            #layout .container .left{
                width: 300px;
                height: 100px;
                background-color: red;
                float: left;
            }

            #layout .container .right{
        
                height: 110px;
                background-color: blue;
            }
        </style>
        <article class="container">
            <div class="left"></div>
            <div class="right"></div>

        </article>

    </section>





</body>

</html>

打開瀏覽器 如下圖所示:


1583151249790.png

給右側(cè)盒子加一個(gè)overflow:auto欺税;讓其成為BFC 如下圖所示 發(fā)現(xiàn)已經(jīng)解決.


1583151516110.png
設(shè)定:計(jì)算高度的時(shí)候,浮動(dòng)元素的高度沒(méi)有計(jì)算
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>css盒模型</title>
    <style>
        html * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>

<body>
    <section id="sec">
        <style>
            #sec {
                background-color: red;
            }

            .child {
                height: 100px;
                margin-top: 10px;
                background-color: yellow;
            }
        </style>
        <article class="child"></article>
    </section>
    <!-- BFC垂直方向重疊 -->

    <section id="margin">
        <style>
            #margin {
                background-color: pink;
                overflow: hidden;
            }

            #margin>p {
                margin: 5px auto 25px;
                background-color: red;
            }
        </style>
        <p>1</p>
        <div style="overflow: hidden;">
            <p>2</p>
        </div>

        <p>3</p>
    </section>



    <!-- BFC不與flaot重疊的解決方式 -->
    <section id="layout">
        <!-- 以兩欄布局為例揭璃,左邊寬度固定晚凿,右邊寬度自適應(yīng) -->
        <style>
           
            #layout .container{
                
                background-color: #000;
            }

            #layout .container .left{
                width: 300px;
                height: 100px;
                background-color: red;
                float: left;
            }

            #layout .container .right{
                overflow: auto;
                height: 110px;
                background-color: blue;
            }
        </style>
        <article class="container">
            <div class="left"></div>
            <div class="right"></div>

        </article>

    </section>

    <!-- BFC不與flaot重疊的解決方式 -->
<section id="float">
<style>
    #float{
        background-color: red;
    }
    #float .float{
        float: left;
        font-size: 30px;
    }
</style>

    <div class="float">我是浮動(dòng)元素</div>
</section>



</body>

</html>

打開瀏覽器


1583152286550.png

讓父元素變成BFC


1583152523929.png

打開瀏覽器可以看見
1583152547165.png
最終代碼
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>css盒模型</title>
    <style>
        html * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>

<body>
    <section id="sec">
        <style>
            #sec {
                background-color: red;
            }

            .child {
                height: 100px;
                margin-top: 10px;
                background-color: yellow;
            }
        </style>
        <article class="child"></article>
    </section>
    <!-- BFC垂直方向重疊 -->

    <section id="margin">
        <style>
            #margin {
                background-color: pink;
                overflow: hidden;
            }

            #margin>p {
                margin: 5px auto 25px;
                background-color: red;
            }
        </style>
        <p>1</p>
        <div style="overflow: hidden;">
            <p>2</p>
        </div>

        <p>3</p>
    </section>



    <!-- BFC不與flaot重疊的解決方式 -->
    <section id="layout">
        <!-- 以兩欄布局為例,左邊寬度固定瘦馍,右邊寬度自適應(yīng) -->
        <style>
            #layout .container {

                background-color: #000;
            }

            #layout .container .left {
                width: 300px;
                height: 100px;
                background-color: red;
                float: left;
            }

            #layout .container .right {
                overflow: auto;
                height: 110px;
                background-color: blue;
            }
        </style>
        <article class="container">
            <div class="left"></div>
            <div class="right"></div>

        </article>

    </section>



    <!-- BFC子元素即使是flaot也會(huì)參與計(jì)算 -->
    <section id="float">
        <style>
            #float {
                background-color: red;
                overflow: auto;
                /* 或者用float不為none也可以 */
            }

            #float .float {
                float: left;
                font-size: 30px;
            }
        </style>

        <div class="float">我是浮動(dòng)元素</div>
    </section>



</body>

</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末歼秽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子情组,更是在濱河造成了極大的恐慌燥筷,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件院崇,死亡現(xiàn)場(chǎng)離奇詭異肆氓,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)底瓣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門谢揪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人捐凭,你說(shuō)我怎么就攤上這事拨扶。” “怎么了柑营?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵屈雄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我官套,道長(zhǎng)酒奶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任奶赔,我火速辦了婚禮惋嚎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘站刑。我一直安慰自己另伍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摆尝,像睡著了一般温艇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堕汞,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天勺爱,我揣著相機(jī)與錄音,去河邊找鬼讯检。 笑死琐鲁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的人灼。 我是一名探鬼主播围段,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼投放!你這毒婦竟也來(lái)了奈泪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤灸芳,失蹤者是張志新(化名)和其女友劉穎段磨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耗绿,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年砾隅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了误阻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晴埂,死狀恐怖究反,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情儒洛,我是刑警寧澤精耐,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站琅锻,受9級(jí)特大地震影響卦停,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恼蓬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一惊完、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧处硬,春花似錦小槐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)件豌。三九已至,卻和暖如春控嗜,著一層夾襖步出監(jiān)牢的瞬間茧彤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工躬审, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棘街,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓承边,卻偏偏與公主長(zhǎng)得像遭殉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子博助,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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

  • css盒模型 1.題目:談?wù)勀銓?duì)css盒模型的認(rèn)識(shí)(從理論轉(zhuǎn)化到應(yīng)用) 基本概念:標(biāo)準(zhǔn)模型+ IE模型border...
    飛菲fly閱讀 960評(píng)論 0 2
  • 基本慨念 內(nèi)容區(qū)域(content)是包含元素真實(shí)內(nèi)容的區(qū)域萝喘。它通常包含背景淮逻、顏色或者圖片等,位于內(nèi)容邊界的內(nèi)部阁簸,...
    晴天的晴q閱讀 2,187評(píng)論 0 0
  • 盒模型的認(rèn)識(shí) 基本概念:標(biāo)準(zhǔn)模型+IE模型爬早。 包括margin,border,padding,content 標(biāo)準(zhǔn)...
    小境之月閱讀 610評(píng)論 0 1
  • 1、介紹一下CSS的盒子模型启妹,低版本IE的盒子模型有什么不同筛严?如何設(shè)置這兩種模型? (1)有兩種饶米, IE 盒子模型...
    LemonnYan閱讀 952評(píng)論 0 7
  • 將心燃成火焰的形狀 渲染血色 溫暖在夢(mèng)的邊緣 跳躍 掐一朵櫻的柔 嵌于眉間 悄悄告訴我桨啃,春天 藍(lán)天下的草原牧歌 陽(yáng)...
    月影007閱讀 502評(píng)論 8 12