positio1n:relative和負(fù)margin都可以使元素位置發(fā)生偏移?二者有什么區(qū)別
position:relative相對(duì)自己原本的位置偏移,不影響其它普通流中元素的位置。
margin:除了讓元素自身發(fā)生偏移還影響其它普通流中的元素。
BFC 是什么?如何生成 BFC?BFC 有什么作用?
BFC:塊格式化上下文(block formatting context) 是Web頁(yè)面的可視CSS渲染的一部分。它是塊盒子的布局發(fā)生及浮動(dòng)體彼此交互的區(qū)域。首先BFC是一個(gè)名詞,是一個(gè)獨(dú)立的布局環(huán)境,我們可以理解為一個(gè)箱子(實(shí)際上是看不見摸不著的),箱子里面物品的擺放是不受外界的影響的。
形成條件:
根元素或其它包含它的元素
浮動(dòng) (元素的 float 不是 none)
絕對(duì)定位的元素 (元素具有 position 為 absolute 或 fixed)
內(nèi)聯(lián)塊 inline-blocks (元素具有 display: inline-block)
表格單元格 (元素具有 display: table-cell,HTML表格單元格默認(rèn)屬性)
表格標(biāo)題 (元素具有 display: table-caption, HTML表格標(biāo)題默認(rèn)屬性)
塊元素具有overflow ,且值不是 visible
display: flow-root
注意:浮動(dòng)不會(huì)影響其它塊格式化上下文中元素的布局,并且清除浮動(dòng)只能清除同一塊格式化上下文中在它前面的元素的浮動(dòng)。
應(yīng)用:
自適應(yīng)的兩欄布局。
清除元素內(nèi)部浮動(dòng)。
嵌套元素margin邊距合并問(wèn)題的解決。
在什么場(chǎng)景下會(huì)出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?
外邊距合并出現(xiàn)的三個(gè)場(chǎng)景。
同一個(gè)BFC,且同處于普通流中的垂直相鄰元素外邊距合并。
父子元素的外邊距合并。
空元素的外邊距合并。
合并規(guī)則:
1兩個(gè)margin都是正值的時(shí)候,取兩者的最大值;
2當(dāng) margin 都是負(fù)值的時(shí)候,取的是其中絕對(duì)值較大的,然后,從0位置,負(fù)向位移;
3當(dāng)有正有負(fù)的時(shí)候,先取出負(fù) margin 中絕對(duì)值中最大的,然后,和正 margin 值中最大的 margin 相加。
4所有毗鄰的margin要一起參與運(yùn)算,不能分步進(jìn)行。
不讓相鄰元素外邊距合并的方法:
1被非空內(nèi)容、padding、border 或 clear 分隔開。
2不在一個(gè)普通流中或一個(gè)BFC中。
3margin在垂直方向上不毗鄰。
總結(jié):
1這些margin都處于普通流中,并在同一個(gè)BFC中;
2這些margin沒有被非空內(nèi)容、padding、border 或 clear 分隔開;
3這些margin在垂直方向上是毗鄰的,包括以下幾種情況:
- 一個(gè)box的top margin與第一個(gè)子box的top margin
- 一個(gè)box的bottom margin與最后一個(gè)子box的bottom margin,但須在該box的height 為auto的情況下
- 一個(gè)box的bottom margin與緊接著的下一個(gè)box的top margin
- 一個(gè)box的top margin與其自身的bottom margin,但須滿足沒創(chuàng)建BFC、零min-height、零或者“auto”的height、沒有普通流的子元素。
4例外的情況
根元素的外邊距不會(huì)參與折疊
不設(shè)置任何屬性的空span和空div不影響任何布局,可以無(wú)視之。