浮動再探討

看下面的HTML代碼:

<ul style="width:440px;">
    <li style="border:4px solid #ff6633; background:#ffffc0;">![](../image/border.png)</li>
</ul>

結(jié)果如下圖(截自Firefox瀏覽器,無其他樣式干擾昏鹃,下同):

li元素為什么會有高度?如果您認真讀過前半部分內(nèi)容關(guān)于line boxes模型與高度的關(guān)系的內(nèi)容,應(yīng)該知道及舍,由于圖片沒有應(yīng)用float屬性贤徒,其本身有一個正常的inline box芹壕,這個inline box高度等于圖片的height,在這行元素中接奈,圖片這個inline box的高度最高踢涌,于是傳遞給了line box,line box是個真正意義上的高度序宦,直接作用于containing box(就是這里的li元素睁壁,使li元素有一個高度)。理解了這個您就會明白為什么要是這里的圖片添加了float屬性互捌,li高度會塌陷了:浮動破壞了inline box潘明。
這里的li沒有添加float屬性,可以見到li寬度100%自適應(yīng)于父ul標簽秕噪。一切顯得那么的和諧钳降!

單個左浮動的li元素

看下面的HTML代碼:

<ul style="width:440px;">
    <li style="border:4px solid #ff6633; background:#ffffc0; float:left;">![](../image/border.png)</li>
</ul>

結(jié)果如下圖:

相比上面而言,這里多了個float:left;腌巾,浮動的“包裹性”一目了然:水平方向上遂填,li寬
度緊貼內(nèi)部元素。我在前文曾說過這么句結(jié)論性的話:“撇開浮動的‘破壞性’壤躲,浮動就是個帶有方位的display:inline-block屬性”城菊。這不難理解,您可以講這里的float:left;改成display:inline-block;最后實現(xiàn)的效果基本上就是一樣的碉克。display:inline-block將對象呈遞為內(nèi)聯(lián)對象凌唬,但是對象的內(nèi)容作為塊對象呈遞。所謂對象呈遞為內(nèi)斂對象就是元素呈遞為inline box漏麦,所以浮動“包裹性”所產(chǎn)生的結(jié)果就是使得元素轉(zhuǎn)為了line box模型中的inline box元素客税。
浮動的“包裹性”讓元素變成類似于inline box的元素,而浮動的“破壞性”正是破壞inline box元素的撕贞,這其中豈不有矛盾更耻。其實非也,對于block水平的這類塊狀元素需要先讓其變成類似效果的內(nèi)聯(lián)元素捏膨,然后再破壞之秧均,實乃先誘拐再奸殺的生動實例笆澄辍!
又是我反復(fù)提到的目胡,浮動破壞了inline box锯七,也就是破壞了高度,所以這里含有浮動屬性的li元素實際上是沒有高度的誉己。所以呢眉尸,要是后面還有同樣的li標簽的話,就會水平對齊排列的巨双。如下:

相比上面而言噪猾,這里多了個float:left;,浮動的“包裹性”一目了然:水平方向上筑累,li寬
度緊貼內(nèi)部元素袱蜡。我在前文曾說過這么句結(jié)論性的話:“撇開浮動的‘破壞性’,浮動就是個帶有方位的display:inline-block屬性”疼阔。這不難理解戒劫,您可以講這里的float:left;改成display:inline-block;最后實現(xiàn)的效果基本上就是一樣的半夷。display:inline-block將對象呈遞為內(nèi)聯(lián)對象婆廊,但是對象的內(nèi)容作為塊對象呈遞。所謂對象呈遞為內(nèi)斂對象就是元素呈遞為inline box巫橄,所以浮動“包裹性”所產(chǎn)生的結(jié)果就是使得元素轉(zhuǎn)為了line box模型中的inline box元素淘邻。
浮動的“包裹性”讓元素變成類似于inline box的元素,而浮動的“破壞性”正是破壞inline box元素的湘换,這其中豈不有矛盾宾舅。其實非也,對于block水平的這類塊狀元素需要先讓其變成類似效果的內(nèi)聯(lián)元素彩倚,然后再破壞之筹我,實乃先誘拐再奸殺的生動實例啊帆离!
又是我反復(fù)提到的蔬蕊,浮動破壞了inline box,也就是破壞了高度哥谷,所以這里含有浮動屬性的li元素實際上是沒有高度的岸夯。所以呢,要是后面還有同樣的li標簽的話们妥,就會水平對齊排列的猜扮。如下:

