1 高度塌陷
在文檔流中多望,父元素的高度默認(rèn)是被子元素?fù)伍_的陪汽,也就是子元素多高昧谊,父元素就多高
但是當(dāng)為子元素設(shè)置浮動(dòng)以后,子元素會(huì)完全脫離文檔流鸽斟,此時(shí)將會(huì)導(dǎo)致子元素?zé)o法撐起父元素的高度,導(dǎo)致父元素的高度塌陷
由于父元素的高度塌陷了利诺,則父元素下的所有元素都會(huì)向上移動(dòng)富蓄,這樣將會(huì)導(dǎo)致頁(yè)面布局混亂
所以在開發(fā)中一定要避免出現(xiàn)高度塌陷的問題,
我們可以將父元素的高度寫死,以避免塌陷的問題出現(xiàn)慢逾,
但是一旦高度寫死立倍,父元素的高度將不能自動(dòng)適應(yīng)子元素的高度,所以這種方案是不推薦使用的
根據(jù)W3C的標(biāo)準(zhǔn)侣滩,在頁(yè)面中元素都一個(gè)隱含的屬性叫做Block Formatting Context(塊的格式化環(huán)境)簡(jiǎn)稱BFC口注,該屬性可以設(shè)置打開或者關(guān)閉,默認(rèn)是關(guān)閉的
當(dāng)開啟元素的BFC以后君珠,元素將會(huì)具有如下的特性:
1.父元素的垂直外邊距不會(huì)和子元素重疊
2.開啟BFC的元素不會(huì)被浮動(dòng)元素所覆蓋
3.開啟BFC的元素可以包含浮動(dòng)的子元素
如何開啟元素的BFC
1.設(shè)置元素浮動(dòng)
使用這種方式開啟寝志,雖然可以撐開父元素,但是會(huì)導(dǎo)致父元素的寬度丟失,而且使用這種方式也會(huì)導(dǎo)致下邊的元素上移材部,不能解決問題
2.設(shè)置元素絕對(duì)定位
3.設(shè)置元素為inline-block
可以解決問題毫缆,但是會(huì)導(dǎo)致寬度丟失,不推薦使用這種方式
4.將元素的overflow設(shè)置為一個(gè)非visible的值
推薦方式:將overflow設(shè)置為hidden是副作用最小的開啟BFC的方式
但是在IE6及以下的瀏覽器中并不支持BFC乐导,所以使用這種方式不能兼容IE6
在IE6中雖然沒有BFC苦丁,但是具有另一個(gè)隱含的屬性叫做hasLayout,該屬性的作用和BFC類似物臂,所在IE6瀏覽器可以通過開hasLayout來解決該問題
開啟方式很多旺拉,我們直接使用一種副作用最小的:
直接將元素的zoom設(shè)置為1即可
zoom表示放大的意思,后邊跟著一個(gè)數(shù)值棵磷,寫幾就將元素放大幾倍
zoom:1表示不放大元素蛾狗,但是通過該樣式可以開啟hasLayout
zoom這個(gè)樣式,只在IE中支持泽本,其他瀏覽器都不支持
解決高度塌陷方案二:
可以直接在高度塌陷的父元素的最后淘太,添加一個(gè)空白的div,由于這個(gè)div并沒有浮動(dòng)规丽,所以他是可以撐開父元素的高度的
然后再對(duì)其進(jìn)行清除浮動(dòng)蒲牧,這樣可以通過這個(gè)空白的div來?yè)伍_父元素的高度,基本沒有副作用
使用這種方式雖然可以解決問題赌莺,但是會(huì)在頁(yè)面中添加多余的結(jié)構(gòu)
解決高度塌陷方案三:
通過after偽類冰抢,選中box1的后邊
可以通過after偽類向元素的最后添加一個(gè)空白的塊元素,然后對(duì)其清除浮動(dòng)艘狭,
這樣做和添加一個(gè)div的原理一樣挎扰,可以達(dá)到一個(gè)相同的效果,
而且不會(huì)在頁(yè)面中添加多余的div巢音,這是我們最推薦使用的方式遵倦,幾乎沒有副作用
.clearfix:after{
/*添加一個(gè)內(nèi)容*/
content: "";
/*轉(zhuǎn)換為一個(gè)塊元素*/
display: block;
/*清除兩側(cè)的浮動(dòng)*/
clear: both;
}
/*在IE6中不支持after偽類,所以在IE6中還需要使用hasLayout來處理*/
.clearfix{
zoom: 1;
}
1.無序列表構(gòu)建菜單:
<li> <a herf="#">新聞</a></li>
<li> <a herf="#">娛樂</a></li>
2.垂直菜單轉(zhuǎn)變?yōu)樗讲藛危篺loat:left;
3官撼、在制作圓角菜單時(shí)梧躺,背景圖片貼在標(biāo)簽上; -------> background-position
4傲绣、在制作改變高度的伸縮菜單時(shí)掠哥,實(shí)現(xiàn)高度向上延伸的技巧: ----> margin-top用負(fù)值;
我們有時(shí)希望清除掉其他元素浮動(dòng)對(duì)當(dāng)前元素產(chǎn)生的影響秃诵,這時(shí)可以使用clear來完成功能
可選值:
none续搀,默認(rèn)值,不清除浮動(dòng)
left菠净,清除左側(cè)浮動(dòng)元素對(duì)當(dāng)前元素的影響
right禁舷,清除右側(cè)浮動(dòng)元素對(duì)當(dāng)前元素的影響
both彪杉,清除兩側(cè)浮動(dòng)元素對(duì)當(dāng)前元素的影響
清除對(duì)他影響最大的那個(gè)元素的浮動(dòng)
清除浮動(dòng)以后,元素會(huì)回到其他元素浮動(dòng)之前的位置
定位:
定位指的就是將指定的元素?cái)[放到頁(yè)面的任意位置
通過定位可以任意的擺放元素
通過position屬性來設(shè)置元素的定位
-可選值:
static:默認(rèn)值榛了,元素沒有開啟定位
relative:開啟元素的相對(duì)定位
absolute:開啟元素的絕對(duì)定位
fixed:開啟元素的固定定位(也是絕對(duì)定位的一種)
當(dāng)元素的position屬性設(shè)置為relative時(shí)在讶,則開啟了元素的相對(duì)定位
1.當(dāng)開啟了元素的相對(duì)定位以后,而不設(shè)置偏移量時(shí)霜大,元素不會(huì)發(fā)生任何變化
2.相對(duì)定位是相對(duì)于元素在文檔流中原來的位置進(jìn)行定位
3.相對(duì)定位的元素不會(huì)脫離文檔流
4.相對(duì)定位會(huì)使元素提升一個(gè)層級(jí)
5.相對(duì)定位不會(huì)改變?cè)氐男再|(zhì)构哺,塊還是塊,內(nèi)聯(lián)還是內(nèi)聯(lián)
當(dāng)開啟了元素的定位(position屬性值是一個(gè)非static的值)時(shí)战坤,可以通過left right top bottom四個(gè)屬性來設(shè)置元素的偏移量
left:元素相對(duì)于其定位位置的左側(cè)偏移量
right:元素相對(duì)于其定位位置的右側(cè)偏移量
top:元素相對(duì)于其定位位置的上邊的偏移量
bottom:元素相對(duì)于其定位位置下邊的偏移量
通常偏移量只需要使用兩個(gè)就可以對(duì)一個(gè)元素進(jìn)行定位曙强,
一般選擇水平方向的一個(gè)偏移量和垂直方向的偏移量來為一個(gè)元素進(jìn)行定位
6? 絕對(duì)定位
絕對(duì)定位指使元素相對(duì)于html元素或離他最近 的祖先定位元素進(jìn)行定位。
當(dāng)將position屬性設(shè)置為absolute時(shí)途茫,則開啟 了元素的絕對(duì)定位碟嘴。
當(dāng)開啟了絕對(duì)定位以后,可以使用top囊卜、right娜扇、 bottom、left四個(gè)屬性對(duì)元素進(jìn)行定位栅组。
絕對(duì)定位的特點(diǎn):
絕對(duì)定位會(huì)使元素完全脫離文本流雀瓢。
絕對(duì)定位的塊元素的寬度會(huì)被其內(nèi)容撐開。
絕對(duì)定位會(huì)使行內(nèi)元素變成塊元素玉掸。
一般使用絕對(duì)定位時(shí)會(huì)同時(shí)為其父元素指定一 個(gè)相對(duì)定位刃麸,以確保元素可以相對(duì)于父元素進(jìn) 行定位。