Web前端知識點-認識浮動及清除浮動帶來影響的簡單方法

      網(wǎng)友投稿 1025 2022-05-30

      本文從一個簡單的HTML頁面入手,對為什么要有浮動,如何設(shè)置浮動,元素設(shè)置浮動后自身的變化及對整個布局產(chǎn)生的影響,以及如何消除浮動帶來的影響都做了詳細的過程解析,理解浮動對頁面布局來說很重要,希望本文能有所幫助!

      一、認識浮動

      普通標準文檔流中,瀏覽器從HTML文件的最上面開始,從上至下,從左至右,逐個顯示每個元素,每個元素在HTML文檔中的位置就限制了他在頁面中的位置。

      先看一個簡單的HTML

      以上HTML由三大部分組成:div#header、div#main、div#footer,其中div#main又由兩小部分組成:div#content和div#sidebar

      瀏覽器從上到下依次渲染,如下

      上面就是標準的文檔流,各個元素在頁面中的位置和順序由元素在HTML中的位置和順序決定

      如果想形成豐富的頁面效果,讓元素能夠按照我們指定的位置擺放,就需要用到浮動屬性float了,讓元素"浮"起來,"動"起來。

      Web前端知識點-認識浮動及清除浮動帶來影響的簡單方法

      比如這里想讓div#main中的子元素div#sidebar以側(cè)邊欄的形式顯示在div#main的右側(cè),并和div#content左右分離,以兩欄顯示。

      接下來,我們一步一步解析如何實現(xiàn):

      浮動就是指將元素脫離文檔流向左或向右布局,使用float屬性來設(shè)置,有三個取值:none(不浮動)、left(向左浮動)、right(向右浮動)

      這里對div#sidebar設(shè)置float屬性,取值right,加載如下

      前后對比,有兩個明顯的不同

      一是div#sidebar原來是占滿整個瀏覽器寬度的,浮動之后,寬度自動變成內(nèi)容的寬度;

      二是元素設(shè)置浮動之后,會脫離標準流,浮在頁面上,后面的元素div#footer上移,父元素div#main高度收縮,如果父元素中只有div#sidebar這一個元素,設(shè)置浮動之后父元素塌陷情況會更嚴重

      這里需要注意的一點是,由于div#sidebar元素在div#container的后面,雖然設(shè)置了浮動,瀏覽器也是從上到下依次解析,先解析div#content,后解析div#sidebar,將它從標準流刪除,浮動到div#content下方的最右側(cè)。所以這里要實現(xiàn)兩邊欄的效果,需要先對調(diào)div#sidebar和div#content在HTML中的位置,此時再加載

      我們看到div#sidebar如預(yù)期的那樣出現(xiàn)在了div#content的右邊,但是由于脫離標準流浮動在頁面上,div#main和div#footer右邊的部分區(qū)域被浮在上面的元素蓋住了,雖然div#container中的內(nèi)容碰到浮動元素的邊緣就會換行,自動繞流,但是背景色和背景圖片還是會被蓋住,整個頁面結(jié)構(gòu)不夠清晰。

      我們期望的效果是:

      1、視覺上div#sidebar好像包含在父盒子中,整個父盒子高度能自適應(yīng)。div#sidebar和div#footer上下分離,不能發(fā)生重合

      2、視覺上div#content和div#sidebar在div#main中左右分離

      為了達到以上效果,就需要清除浮動帶來的影響

      二、清除浮動帶來的影響

      浮動引起的主要問題之一是元素設(shè)置浮動之后,脫離標準流,不再占用原來的空間,導致父元素塌陷。所以可以直接為父元素設(shè)置一個高度,視覺上看起來包裹所有的子元素,包括已脫離標準流的浮動元素。

      方法一:給父元素設(shè)置一個高度

      分析:在知道子元素高度的前提下,設(shè)置高度能直接的達到目的。但如果父元素中的子元素個數(shù)不固定,高度不固定呢?如果指定一個高度,父元素的高度就不能隨著子元素個數(shù)和高度的變化而變化了,限制了整個自適應(yīng)布局。

      要想清除浮動帶來的影響,又不破壞父元素的高度自適應(yīng),就需要借助一個新屬性clear。

      方法二:使用clear屬性

      clear屬性用于設(shè)置元素哪一側(cè)不允許有浮動元素,有四種取值

      具體實現(xiàn):

      在父元素div#main的所有子元素的后面添加一個專門用來清除浮動的子元素div.clear,并設(shè)置div.clear的clear屬性為right(因為此處只需要清除右側(cè)的浮動)

      因為div.clear的作用只是用來清除浮動,所以內(nèi)容為""空,另外本案例為了觀察更明確,給所有div設(shè)置了邊框,這里設(shè)置div.clear的border-width為0px,覆蓋原來的border屬性。

      代碼做修改后,看一下效果

      現(xiàn)在div#footer和div#sidebar上下成功分離,div#sidebar和div#content好像也撐起了盒子(本質(zhì)上div#sidebar還是浮動在頁面上的),但是div#content和div#sidebar還是沒有做到左右視覺上的分離,因為div#content為了實現(xiàn)自適應(yīng)布局,此處沒有指定寬度,默認占據(jù)整個父元素的寬度,而div#sidebar是脫離標準流的,自然會重合。

      這里可通過設(shè)置div#content的margin-right屬性來巧妙的實現(xiàn)左右視覺上分離。

      具體實現(xiàn):

      先為div#sidebar指定一個width,這里設(shè)置為120px,再設(shè)置div#content的margin-right為150px,目的就是為了通過div#content的右外邊距控制和div#sidebar之間的距離,外邊距只要大于浮動元素的寬度即可。效果如下

      為了驗證實現(xiàn)自適應(yīng)布局的效果,我們手動改變?yōu)g覽器的寬度,如下

      以上通過浮動屬性,clear屬性及margin屬性的綜合運用,把一個自上而下的標準流的布局變成了頁面布局更清晰的分欄布局,同時也是自適應(yīng)的頁面布局,隨著瀏覽器的伸縮不會破壞整個布局。

      修改后的完整代碼

      當然清除浮動還有別的方式,這里暫時先做以上討論。

      注:以上布局主要是為了說明浮動的"浮"和"動"特性,其他方面先不做考慮。如有疏漏之處,歡迎指正,我們一起成長快樂。

      軟件開發(fā)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:如何發(fā)現(xiàn)Google云平臺漏洞
      下一篇:Qt正則表達式類QRegExp(附檢驗小程序)
      相關(guān)文章
      亚洲国产a级视频| 亚洲色偷偷综合亚洲av78| 亚洲精品永久在线观看| 亚洲国产精品综合久久网各| 亚洲视频在线视频| 在线亚洲人成电影网站色www| 亚洲av区一区二区三| 亚洲国产精品精华液| 亚洲无人区码一二三码区别图片 | 亚洲a级在线观看| 亚洲日本国产精华液| 亚洲午夜精品国产电影在线观看| 亚洲欧洲日本精品| 亚洲人成网站18禁止久久影院| 亚洲国产av高清无码| 亚洲一区动漫卡通在线播放| 亚洲人成图片网站| 亚洲日韩精品国产一区二区三区| 亚洲综合无码无在线观看| 亚洲综合欧美色五月俺也去| 亚洲免费网站观看视频| 亚洲国产成人久久精品软件 | 亚洲国产精品无码专区在线观看| 亚洲国产精品无码专区在线观看| 亚洲AV综合色一区二区三区| 久久亚洲国产成人亚| 亚洲AV人人澡人人爽人人夜夜| 久久久久亚洲AV无码网站| 亚洲自偷自拍另类图片二区| 亚洲一区二区三区免费在线观看| 国产成人亚洲综合一区| 亚洲av中文无码字幕色不卡| 成人亚洲综合天堂| 久久精品夜色噜噜亚洲A∨| 国产亚洲精品一品区99热| 亚洲免费在线视频| 亚洲免费在线视频播放| 亚洲日韩久久综合中文字幕| 国产精品观看在线亚洲人成网| 亚洲AⅤ优女AV综合久久久| 亚洲精品视频在线观看你懂的|