多個左浮動的li元素

看下面的HTML代碼:

<ul style="width:440px;">
    <li style="border:4px solid #ff6633; background:#ffffc0; float:left;">![](../image/border.png)</li>
    <li style="border:4px solid #ff6633; background:#ffffc0; float:left;">![](../image/border.png)</li>
</ul>

結(jié)果如下圖:

image.png

解決高度塌陷的問題 – 清除浮動

CSS中有個討論較多的話題就是如何清除浮動,清除浮動其實就一個目的监婶,就是解決高度塌陷的問題旅赢。為什么會高度塌陷齿桃?什么時候會高度塌陷?塌陷原因是:元素含有浮動屬性 – 破壞inline box – 破壞line box高度 – 沒有高度 – 塌陷煮盼。什么時候會塌陷:當標簽里面的元素只要樣子沒有實際高度時會塌陷源譬。所以呢,并不是只要有浮動元素就會坍塌孕似,就要清除的踩娘,CSS水平高低衡量的標準之一就是改用什么樣式就用什么樣式,不多用也不少用喉祭。

下面就來講講如何清除浮動养渴,zxx:寫到這兒,一下子輕松了泛烙。
IE下清除浮動準則很簡單理卑,使元素haslayout就可以了。如寬度值蔽氨,高度值藐唠,絕對定位,zoom鹉究,浮動本身都可以讓元素haslayout宇立。顯然,首選zoom:1;不會干擾任何樣式自赔。非IE瀏覽器常用的是overflow屬性妈嘹,overflow:hidden;或是overflow:scroll都可以,不過由于后者經(jīng)常一不小心出現(xiàn)滾動條绍妨,所以前者用的更多些润脸。由于現(xiàn)代瀏覽器都支持after偽類偽元素,所以常常也會用after寫入一個clear屬性的元素清除浮動他去。當然毙驯,最投機取巧的方法就是直接一個<div style="clear:both;"></div>放到當作最后一個子標簽放到父標簽?zāi)莾骸O旅嫘〗Y(jié)這幾個方法灾测。

  1. 投機取巧法

就是直接一個<div style="clear:both;"></div>放到當作最后一個子標簽放到父標簽?zāi)莾罕郏朔椒▽以嚥凰嫒菪詮娦惺褂梅奖阍始幔浅鯇W時使用的上佳之選。但是我從來不用蛾号,因為我看到的是個巨大的浪費稠项,浪費了一個標簽,而且只能使用一次鲜结,我個人是無法容忍的展运,所以這個方法不推薦活逆。而且有時候一不留神中間多了個空格會產(chǎn)生一段空白高度的。

  1. overflow + zoom方法

.fix{overflow:hidden; zoom:1;}
此方法優(yōu)點在于代碼簡潔拗胜,涵蓋所有瀏覽器蔗候,可謂不錯的選擇啊。不過也是有問題的埂软,就是這個overflow:hidden;是個小炸蛋锈遥,要是里面的元素要是想來個margin負值定位或是負的絕對定位,豈不是直接被裁掉了勘畔,所以此方法是有不小的局限性的所灸。我一般不用這個方法,只是有時候順便去除浮動時用用炫七。

  1. after + zoom方法

