1.浮動(dòng)元素有什么特征?對父容器、其他浮動(dòng)元素、普通元素、文字分別有什么影響?

2.清除浮動(dòng)指什么? 如何清除浮動(dòng)? 兩種以上方法
清除浮動(dòng)指的是清除浮動(dòng)給父元素和鄰近元素的副作用
方法:
- 給父元素手動(dòng)添加高度
- 通過clear屬性來清除浮動(dòng)
- 給父元素添加overflow(scroll,auto,hidden)樣式(overflow 除了visible 以外的值)
- 給父元素添加浮動(dòng)樣式
- 給父元素添加display (table-cell,table-caption,inline-block, flex, inline-flex)樣式
- 給父元素添加position值為(absolute,fixed)樣式
3.有幾種定位方式,分別是如何實(shí)現(xiàn)定位的,參考點(diǎn)是什么,使用場景是什么?
共有5種,如下圖所示




4.z-index 有什么作用? 如何使用?
z-index 屬性設(shè)置元素的堆疊順序。元素中擁有更高堆疊順序的元素總是會(huì)處于堆疊順序較低的元素的前面。(這里要注意,要以相同的祖先元素定位時(shí),z-index越大,其位置越在上方)
并不是z-index越大,其就在最上面,如下圖所示


結(jié)果是:

原因:由于div1,div2,div3,div4都是position:absolute;故div1和div4是以body為祖先元素定位,div4的z-index大于div1,而div2和div3是以div1為祖先元素進(jìn)行定位,所有不論div2和div3的z-index為多大,都在div4的下面
5.position:relative和負(fù)margin都可以使元素位置發(fā)生偏移?二者有什么區(qū)別
position:relative;是使用相對定位來使元素發(fā)生偏移,用right,left,top,bottom來進(jìn)行定位,相對于元素的常規(guī)流位置。并且相對定位的元素不會(huì)脫離常規(guī)流(即是原來的位置空下來,也不會(huì)被其他元素占據(jù))
負(fù) margin 使元素發(fā)生偏移時(shí),元素原來占據(jù)的空間會(huì)隨著負(fù) margin 數(shù)值的增大而減少,其他元素的位置也會(huì)發(fā)生相應(yīng)的變化
6.BFC 是什么?如何生成 BFC?BFC 有什么作用?舉例說明
浮動(dòng)元素和絕對定位元素,非塊級盒子的塊級容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不為“visiable”的塊級盒子,都會(huì)為他們的內(nèi)容創(chuàng)建新的塊級格式化上下文
- float 除了none以外的值
- overflow 除了visible 以外的值(hidden,auto,scroll )
- display (table-cell,table-caption,inline-block, flex, inline-flex)
- position值為(absolute,fixed)
BFC特性:
- 內(nèi)部的Box會(huì)在垂直方向,從頂部開始一個(gè)接一個(gè)地放置。
- Box垂直方向的距離由margin決定。屬于同一個(gè)BFC的兩個(gè)相鄰Box的margin會(huì)發(fā)生疊加
- 每個(gè)元素的margin box的左邊, 與包含塊border box的左邊相接觸(對于從左往右的格式化,否則相反)。即使存在浮動(dòng)也是如此
- BFC的區(qū)域不會(huì)與float box疊加。
- BFC就是頁面上的一個(gè)隔離的獨(dú)立容器,容器里面的子元素不會(huì)影響到外面的元素,反之亦然。
- 計(jì)算BFC的高度時(shí),浮動(dòng)元素也參與計(jì)算。
BFC可以用來解決以下問題:
- margin疊加問題
- 用于布局
- 清除浮動(dòng)
7.在什么場景下會(huì)出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個(gè)父子外邊距合并的范例
當(dāng)元素屬于同一個(gè)BFC時(shí),會(huì)出現(xiàn)外邊距合并
外邊距合并規(guī)則:
- 當(dāng)兩個(gè)margin為正數(shù)時(shí),取大的
- 當(dāng)兩個(gè)margin為負(fù)數(shù)時(shí),取絕對值大的那個(gè),然后從0開始負(fù)向位移
- 當(dāng)有正有負(fù)時(shí),先取出負(fù) margin 中絕對值中最大的,然后,和正 margin 值中最大的 margin 相加。
- 所有毗鄰的margin要一起參與運(yùn)算,不能分步進(jìn)行。
不讓相鄰元素外邊距合并方法:
1.只設(shè)置一個(gè)方向上的margin,例如都只設(shè)置margin-top
2.將其中一個(gè)元素設(shè)置為BFC來取消合并
不讓父元素外邊距合并方法:
1.可以將父元素設(shè)置 BFC
2.可以在子元素的 margin 和 父元素的 margin 之間增加 padding 或 border 來隔開它們
父子外邊距合并范例