盒子模型---塌陷及定位

(1)高度塌陷:
在文檔流中芹彬,父元素的高度默認(rèn)是被子元素?fù)伍_的,也就是子元素多高叉庐,父元素就多高
但是當(dāng)為子元素設(shè)置浮動以后舒帮,子元素會完全脫離文檔流,此時將會導(dǎo)致子元素?zé)o法撐起父元素的高度,導(dǎo)致父元素的高度塌陷
由于父元素的高度塌陷了会前,則父元素下的所有元素都會向上移動好乐,這樣將會導(dǎo)致頁面布局混亂
所以在開發(fā)中一定要避免出現(xiàn)高度塌陷的問題,
我們可以將父元素的高度寫死,以避免塌陷的問題出現(xiàn)瓦宜,
但是一旦高度寫死蔚万,父元素的高度將不能自動適應(yīng)子元素的高度,所以這種方案是不推薦使用的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>高度塌陷</title>
    <style type="text/css">
        .box1{
            border: 10px red solid;
            height: 100px;
        }
        .box2{
            width: 100px;
            height: 100px;
            background: blue;
            float: left;
        }
        .box3{
            height: 100px;
            background: yellow;
        }
    </style>
</head>
<body>
    <div class="box1">
        <div class="box2">a</div>
    </div>
    <div class="box3"></div>
</body>
</html>

(2)高度塌陷2:
根據(jù)W3C的標(biāo)準(zhǔn)临庇,在頁面中元素都一個隱含的屬性叫做Block Formatting Context(塊的格式化環(huán)境)簡稱BFC反璃,該屬性可以設(shè)置打開或者關(guān)閉慌闭,默認(rèn)是關(guān)閉的
當(dāng)開啟元素的BFC以后凉馆,元素將會具有如下的特性:
1.父元素的垂直外邊距不會和子元素重疊
2.開啟BFC的元素不會被浮動元素所覆蓋
3.開啟BFC的元素可以包含浮動的子元素
如何開啟元素的BFC
1.設(shè)置元素浮動
- 使用這種方式開啟交洗,雖然可以撐開父元素铺根,但是會導(dǎo)致父元素的寬度丟失,而且使用這種方式也會導(dǎo)致下邊的元素上移孽鸡,不能解決問題
2.設(shè)置元素絕對定位
3.設(shè)置元素為inline-block
- 可以解決問題萌业,但是會導(dǎo)致寬度丟失稚虎,不推薦使用這種方式
4.將元素的overflow設(shè)置為一個非visible的值
推薦方式:將overflow設(shè)置為hidden是副作用最小的開啟BFC的方式
但是在IE6及以下的瀏覽器中并不支持BFC侧蘸,所以使用這種方式不能兼容IE6
在IE6中雖然沒有BFC裁眯,但是具有另一個隱含的屬性叫做hasLayout,該屬性的作用和BFC類似讳癌,所在IE6瀏覽器可以通過開hasLayout來解決該問題
開啟方式很多穿稳,我們直接使用一種副作用最小的:
直接將元素的zoom設(shè)置為1即可

        zoom表示放大的意思,后邊跟著一個數(shù)值晌坤,寫幾就將元素放大幾倍
        zoom:1表示不放大元素逢艘,但是通過該樣式可以開啟hasLayout
        zoom這個樣式,只在IE中支持骤菠,其他瀏覽器都不支持
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>高度塌陷</title>
    <style type="text/css">
        .box1{
            border: 10px red solid;
            /*height: 100px;*/
            /*display: inline-block;*/
            overflow: auto;
            zoom: 1;
        }
        .box2{
            width: 100px;
            height: 100px;
            background: blue;
            float: left;
        }
        .box3{
            height: 100px;
            background: yellow;
        }
    </style>
</head>
<body>
    <div class="box1">
        <div class="box2">a</div>
    </div>
    <div class="box3"></div>
</body>
</html>

(3)導(dǎo)航條;
在IE6中它改,如果為元素指定了一個寬度,則會默認(rèn)開啟hasLayou

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>導(dǎo)航條</title>
    <style type="text/css">
        *{
            margin: 0px;
            padding: 0;
        }
        .nav{
            list-style: none;
            background: red;
            width: 1000px;
            margin: 50px auto;
            overflow: auto;
        }
        .nav li{
            float: left;
            width: 25%;
        }
        .nav a{
            display: block;
            width: 100%;
            text-align: center;
            padding: 5px 0;
            text-decoration: none;
            font-weight: bold;
            background: orange;
            color: white;
        }
        .nav a:hover{
            background: red;
        }
    </style>