先來簡單講講after爬立,所謂after,就是指標簽的最后一個子元素的后面万哪。于是呢侠驯,我們可以用CSS代碼生成一個具有clear屬性的元素,其中的關(guān)鍵樣式就是content了奕巍∫鞑撸或許您從網(wǎng)上看到的content里面的內(nèi)容是”.”一個點,我了很多次伍绳,貌似隨便寫什么東西都沒有問題踊挠,比如content:'clear both';沒問題乍桂,或是content:'張鑫旭'也是ok的冲杀。于是有:
.fix{zoom:1;}
.fix:after{display:block; content:'clear'; clear:both; line-height:0; visibility:hidden;}
這里的line-height:0寫成height:0也是可以的。此方法可以說是綜合起來最好的方法了睹酌,我都是用這個樣式清除浮動的权谁,不會影響任何其他樣式,通用性強憋沿,覆蓋面廣旺芽,我很推薦哦。

九辐啄、float與JavaScript
JavaScript可以改變CSS的屬性采章,其他些屬性還好,但是這個float值得一說壶辜,為何呢悯舟,因為float貌似是JavaScript中的一個關(guān)鍵字,不能使用obj.style.float="left";這樣的句子砸民。得使用其他寫法抵怎。

IE瀏覽器:
obj.style.styleFloat = "left";
其他瀏覽器:

obj.style.cssFloat = "left";
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奋救,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子反惕,更是在濱河造成了極大的恐慌尝艘,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姿染,死亡現(xiàn)場離奇詭異背亥,居然都是意外死亡,警方通過查閱死者的電腦和手機悬赏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門隘梨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舷嗡,你說我怎么就攤上這事轴猎。” “怎么了进萄?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵捻脖,是天一觀的道長。 經(jīng)常有香客問我中鼠,道長可婶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任援雇,我火速辦了婚禮矛渴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惫搏。我一直安慰自己具温,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布筐赔。 她就那樣靜靜地躺著铣猩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茴丰。 梳的紋絲不亂的頭發(fā)上达皿,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音贿肩,去河邊找鬼峦椰。 笑死,一個胖子當著我的面吹牛汰规,可吹牛的內(nèi)容都是我干的汤功。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼控轿,長吁一口氣:“原來是場噩夢啊……” “哼冤竹!你這毒婦竟也來了拂封?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤鹦蠕,失蹤者是張志新(化名)和其女友劉穎冒签,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钟病,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡萧恕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了肠阱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片票唆。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屹徘,靈堂內(nèi)的尸體忽然破棺而出走趋,到底是詐尸還是另有隱情,我是刑警寧澤噪伊,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布簿煌,位于F島的核電站,受9級特大地震影響鉴吹,放射性物質(zhì)發(fā)生泄漏姨伟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一豆励、第九天 我趴在偏房一處隱蔽的房頂上張望夺荒。 院中可真熱鬧,春花似錦良蒸、人聲如沸技扼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淮摔。三九已至,卻和暖如春始赎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仔燕。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工造垛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晰搀。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓五辽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親外恕。 傳聞我的和親對象是個殘疾皇子杆逗,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案乡翅? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,728評論 1 92
  • 以下文章是我在網(wǎng)上收集的內(nèi)容,為了記錄自己的學習以及為了以后不到處找而記錄下來罪郊,如果對你有用蠕蚜,請感謝寫這些文章的前...
    DCbryant閱讀 919評論 0 2
  • CSS里浮動float是個概念比較曖昧的屬性,擼主最早對浮動float的認識是基于布局的悔橄,認為float元素就是用...
    張歆琳閱讀 39,946評論 23 153
  • <a name='html'>HTML</a> Doctype作用靶累?標準模式與兼容模式各有什么區(qū)別? (1)、<...
    clark124閱讀 3,456評論 1 19
  • 2014-06-23 錦春記 如若有一個完美的夏日午后你還需要什么癣疟?溫暖的陽光,美食美酒,咖啡或茶挣柬?我想,就這樣坐...
    V_CHEUNG閱讀 652評論 0 0