float 和positioning:absolute三列布局區別??
下面是自己的一點總結和問題,求大神解答!
關于三列布局總結和疑問:
總結:1,如果left不設置float或absolute,且main不設置margin,那么main會出現在left的下面,緊貼著left,且鋪滿整個瀏覽器
(原因:首先,如果不設置float 那么left存在于瀏覽器中,且div屬于塊狀元素,所以獨占一行,所以main要出現他下面,另起一行,沒設置寬,所以繼承父類,也就是瀏覽器)
?
2,如果left設置了float,那么main 則緊挨著 ,需要注意的是:假設left寬度是200px,main的margin設置距離左側是0,且main寬度被設置成400,那么最終結果是main會被覆蓋掉一半,但是main里面的文字 會出現在未被覆蓋的另一半中,且顯示不完的文字會直接超出main的框,顯示到外面。
【使用float脫離文檔流時,其他盒子會無視這個元素,但其他盒子內的文本依然會為這個元素讓出位置,環繞在周圍】
?
問1:此時若 right 也設置 了float,那么right會緊接著main下面進行排列
(原因:main是普通的div,并沒有設置其他,所以他是塊狀元素,獨占一行,所以right要另起一行,緊跟著進行布局)
?
問2:但是經查資料研究,如果這樣寫?? 【有浮動的div ?要放在最前面】
? <div>left</div>
??? <div>right</div>
??? <div class=”main”>文本</div>
若按上面那樣寫,right又會出現在main同一行的右側,能實現三列的效果!
?
?
1.?????? 若 把left 設置成absolute(絕對定位), 其他設置與上面2相同,則此時出現的結果是, main會被left覆蓋一半,并且 main里的文字也會被遮蓋一半。
【對于使用positioning:absolute脫離文檔流的元素,其他盒子與其他盒子內的文本都會無視它】
如果此時把right 設置為absolute(絕對定位), 那么他會與main出現在同一行,緊靠在右側,能實現三列效果。
【那么問題來了:二者同樣脫離文檔流,而且mian并沒有改變什么,為什么float不行,而absolute絕對定位可以??】???? 二者的區別到底在哪里??
2016-07-27
額 首先 抱歉下 之前說的有問題,其次 我也是個菜鳥 有問題大家一起交流?
????????先說下 ?我們可以認為正常文本流是在z-index:0層,按塊級元素和內聯元素的默認占位布局
????????其次 設置了absolute的元素 完全從正常文檔流刪除 所以他在z-index:0層 的占位消失,不影響正常文本流,如果定位之后 它的下面有正常文本流的元素 會覆蓋掉(其實如果有float的元素也會覆蓋掉,所以可以認為absolute的z-index是最高層的 PS:相對于正常和float),其top left right ?bottom是相對于已經定位(比如position:relative)的父容器,或父容器沒有 則以body為定位
????????設置了float的元素,也脫離了正常文本流,如果一個元素設置了float 那么后面的正常文檔流的元素會當它不存在,自動填充,那么float就會覆蓋掉正常的文本流,但是文字不會覆蓋 而是會環繞?
????????因此 可以這樣理解 ?正常文本流的在 z-index:0 ?float的在z-index:0.5 (有一半卡住了 ?文字環繞) 而absolute的在z-index:1層
??????
2016-07-27
元素浮動以后 脫離文檔流 ?浮動到最左上,但是absolute 雖然也是脫離了文檔流,但是和float 不一樣,他的元素在原文檔流里面還占據著原來的空間 ,并沒有消失,只不過是元素相對于已經設定position的父容器或祖先容器相對偏移,然后覆蓋其他的正常文檔流元素而且。