浮動元素有什么特征?對父容器、其他浮動元素、普通元素、文字分別有什么影響?
浮動元素的主要特征是脫離普通流,根據設定的值向左或向右偏移,直到其邊緣遇到父元素的邊界或者另一個浮動元素的邊框。
對父容器:如果父容器內的元素均設置了浮動,那么他們脫離普通流無法撐起父容器的高度,導致父元素的塌陷。
對其它浮動元素:同一父容器內的浮動元素按照設定的方向并排排列,當父元素的寬度不夠時,后面的元素會向下移動,直到有足夠的空間;如果浮動元素的高度不同,那么有可能擋住移動的路徑。
對普通元素:無法辨別普通元素,有可能導致覆蓋其它普通元素,占據其位置
對文字:文字能夠識別浮動元素,會圍繞浮動元素
清除浮動指什么? 如何清除浮動?
1.通過在浮動元素末尾添加一個空的帶有clear:both屬性的div標簽
2.使用:after 偽元素 消除浮動
3.父元素也設置浮動 或者display-blocks(或者其它生成BFC的方式)
有幾種定位方式,分別是如何實現定位的,參考點是什么,使用場景是什么?
inherit:繼承父元素定位屬性。
static:默認值,沒有定位,元素出現在正常的文檔流中。參考點是文檔流中的位置。
relative:相對定位。相對于元素本身正常位置進行定位,通過top、bottom、left、right屬性來設置偏移量。使用場景:為絕對定位設定參照物或對元素自身位置進行局部調整。
absolute:絕對定位。相對于static定位意外的第一個祖先元素進行定位,若都沒有發現則以html標簽為參考進行定位。使用場景:當想讓元素參照特定參照物進行定位時使用。
fixed:固定定位。生成絕對定位元素,相對于viewport進行定位。
sticky:對象在常態時遵循普通流。它就像是relative和fixed的合體,當在屏幕中時按常規流排版,當卷動到屏幕外時則表現如fixed。兼容性不佳,不常用。
z-index 有什么作用? 如何使用?
當頁面上出現多個由絕對定位(position:absolute)或固定定位(position:fixed)所產生的浮動層時,必然就會產生一個問題,就是當這些層的位置產生重合時,誰在誰的上面呢?或者說誰看得見、誰看不見呢?這時候就可以通過設置z-index的值來解決,這個值較大的就在上面,較小的在下面。
z-index的意思就是在z軸的順序,如果說網頁是由x軸和y軸所決定的一個平面,那么z軸就是垂直于屏幕的一條虛擬坐標軸,浮動層就在這個坐標軸上,那么它們的順序號就決定了誰上誰下了。
z-index僅對定位元素有效。
position:relative和負margin都可以使元素位置發生偏移?二者有什么區別
position:relative和負margin都可以使元素位置發生偏移,二者的區別表現在:
margin會使元素在文檔流中的位置發生偏移,它會放棄偏移之前占據的空間,緊挨其后的元素會填充這部分空間;
相對定位后元素位置發生偏移,它仍會堅守原來占據的空間,不會讓文檔流的其他元素流入。
BFC 是什么?如何生成 BFC?BFC 有什么作用?舉例說明
BFC是頁面上的一個隔離的獨立容器,容器里面的子元素不會影響到外面的元素。
如何形成BFC :
浮動(none除外),絕對定位, display:inline-block|table-cells|table-captions, overflow的值不為visible時可以創建一個新的格式化上下文。根元素如html元素也可以觸發BFC。
作用:
(1) 解決margin重疊問題,同一個BFC中,相鄰元素之間的邊距會合并,如果把這兩個元素分別放在兩個BFC中,他們的邊距就不會合并。一般應用于嵌套。
(2)清除浮動。BFC不會重疊浮動元素。
舉例:當父容器的子元素都采用浮動時父容器會塌陷,此時可以加入新的屬性使容器形成BFC從而計算浮動元素的高避免塌陷
在什么場景下會出現外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?
場景:
同一個BFC內,且同處于普通流中的垂直相鄰元素外邊距合并。
父子元素的外邊距合并。如果塊級父元素中,不存在border-top、padding-top、inline content、 清除浮動 這四條屬性,會發生上外邊距合并;若塊級父元素的 margin-bottom 與它的最后一個子元素的margin-bottom 之間沒有父元素的 border、padding、inline content、height、min-height、 max-height 分隔時,就會發生 下外邊距合并 現象。
空元素的外邊距合并。如果存在一個空的塊級元素,其 border、padding、inline content、height、min-height 都不存在。那么此時它的上下邊距中間將沒有任何阻隔,此時它的上下外邊距將會合并。
合并規則:
兩個margin都是正值的時候,取兩者的最大值;
當 margin 都是負值的時候,取的是其中絕對值較大的,然后,從0位置,負向位移;
當有正有負的時候,相加的和。
所有毗鄰的margin要一起參與運算,不能分步進行。
不讓相鄰元素外邊距合并的方法:
被非空內容、padding、border 或 clear 分隔開。
不在一個普通流中或一個BFC中。
margin在垂直方向上不毗鄰。
父子元素外邊距合并
如圖 對box2設置margin-top后box2的位置并未相對于box1下移;而是發生外邊距合并導致整體下移,box3由于margin-top小于box2的margin-top,所以50px未生效,與box2合并為50px。