1,一行文字左浮動(dòng),一行文字不浮動(dòng),二者不會(huì)對(duì)齊,為什么?
當(dāng)給文字的容器設(shè)置overflow:hidden;二者就對(duì)齊了。為什么?
2,代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.p1{
float: left;
background: green;
}
/*#outer{
overflow:hidden;
}*/
</style>
</head>
<body>
<div id="outer">
<p class="p1">我們都有一個(gè)margint-top和margin-bottom20px</p>
<p class="p2">我們都有一個(gè)margint-top和margin-bottom20px</p>
</div>
</body>
</html>
3.截圖
產(chǎn)生這一現(xiàn)象的原因是浮動(dòng)元素的外邊距不會(huì)發(fā)生折疊,而普通情況下外邊距會(huì)發(fā)生折疊。
具體到這個(gè)例子里面,p1
是浮動(dòng)元素,因此不會(huì)發(fā)生折疊,它會(huì)相對(duì)父元素的頂部計(jì)算外邊距;而p2
的外邊距會(huì)發(fā)生折疊,所以它的外邊距是相對(duì)body
來(lái)計(jì)算的。
而給父元素加上overflow:hidden
樣式之后,父元素就會(huì)形成自己的BFC
,因此p2
的外邊距不再與body
發(fā)生折疊,這時(shí)候p1
、p2
的外邊距都將相對(duì)父元素來(lái)計(jì)算,因此自然就對(duì)齊了。此時(shí)的情況如下圖所示:
而除了overflow:hidden
之外,還有其他的方法也能讓p1
、p2
對(duì)齊:
p1
添加margin:0
,讓p1
沒(méi)有外邊距,自然就不會(huì)偏離了outer
添加border
,原理同overflow:hidden
首先,盡量不要在css中使用id選擇器,id還是留給JS用吧。
但是為了最小改動(dòng),這里就不改過(guò)來(lái)了,以題主的布局為基礎(chǔ),那么我們開(kāi)始吧~
瀏覽器會(huì)給塊級(jí)元素一些margin和padding,在沒(méi)有重置margin和padding的情況下:
<style>
.p1 {
/* float: left; */
background: green;
}
.p2 {
background: blue;
}
#outer {
/* overflow: hidden; */
background: red;
}
</style>
由于盒模型垂直外邊距折疊,上圖首先是p1和outer父子間的折疊,然后p1和p2兄弟間的折疊的結(jié)果。outer的高度為兩個(gè)子加一個(gè)外邊距的和。
折疊規(guī)則:
相鄰的外邊距都是正數(shù)時(shí),折疊結(jié)果是兩者間較大的值。
相鄰的外邊距都是負(fù)數(shù)時(shí),折疊結(jié)果是兩者絕對(duì)值的較大值。
兩個(gè)外邊距一正一負(fù)時(shí),折疊結(jié)果是兩者的和。
當(dāng)p1浮動(dòng)時(shí),代碼如下:
<style>
.p1 {
float: left;
background: green;
}
.p2 {
background: blue;
}
#outer {
/* overflow: hidden; */
background: red;
}
</style>
看上圖,浮動(dòng)元素不參與父級(jí)的高度計(jì)算,但瀏覽器給的默認(rèn)邊距依然在,此時(shí)outer的高是p2給的,所以outer的背景色都被遮住了。因此看起來(lái)是錯(cuò)位的。
當(dāng)我們加上overflow: hidden;又是什么情況呢,如下:
<style>
.p1 {
float: left;
background: green;
}
.p2 {
background: blue;
}
#outer {
overflow: hidden;
background: red;
}
</style>
看上圖,outer的背景又出來(lái)了,為什么呢?因?yàn)?strong>計(jì)算BFC區(qū)域高度時(shí)浮動(dòng)元素參與計(jì)算,也就是說(shuō)只要給父級(jí)創(chuàng)建BFC就可以了,當(dāng)overflow值不為visible時(shí)就能為父級(jí)創(chuàng)建BFC,這就是清除浮動(dòng)的原理。p1依然是浮動(dòng)的,所以跟p2重疊了,即遮住了p2的一部分。至于文本,float會(huì)使盒子脫離文檔流,但不會(huì)脫離文本流,這是它的特點(diǎn),所以以前float就是用來(lái)做圖文混排的,用來(lái)布局只是功能的延伸使用。當(dāng)然,上圖可見(jiàn)此時(shí)瀏覽器給的padding和margin依然生效。
那么除了overflow: hidden;還有其他方式創(chuàng)建BFC嗎?當(dāng)然有:
float值不為none。
position值為fixed或absolute。
display值跟table相關(guān),例如display: table-cell;
當(dāng)然不同的方式創(chuàng)建BFC達(dá)到的效果會(huì)不完全一樣,例如:
<style>
.p1 {
float: left;
background: green;
}
.p2 {
float: left;
background: blue;
}
#outer {
background: red;
}
</style>
再例如:
<style>
.p1 {
/* 浮動(dòng)脫離文檔流 */
float: left;
background: green;
}
.p2 {
background: blue;
/*
絕對(duì)定位脫離文檔流
p2寫在后面,把p1遮住了
但也算是p1和p2“對(duì)齊”啊
*/
position: absolute;
}
#outer {
background: red;
position: relative;
}
</style>
再再例如:
<style>
.p1 {
float: left;
background: green;
display: table-cell;
vertical-align: middle;
}
.p2 {
background: blue;
display: table-cell;
vertical-align: middle;
}
#outer {
background: red;
display: table;
}
</style>
上圖顏色錯(cuò)覺(jué)看起好像不對(duì)齊,去掉背景色就看到其實(shí)是對(duì)齊的。
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥(niǎo)中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。