CSS清除浮動(dòng)的常用方法優(yōu)缺點(diǎn)分析

一、拋一塊問題磚(display: block)先看現(xiàn)象:
分析HTML代碼結(jié)構(gòu):
- <span style="font-size: 15px;"><div class="outer">
- <div class="div1">1</div>
- <div class="div2">2</div>
- <div class="div3">3</div>
- </div>
- </span>
分析CSS代碼樣式:
- .outer{border: 1px solid #ccc;background: #fc9;color: #fff; margin: 50px auto;padding: 50px;}
- .div1{width: 80px;height: 80px;background: red;float: left;}
- .div2{width: 80px;height: 80px;background: blue;float: left;}
- .div3{width: 80px;height: 80px;background: sienna;float: left;}
這里沒有給最外層的DIV.outer 設(shè)置高度,但是我們知道如果它里面的元素不浮動(dòng)的話,那么這個(gè)外層的高是會(huì)自動(dòng)被撐開的。但是當(dāng)內(nèi)層元素浮動(dòng)后,就出現(xiàn)了一下影響:
(1):背景不能顯示 (2):邊框不能撐開 (3):margin 設(shè)置值不能正確顯示
當(dāng)一個(gè)內(nèi)層元素是浮動(dòng)的時(shí)候,如果沒有關(guān)閉浮動(dòng)時(shí),其父元素也就不會(huì)再包含這個(gè)浮動(dòng)的內(nèi)層元素,因?yàn)榇藭r(shí)浮動(dòng)元素已經(jīng)脫離了文檔流。也就是為什么外層不能被撐開了!
解決辦法如下(使用其他代碼示例):
1、父級(jí)div定義偽類:after和zoom
- <style type="text/css">
- .div1{background:#000080;border:1px solid red;}
- .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px}
- .left{float:left;width:20%;height:200px;background:#DDD}
- .rightright{float:rightright;width:30%;height:80px;background:#DDD}
- /*清除浮動(dòng)代碼*/
- .clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0}
- .clearfloat{zoom:1}
- </style>
- <div class="div1 clearfloat">
- <div class="left">Left</div>
- <div class="right">Right</div>
- </div>
- <div class="div2">
- div2
- </div>
原理:IE8以上和非IE瀏覽器才支持:after,zoom(IE轉(zhuǎn)有屬性)可解決ie6,ie7浮動(dòng)問題。其中clear:both;指清除所有浮動(dòng);content: '.'; display:block;對(duì)于FF/chrome/opera/IE8不能缺少,其中content()可以取值也可以為空。visibility:hidden;的作用是允許瀏覽器渲染它,但是不顯示出來,這樣才能實(shí)現(xiàn)清楚浮動(dòng)。
優(yōu)點(diǎn):瀏覽器支持好,不容易出現(xiàn)怪問題(目前:大型網(wǎng)站都有使用,如:騰迅,網(wǎng)易,新浪等等)
缺點(diǎn):代碼多,不少初學(xué)者不理解原理,要兩句代碼結(jié)合使用,才能讓主流瀏覽器都支持
建議:推薦使用,建議定義公共類,以減少CSS代碼。(相對(duì)于空標(biāo)簽閉合浮動(dòng)的方法代碼似乎還是有些冗余,通過查詢發(fā)現(xiàn)Unicode字符里有一個(gè)“零寬度空格”,也就是U+200B,這個(gè)字符本身是不可見的,所以我們可以考慮省略掉 visibility:hidden )
評(píng)分:★★★★☆
2、結(jié)尾處加空div標(biāo)簽clear:both
- <style type="text/css">
- .div1{background:#000080;border:1px solid red}
- .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px}
- .left{float:left;width:20%;height:200px;background:#DDD}
- .rightright{float:rightright;width:30%;height:80px;background:#DDD}
- /*清除浮動(dòng)代碼*/
- .clearfloat{clear:both}
- </style>
- <div class="div1">
- <div class="left">Left</div>
- <div class="right">Right</div>
- <div class="clearfloat"></div>
- </div>
- <div class="div2">
- div2
- </div>
原理:添加一個(gè)空div,利用css提高的clear:both清除浮動(dòng),讓父級(jí)div能自動(dòng)獲取到高度
優(yōu)點(diǎn):簡(jiǎn)單,代碼少,瀏覽器支持好,不容易出現(xiàn)怪問題
缺點(diǎn):不少初學(xué)者不理解原理;如果頁面浮動(dòng)布局多,就要增加很多空div,讓人感覺很不爽
建議:不推薦使用,但此方法是以前主要使用的一種清除浮動(dòng)方法
評(píng)分:★★★☆☆
3、父級(jí)div定義overflow:hidden
- <style type="text/css">
- .div1{background:#000080;border:1px solid red;/*解決代碼*/width:98%;overflow:hidden}
- .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%}
- .left{float:left;width:20%;height:200px;background:#DDD}
- .rightright{float:rightright;width:30%;height:80px;background:#DDD}
- </style>
- <div class="div1">
- <div class="left">Left</div>
- <div class="right">Right</div>
- </div>
- <div class="div2">
- div2
- </div>
原理:必須定義width或zoom:1,同時(shí)不能定義height,使用overflow:hidden時(shí),瀏覽器會(huì)自動(dòng)檢查浮動(dòng)區(qū)域的高度
優(yōu)點(diǎn):簡(jiǎn)單,代碼少,瀏覽器支持好
缺點(diǎn):不能和position配合使用,因?yàn)槌龅某叽绲臅?huì)被隱藏,無法顯示需要溢出的元素
建議:只推薦沒有使用position或?qū)verflow:hidden理解比較深的朋友使用
評(píng)分:★★★☆☆
4、父級(jí)div定義overflow:auto
- <style type="text/css">
- .div1{background:#000080;border:1px solid red;/*解決代碼*/width:98%;overflow:auto}
- .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%}
- .left{float:left;width:20%;height:200px;background:#DDD}
- .rightright{float:rightright;width:30%;height:80px;background:#DDD}
- </style>
- <div class="div1">
- <div class="left">Left</div>
- <div class="right">Right</div>
- </div>
- <div class="div2">
- div2
- </div>
原理:必須定義width或zoom:1,同時(shí)不能定義height,使用overflow:auto時(shí),瀏覽器會(huì)自動(dòng)檢查浮動(dòng)區(qū)域的高度
優(yōu)點(diǎn):簡(jiǎn)單,代碼少,瀏覽器支持好
缺點(diǎn):內(nèi)部寬高超過父級(jí)div時(shí),會(huì)出現(xiàn)滾動(dòng)條。
建議:不推薦使用,如果你需要出現(xiàn)滾動(dòng)條或者確保你的代碼不會(huì)出現(xiàn)滾動(dòng)條就使用吧。
評(píng)分:★★☆☆☆
5、父級(jí)div定義height
- <style type="text/css">
- .div1{background:#000080;border:1px solid red;/*解決代碼*/height:200px;}
- .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px}
- .left{float:left;width:20%;height:200px;background:#DDD}
- .rightright{float:rightright;width:30%;height:80px;background:#DDD}
- </style>
- <div class="div1">
- <div class="left">Left</div>
- <div class="right">Right</div>
- </div>
- <div class="div2">
- div2
- </div>
原理:父級(jí)div手動(dòng)定義height,就解決了父級(jí)div無法自動(dòng)獲取到高度的問題
優(yōu)點(diǎn):代碼簡(jiǎn)潔
缺點(diǎn):高度被固定死了,只適合高度固定的布局,要給出精確的高度,如果高度和父級(jí)div不一樣時(shí),會(huì)產(chǎn)生問題
建議:不推薦使用,只建議高度固定的布局時(shí)使用
評(píng)分:★★☆☆☆
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
- 這篇文章主要介紹了CSS清除浮動(dòng)方法大全(小結(jié))的相關(guān)資料,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-19
- 這篇文章主要介紹了CSS3 清除浮動(dòng)的方法示例的相關(guān)資料,通過本文,讓大家可以明白清除浮動(dòng)的原理和幾種方法,最后得出一種本文認(rèn)為最好用的方法,感興趣的小伙伴們可以參考2018-06-01
CSS清除浮動(dòng)float的三種方法小結(jié)
使元素脫離文檔流,按照指定方向發(fā)生移動(dòng),遇到父級(jí)邊界或者相鄰的浮動(dòng)元素停了下來。本文給大家?guī)砹薈SS清除浮動(dòng)float的三種方法小結(jié),感興趣的朋友跟隨腳本之家小編一起2018-03-13- 這篇文章主要介紹了清除css浮動(dòng)的三種方法小結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-19
詳解css清除浮動(dòng)float的七種常用方法總結(jié)和兼容性處理
這篇文章主要介紹了詳解css清除浮動(dòng)float的七種常用方法總結(jié)和兼容性處理,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-09-11淺談css中浮動(dòng)和清除浮動(dòng)帶來的影響
這篇文章主要介紹了淺談css中浮動(dòng)和清除浮動(dòng)帶來的影響,通過代碼示例和圖片展示詳細(xì)介紹講解了浮動(dòng)的應(yīng)用和實(shí)現(xiàn)效果,需要的朋友可以參考下2017-08-14- 本文主要介紹了CSS解決浮動(dòng),清除浮動(dòng)的幾種方法:1、設(shè)置父元素高度;2、overflow;3、增加子元素(塊級(jí)),并且設(shè)置其clear屬性值為both來解決(隔墻法、內(nèi)墻法);4、使2017-03-22
淺談css清除浮動(dòng)(clearfix和clear)的用法
下面小編就為大家?guī)硪黄獪\談css清除浮動(dòng)(clearfix 和clear)的用法,小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧2023-05-12- 下面小編就為大家?guī)硪黄獪\談CSS中的clear清除浮動(dòng)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06
- 這篇文章主要介紹了CSS清除浮動(dòng)的方法詳解,值得注意的是并不是每次單純把浮動(dòng)清除掉就可以解決相關(guān)問題,文中最后談到的閉合浮動(dòng)的方案也非常值得一試,需要的朋友可以參考下2016-05-30