</head>
<body>
    <ul class="nav">
        <li><a href="#">首頁</a></li>
        <li><a href="#">新聞</a></li>
        <li><a href="#">聯(lián)系</a></li>
        <li><a href="#">關(guān)于</a></li>
    </ul>
</body>
</html>

(4)清除浮動:
由于受到box1浮動的影響娩怎,box2整體向上移動了100px
我們有時希望清除掉其他元素浮動對當(dāng)前元素產(chǎn)生的影響搔课,這時可以使用clear來完成功能
可選值:
none胰柑,默認(rèn)值截亦,不清除浮動
left,清除左側(cè)浮動元素對當(dāng)前元素的影響
right柬讨,清除右側(cè)浮動元素對當(dāng)前元素的影響
both崩瓤,清除兩側(cè)浮動元素對當(dāng)前元素的影響
清除對他影響最大的那個元素的浮動

        清除box1浮動對box2產(chǎn)生的影響
        清除浮動以后,元素會回到其他元素浮動之前的位置
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>清除浮動</title>
    <style type="text/css">
        .box1{
            width: 100px;
            height: 300px;
            background: red;
            float: left;
        }
        .box2{
            width: 200px;
            height: 200px;
            background: yellow;
            /*clear: left;*/
            float: right;
        }
        .box3{
            width: 300px;
            height: 300px;
            background: orange;
            clear: left;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
</body>
</html>

(5)解決高度塌陷:
可以通過after偽類向元素的最后添加一個空白的塊元素踩官,然后對其清除浮動却桶,
這樣做和添加一個div的原理一樣,可以達(dá)到一個相同的效果,
而且不會在頁面中添加多余的div颖系,這是我們最推薦使用的方式嗅剖,幾乎沒有副作用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>解決高度塌陷</title>
    <style type="text/css">
        .box{
            border: 1px solid red;
        }
        .clearfix:after{
            content: "";
            display: block;
            clear: both;
        }
        .clearfix{
            zoom: 1;
        }
        .box1{
            width: 100px;
            height: 100px;
            background: yellow;
            float: left;
        }
    </style>
</head>
<body>
    <div class="box clearfix">
        <div class="box1"></div>
    </div>
</body>
</html>

(6)解決高度塌陷2:
在IE6中不支持after偽類,所以在IE6中還需要使用hasLayout來處理
可以通過after偽類向元素的最后添加一個空白的塊元素,然后對其清除浮動嘁扼,
這樣做和添加一個div的原理一樣信粮,可以達(dá)到一個相同的效果,
而且不會在頁面中添加多余的div趁啸,這是我們最推薦使用的方式强缘,幾乎沒有副作用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>解決高度塌陷</title>
    <style type="text/css">
        .box1{
            border: 1px solid red;
        }
        .box2{
            width: 100px;
            height: 100px;
            background-color: blue;
            float: left;
        }
    
        .clearfix:after{
            /*添加一個內(nèi)容*/
            content: "";
            /*轉(zhuǎn)換為一個塊元素*/
            display: block;
            /*清除兩側(cè)的浮動*/
            clear: both;
        }

        .clearfix{
            zoom: 1;
        }
    </style>
</head>
<body>
    <div class="box1 clearfix">
        <div class="box2"></div>
    </div>
</body>
</html>

(7)相對定位:
定位:
- 定位指的就是將指定的元素擺放到頁面的任意位置
通過定位可以任意的擺放元素
- 通過position屬性來設(shè)置元素的定位
-可選值:
static:默認(rèn)值,元素沒有開啟定位
relative:開啟元素的相對定位
absolute:開啟元素的絕對定位
fixed:開啟元素的固定定位(也是絕對定位的一種)

        當(dāng)元素的position屬性設(shè)置為relative時不傅,則開啟了元素的相對定位
            1.當(dāng)開啟了元素的相對定位以后旅掂,而不設(shè)置偏移量時,元素不會發(fā)生任何變化
            2.相對定位是相對于元素在文檔流中原來的位置進(jìn)行定位
            3.相對定位的元素不會脫離文檔流
            4.相對定位會使元素提升一個層級
            5.相對定位不會改變元素的性質(zhì)访娶,塊還是塊商虐,內(nèi)聯(lián)還是內(nèi)聯(lián)當(dāng)開啟了元素的定位(position屬性值是一個非static的值)時,可以通過left right top bottom四個屬性來設(shè)置元素的偏移量
            left:元素相對于其定位位置的左側(cè)偏移量
            right:元素相對于其定位位置的右側(cè)偏移量
            top:元素相對于其定位位置的上邊的偏移量
            bottom:元素相對于其定位位置下邊的偏移量
        通常偏移量只需要使用兩個就可以對一個元素進(jìn)行定位崖疤,
        一般選擇水平方向的一個偏移量和垂直方向的偏移量來為一個元素進(jìn)行定位
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>相對定位</title>
    <style type="text/css">
        .box1{
            width: 100px;
            height: 100px;
            background: red;
        }
        .box2{
            width: 100px;
            height: 100px;
            background: blue;
            position: relative;
            left: 100px;
            top: 100px;
            left: 50px;
        }
        .box3{
            width: 100px;
            height: 100px;
            background: green;
        }
        .s1{
            width: 100px;
            height: 100px;
            background: orange;
            position: relative;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
    <span class="s1">as撒</span>
</body>
</html>

(8)絕對定位:
當(dāng)position屬性值設(shè)置為absolute時称龙,則開啟了元素的絕對定位
絕對定位:
1.開啟絕對定位,會使元素脫離文檔流
2.開啟絕對定位以后戳晌,如果不設(shè)置偏移量鲫尊,則元素的位置不會發(fā)生變化
3.絕對定位是相對于離他最近的、開啟了定位的祖先元素進(jìn)行定位的(一般情況沦偎,開啟了子元素的絕對定位疫向,都會同時開啟父元素的相對定位)
如果所有的祖先元素都沒有開啟定位,則會相對于瀏覽器窗口進(jìn)行定位
4.絕對定位會使元素提升一個層級
5.絕對定位會改變元素的性質(zhì):
內(nèi)聯(lián)元素變成塊元素豪嚎,
塊元素的寬度和高度默認(rèn)都被內(nèi)容撐開

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>絕對定位</title>
    <style type="text/css">
        .box1{
            width: 100px;
            height: 100px;
            background: red;
        }
        .box2{
            width: 100px;
            height: 100px;
            background: yellow;
            position: relative;
            left: 200px;
            top: 0;
        }
        .box3{
            width: 200px;
            height: 200px;
            background: orange;
        }
        .box4{
            width: 100px;
            height: 100px;
            background: green;
            position: relative;
        }
        .box5{
            width: 100px;
            height: 100px;
            background: yellow;
            position: relative;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box5">
        <div class="box4">
            <div class="box2"></div>
        </div>
    </div>
    <div class="box3"></div>
</body>
</html>
                                        開班情況
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>近期開班</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        body{
            font: 12x/1 微軟雅黑;
        }
        .box{
            /*border: 1px solid red;*/
            width: 310px;
            margin: 50px auto;
        }
        .box1{
            border-top: 2px #019e8b solid;
            height: 36px;
            background: #f5f5f5;
            line-height: 36px;
            padding: 0px 16px 0px 16px;
        }
        .box1 a{
            float: right;
            color: red;
        }
        .box1 h3{
            font: 16px/36px "微軟雅黑";
        }
        .box2{
            border: 1px solid #deddd9;
            padding: 0px 28px 0px 20px;
        }
        .box2 a{
            text-decoration: none;
            font-size: 12px;
            color: black;
        }
        .box a:hover{
            text-decoration: underline;
            color: red;
        }
        .box2 ul{
            list-style: none;
            border-bottom: 1px dashed #deddd9
        }
        .box2 h3{
            margin-top: 15px;
            margin-bottom: 15px;
        }
        .box li{
            margin-bottom: 15px;
        }
        .box2 .red-font{
            font-weight: bold;
            color: red;
        }
        .box .ringt{
            float: right;
        }
        .box2 .no-border{
            border: none;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="box1">
            <a href="#">18年面授開班計劃</a>
            <h3>近期開班</h3>
    </div>
    <div class="box2">
        <h3><a href="#">人工智能+Python-高薪就業(yè)班</a></h3>
        <ul>
            <li>
                <a class="ringt" href="#"><span class="red-font">預(yù)約報名</a></span>
                <a href="#">開班時間:<span class="red-font">2018-04-26</a></span>
            </li>
            <li>
                <a class="ringt" href="#"><span class="red-font">無座,名額飽滿</a></span>
                <a href="#">開班時間:<span class="red-font">2018-03-23</a></span>
            </li>
            <li>
                <a class="ringt" href="#">開班盛況</a>
                <a href="#">開班時間:2018-01-23</a>
            </li>
            <li>
                <a class="ringt" href="#">開班盛況</a>
                <a href="#">開班時間:2017-12-20</a>
            </li>
            <li>
                <a class="ringt" href="#">開班盛況</a>
                <a href="#">開班時間:2017-11-18</a>
            </li>
        </ul>
        <h3><a href="#">Android開發(fā)+測試-高薪就業(yè)班</a></h3>
        <ul>
            <li>
                <a class="ringt" href="#"><span class="red-font">預(yù)約報名</a></span>
                <a href="#">開班時間:<span class="red-font">2018-04-26</a></span>
            </li>
            <li>
                <a class="ringt" href="#">開班盛況</a>
                <a href="#">開班時間:2018-03-23</a>
            </li>
            <li>
                <a class="ringt" href="#">開班盛況</a>
                <a href="#">開班時間:2018-01-23</a>
            </li>
            <li>
                <a class="ringt" href="#">開班盛況</a>
                <a href="#">開班時間:2017-12-20</a>
            </li>
        </ul>
        <h3><a href="#">大數(shù)據(jù)軟件開發(fā)-青芒工作室</a></h3>
        <ul>
            <li>
                <a class="ringt" href="#"><span class="red-font">預(yù)約報名</a></span>
                <a href="#">開班時間:<span class="red-font">2018-04-26</a></span>
            </li>
            <li>
                <a class="ringt" href="#">開班盛況</a>
                <a href="#">開班時間:2018-01-23</a>
            </li>
        </ul>
    </div>
</body>
</html>
a.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搔驼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子侈询,更是在濱河造成了極大的恐慌舌涨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扔字,死亡現(xiàn)場離奇詭異囊嘉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)革为,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門扭粱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人震檩,你說我怎么就攤上這事琢蛤◎讯椋” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵博其,是天一觀的道長套才。 經(jīng)常有香客問我,道長慕淡,這世上最難降的妖魔是什么霜旧? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮儡率,結(jié)果婚禮上挂据,老公的妹妹穿的比我還像新娘。我一直安慰自己儿普,他們只是感情好崎逃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著眉孩,像睡著了一般个绍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浪汪,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天巴柿,我揣著相機(jī)與錄音,去河邊找鬼死遭。 笑死广恢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呀潭。 我是一名探鬼主播钉迷,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钠署!你這毒婦竟也來了糠聪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谐鼎,失蹤者是張志新(化名)和其女友劉穎舰蟆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狸棍,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡身害,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了隔缀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片题造。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖猾瘸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤牵触,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布淮悼,位于F島的核電站,受9級特大地震影響揽思,放射性物質(zhì)發(fā)生泄漏袜腥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一钉汗、第九天 我趴在偏房一處隱蔽的房頂上張望羹令。 院中可真熱鬧,春花似錦损痰、人聲如沸福侈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肪凛。三九已至,卻和暖如春辽社,著一層夾襖步出監(jiān)牢的瞬間伟墙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工滴铅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戳葵,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓汉匙,卻偏偏與公主長得像譬淳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盹兢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案邻梆? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,751評論 1 92
  • 1. 前言 前端圈有個“梗”:在面試時绎秒,問個css的position屬性能刷掉一半人浦妄,其中不乏工作四五年的同學(xué)。在...
    YjWorld閱讀 4,446評論 5 15
  • relative:生成相對定位的元素见芹,通過top,bottom,left,right的位置相對于其正常位置進(jìn)行定位...
    zx9426閱讀 943評論 0 2
  • 主要內(nèi)容: 浮動的介紹剂娄、清除浮動、各種定位玄呛、BFC以及外邊距合并的介紹阅懦。 浮動 什么是浮動元素 浮動元素是floa...
    苦瓜_6閱讀 553評論 0 0
  • 本來一直準(zhǔn)備記錄一些事情,但是總是給自己借口徘铝,沒時間耳胎,沒時間惯吕,不行,今天太累了……好啦怕午,現(xiàn)在終于有時間了~ 為什么...
    許瘦子來世閱讀 175評論 0 0