整理下關於文檔流,浮動,定位及造成的影響文檔流的知識點
一 文檔流的概念指什么?
文檔流,是指元素排版布局過程中,元素會自動從左到右,從上往下的流式排列。並最終窗體自上而下分成一行行,並在每行中按從左到右的順序排放元素。脫離文檔流即是元素打亂了這個排列,或是從排版中拿走。
標准流的特點:1.塊級元素從上到下,獨占一行
2.行內元素,行內塊級元素從左到右在一行中顯示。
3.占位置。
使元素脫離文檔流的方法有:浮動和定位。
二 CSS定位 position
CSS定位方式有四種:默認定位(static)、相對定位(relative)、絕對定位(absolute)和固定定位(fixed)
static: 默認值。沒有定位,元素在正常的文檔流中,top,right,bottom,left和z-index屬性無效。
relative: 生成相對定位的元素,通過top,bottom,left,right的位置相對於其正常位置進行定位。其中的相對指的是相對於元素在默認流中的位置。
注意:1.元素偏移之后,他本來默認文檔流中占據的位置仍然存在,其緊挨其后的元素的定位依據它本來的位置定位;
2.該元素偏移之后,可能存在覆蓋其他元素的情況,可以使用z-index屬性改變層疊情況。
第二個盒子元素相對於之前的位置向下平移了20px,向右平移30px。第三個盒子的位置相對於第二個盒子原本的位置排列。
z-index需要配合position屬性才能有效,值大者處於頂層,默認值為0。
absolute: 生成絕對定位的元素,相對於static定位的第一個父元素進行定位。
注意: 1.絕對定位的元素已經脫離文檔流,普通流中其他元素的布局就像絕對元素不存在一樣;
2.絕對定位的元素的位置是相對於最近的已定位的祖先元素,如果元素沒有已定位的祖先元素,它的位置就相對於body;
3.絕對定位的框可以覆蓋頁面的其他元素。
這種情況是離box2最近的父元素已定位的情況,如果離box2最近的父元素沒有定位的話,示例如下:
fixed:本質上是一種絕對定位,不為元素預留空間。通過制定相對於屏幕視窗的位置來制定元素的空間,且元素的位置在屏幕滾動時不會發生變化。應用於很多網站頂端的固定導航、下方的廣告,或者右邊的回到頂部div。
三、absolute、relative、fixed偏移的參考點分別是什么?
absolute偏移的參考點是:相對於最近的已定位的父元素,如果沒有,則相對於body元素;
relative偏移的參考點是:相對於元素在普通流中的原來位置;
fixed偏移的參考點是:相對於瀏覽器窗口。
四、z-index 有什么作用? 如何使用?
z-index屬性用於設置節點的堆疊順序,擁有更高堆疊順序的節點將顯示在堆疊順序較低的節點前面。
使用方法:示例
1.z-index僅對定位元素有效(position:relative||absolute||fixed);
2.z-index只可比較同級元素。
五、position:relative和負margin都可以使元素位置發生偏移?二者有什么區別?
position:relative和負margin都可以使元素位置發生偏移,(都不會脫離文檔流)二者的區別表現在:
1.負margin會使元素在文檔流中的位置發生偏移,它會放棄偏移之前占據的空間,緊挨其后的元素會填充這部分空間;
2.相對定位后元素位置發生偏移,它仍會堅守原來占據的空間,不會讓文檔流的其他元素流入。
、
六、浮動元素有什么特征?對其他浮動元素、普通元素、文字分別有什么影響?
浮動元素的特征有:
1.塊元素優先在一排顯示;
2.內聯元素支持寬高;
3.無論是塊元素還是內聯元素,沒有寬度時默認內容撐開寬度;
4.脫離文檔流;
5.提升層級半級(z-index)
造成的影響:
對其他浮動元素的影響:后浮動的元素永不會超過先浮動元素的頂端。
浮動的元素只會覆蓋后面的塊級元素,不影響前邊的塊級元素。
對普通元素的影響:浮動元素會脫離正常的文檔流,使得緊挨它的元素位置發生偏移,影響布局。
對文字的影響:浮動元素向下延伸時,不會影響正常文本的顯示,文本會相對於浮動元素進行偏移。但部分文本背景會被浮動元素遮住。
七、清除浮動的方法
如果一個父盒子中有一個子盒子,並且父盒子沒有設置高,子盒子在父盒子中進行了浮動,那么將來父盒子的高度為0.由於將來父盒子的高度為0,下面的元素會自動補位,所以這個時候要進行浮動的清除。clear:both
1.使用額外標簽法:
在浮動的盒子之下再放一個標簽,在這個標簽中使用clear:both,來清除浮動對頁面的影響。
.clearfix {clear:both;}
<div class="clearfix"></div>
a.內部標簽:會將這個浮動盒子的父盒子高度重新撐開
b.外部標簽:會將這個浮動盒子的影響清除,但是不會撐開盒子。
注意:一般情況下不會使用這一種方式來清除浮動。因為這個清除浮動的方式會增加頁面的標簽。
2.使用overflow屬性來清除浮動:
先找到浮動盒子的父元素,再在父元素中添加一個屬性,就是清除這個父元素中的子元素浮動對頁面的影響。
overflow:hidden;
3.使用偽元素(給父元素)來清除浮動:
.clearfix::after {
content: "";//添加內容為空
height: 0;//內容高度為0
line-height: 0;//內容文本的高度為0
display: block;//將文本設置為塊級元素
clear: both;//清除浮動
visibility: hidden;//將元素隱藏
}
.clearfix {
zoom: 1;/*為了兼容ie6*/
}
參考作者(betterwlf) http://www.cnblogs.com/wlf1112/p/6245502.html
參考作者 (Thinkguo) http://www.cnblogs.com/thinkguo/p/6223530.html#top