關(guān)于css中元素浮動的解釋

轉(zhuǎn)載地址:http://www.divcss5.com/rumen/r424.shtml

要注意以下幾點(diǎn):
1、 浮動元素會被自動設(shè)置成塊級元素,相當(dāng)于給元素設(shè)置了display:block(塊級元素能設(shè)置寬和高,而行內(nèi)元素則不可以)。
2、 浮動元素后邊的非浮動元素顯示問題。
3、 多個(gè)浮動方向一致的元素使用流式排列,此時(shí)要注意浮動元素的高度。
4、子元素全為浮動元素的元素高度自適應(yīng)問題。

以下詳細(xì)分析四個(gè)問題。

一、浮動元素自動變塊級元素

首先說說塊級元素和行內(nèi)元素區(qū)別,簡單的來說,塊級元素獨(dú)占一行,可以設(shè)置寬高以及邊距,行內(nèi)元素不會獨(dú)占一行,設(shè)置寬高行距等不會起效。常見的塊級元素有:h1~h6、p、div、ul、table,常見的行內(nèi)元素有:span、a、input、select等。

代碼如下:

<div style="height: 200px; width: 200px;"> 
<span style="float: left; width: 150px; height: 150px; margin: 5px; padding: 5px; 
border: solid 1px red; background-color: Olive;">浮動元素span</span> 
</div> 
<div style="height: 200px; width: 200px;"> 
<span style="width: 150px; height: 150px; margin: 5px; padding: 5px; border: solid 1px red; 
background-color: Olive;">浮動元素span</span> 
</div> 

效果如下:


二、浮動元素后的非浮動元素問題

浮動元素后邊的元素若是非浮動行內(nèi)元素且因?yàn)槎ㄎ划a(chǎn)生重疊時(shí),行內(nèi)元素邊框、背景和內(nèi)容都在該浮動元素“之上”顯示,若是非浮動塊級元素跟在浮動元素后邊且在定位后產(chǎn)生重疊時(shí),該塊級元素邊框和背景在該浮動元素“之下”顯示,只有內(nèi)容在浮動元素不在浮動元素“之下”顯示。
示例代碼如下:

<div style="width: 600px; height: 500px; border: solid 1px blue; background-color: yellow;"> 
<div style="float: left; width: 250px; height: 250px; border: solid 1px Aqua; background-color: gray; 
margin: 10px 0 0 10px;"> 
浮動DIV</div> 
<div style="background-color: red; border: solid 1px green; width: 300px; height: 150px;"> 
跟在浮動元素后邊的DIV</div> 
<span style="background-color: red; border: solid 1px green; margin: 0 0 0 -50px;"> 
跟在浮動元素后邊的span</span> 
</div> 

效果圖如下:


從圖中可以看出來,跟在浮動div后邊的div背景以及邊框被壓在了底下,內(nèi)容卻沒有,span整體都在浮動div之上顯示。

不過在ie6這個(gè)效果卻很怪異,如圖:

浮動元素沒有壓在非浮動div之上,反而把span壓住了。

三、多個(gè)并列同方向浮動元素高度不一致問題

多個(gè)同方向浮動元素若是高度不一致的話,很可能會得到意外的效果,跟你想要的布局差別很大。多個(gè)同方向浮動元素一般是按照流式布局,一行滿了則自動換行,也就是類似于以下效果:


但各個(gè)浮動元素高度不一致的話效果很可能出現(xiàn)下邊的情況:


很意外吧,主要排列到元素7的時(shí)候,一行已經(jīng)顯示不下了,所以要換行,但此處換行并不是從行頭開始,而是從元素5那開始,因?yàn)樵?比元素6高很多導(dǎo)致。

四、子元素全為浮動元素高度自適應(yīng)問題

由于元素浮動后脫離了文檔流,所以父元素是無法根據(jù)元素來自適應(yīng)的。解決此問題最常用的辦法由兩種,第一種就是在所有浮動元素后加:
<div style="clear:both;height:0px;"></div>
第二種辦法,使用萬能clear:

代碼如下:

.clearfix:after 
{ 
visibility: hidden; 
display: block; 
font-size: 0; 
content: "."; 
clear: both; 
height: 0; 
} 
* html .clearfix 
{ 
zoom: 1; 
} 
*:first-child + html .clearfix 
{ 
zoom: 1; 
} 

然后在你需要自適應(yīng)的元素上加上class=” clearfix”即可。詳細(xì)請參考:

你真的理解clear:both嗎 在開發(fā)中,從美工MM給你Html代碼中,肯定能經(jīng)??础?lt;div style="clear:both;"></div>”這樣的代碼,但是你真的能明白它是做什么用的嗎?
代碼如下:

<div style="border:2px solid red;"> 
<div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div> 
<div style="clear:both;"></div> 
</div> 

你可以將此部分代碼放到一個(gè)HTML頁面看看效果,然后在去掉”<div style="clear:both;"></div>”看一下效果,就知道這句話的作用了。
如圖:
(1)有clear:both的:

(2)無clear:both的

這樣看,應(yīng)該就一目了然了:原來后邊的Clear:both;其實(shí)就是利用清除浮動來把外層的div撐開,所以有時(shí)候,我們在將內(nèi)部div都設(shè)置成浮動之后,就會發(fā)現(xiàn),外層div的背景沒有顯示,原因就是外層的div沒有撐開,太小,所以能看到的背景僅限于一條線。

但這種辦法就是最好了的嗎?
我這么說,當(dāng)然答案就不是了??梢圆捎猛ㄟ^Hack實(shí)現(xiàn):
代碼如下:

<style> 
.clearfix:after{ 
visibility: hidden; 
display: block; 
font-size: 0; 
content: "."; 
clear: both; 
height: 0; 
} 
* html .clearfix{zoom: 1;} 
*:first-child + html .clearfix{zoom: 1;} 
</style> 
<div class="clearfix" style="border: 2px solid red;"> 
<div style="float: left; width: 80px; height: 80px; border: 1px solid blue;"> 
TEST DIV</div> 
</div> 

看完解決辦法,咱們來看里邊的原理:
(1)、首先是利用:after這個(gè)偽類來兼容FF、Chrome等支持標(biāo)準(zhǔn)的瀏覽器。
:after偽類IE不支持,它用來和content屬性一起使用設(shè)置在對象后的內(nèi)容,例如:
a:after{content:"(link)";}
這個(gè)CSS將會讓a標(biāo)簽內(nèi)的文本后邊加上link文本文字。

(2)、利用“* html”這個(gè)只有IE6認(rèn)識的選擇符,設(shè)置縮放屬性“zoom: 1;”實(shí)現(xiàn)兼容IE6。
(3)、利用“*:first-child + html”這個(gè)只有IE7認(rèn)識的選擇符,設(shè)置縮放屬性“zoom: 1;”實(shí)現(xiàn)兼容IE7。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,154評論 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,817評論 1 45
  • 浮動 CSS允許浮動任何元素。 浮動元素 首先,會以某種方式將浮動元素從文檔的正常流中刪除,不過它還是會影響布局。...
    exialym閱讀 1,311評論 0 6
  • CSS 是什么 css(Cascading Style Sheets),層疊樣式表,選擇器{屬性:值;屬性:值}h...
    崔敏嫣閱讀 1,577評論 0 5
  • 中條山老人畫家宏志的早年作品
    7637124d4239閱讀 109評論 0 2

友情鏈接更多精彩內(nèi)容