div+css佈局,是前端開發人員的核心技能,在工做中佔很大的比重。良好的前端佈局是進行javascript書寫和互的基礎,足見佈局的重要性,今天咱們就講講css佈局的基石-float。能夠說,沒有浮動,就談不上佈局了。javascript
一、float的產生css
互聯網產生從一開始到日漸壯大,期間借鑑了大量印刷排版的理念和技術,好比一開始互聯網的發明,就是將文檔電子化互相連接。html
然後的table佈局的發明,也是印刷專家完成的,直到css出現,依然能夠看到印刷的影子,固然這也無可厚非,好比float的出現就是爲了應對圖文並茂的排版出現的。前端
下面傳統的印刷排版常見的佈局-文字環繞,就是float的常見應用場景之一。java
咱們看看如何實現,git
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>JS暗黑編年史</title> <style> img{ float:left; } </style> </head> <body> <p> <img src="https://jetorz.github.io/assets/Brendan-Eich.jpg" alt="" width="200"> 在一個一個炎熱的下午,你們注意,必定要是炎熱的下午,爲何要是炎熱的下午呢,由於天氣一熱,人就容易煩躁,人一煩躁就不想工做,不工做就想看片兒(注意看片兒不是看電影),可是你知道的越看片兒越煩躁,正在這個時候老闆娘進來來了,對js的做者布萊登·艾克說,小艾啊你看咱們用貓上網的時候用戶名密碼填錯告終果等一兩分鐘返回結果的時候才知道是錯了,你看你能不能搞一個程序讓我在請求以前就知道我寫錯了,其實小艾內心不想搞,可是你們都懂的,老闆好拒絕,老闆娘的需求是很差拒絕的,因此布萊登艾克心想趕忙隨便糊弄一下算了,片兒還沒看完呢,因此他就用了8天半(官方說)10天,其實另外的一天半被他用來看片兒了。你們懂的,你看片兒的時候有心思寫代碼嗎?因此js的bug如山同樣多,這個咱們之後說。 </p> </body> </html>
2.float的經典場景github
除了上面的經典用法以外,float還有幾個更復雜也更通用的場景,首先是整站佈局。編程
代碼以下,佈局
<!DOCTYPE html> <html> <head> <style> #header { background-color: black; color: white; text-align: center; padding: 5px; } #nav { line-height: 30px; background-color: #eeeeee; height: 300px; width: 100px; float: left; padding: 5px; } #section { width: 350px; float: left; padding: 10px; } #footer { background-color: black; color: white; clear: both; text-align: center; padding: 5px; } </style> </head> <body> <div id="header"> <h1>我是頭部</h1> </div> <div id="nav"> html教程<br> css教程<br> js教程<br> </div> <div id="section"> <h2>js暗黑編年史</h2> <p> 在一個一個炎熱的下午,你們注意,必定要是炎熱的下午,爲何要是炎熱的下午呢,由於天氣一熱,人就容易煩躁,人一煩躁就不想工做,不工做就想看片兒(注意看片兒不是看電影),可是你知道的越看片兒越煩躁,正在這個時候老闆娘進來來了,對js的做者布萊登·艾克說,小艾啊你看咱們用貓上網的時候用戶名密碼填錯告終果等一兩分鐘返回結果的時候才知道是錯了,你看你能不能搞一個程序. </p> </div> <div id="footer"> 我是footer </div> </body> </html>
還有相似淘寶的商品佈局也很廣泛,學習
實現代碼以下,
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> #div2{ background: red; margin-right: 10px; height: 300px; } #div3{ padding: 5px; } #div2,#div3{ float: left; width:300px; } </style> </head> <body> <div id="div1"> <div id="div2"> </div> <div id="div3"> <h3>我是標題</h3> <p>我是一段描述的文字我是一段描述的文字我是一段描述的文字我是一段描述的文字</p> </div> </div> </body> </html>
3.float的常見問題
1.寬度不夠,會擠下來
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> #wrap{ width:1000px; margin: 0 auto; } div{ border:5px solid #000; } #left{ width:200px; background:red; height: 300px; float: left; } #right{ width:800px; background:green; height: 300px; float: left; } </style> </head> <body> <div id="wrap"> <div id="left">左側</div> <div id="right">右側</div> </div> </body> </html>
解決,
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> #wrap{ width:1000px; margin: 0 auto; border:5px solid yellow; } div{ border:5px solid #000; } #left{ width:200px; background:red; height: 300px; float: left; box-sizing: border-box; } #right{ width:800px; background:green; height: 300px; float: left; box-sizing: border-box; } </style> </head> <body> <div id="wrap"> <div id="left">左側</div> <div id="right">右側</div> </div> </body> </html>
如圖所示,你們會發現其實外層div的高度沒有撐開,這裏我不想解釋緣由,扯什麼BFC啦,文檔流啦,爲何?
編程就像學習騎自行車,你看過別人怎麼騎車,也知道踏板是用來蹬的,車座是用來座的,車把是用來掌握方向就夠了,你不必從一開始研究:
山地車30速對應的是:這個山地車的變速套件是由3片式牙盤和10片式飛輪組成,能夠變換30種傳動比,也就是齒比。詳細的解釋是:前面牙盤有三個盤,後面飛輪有10個,3x10就是30速,若是後面有9個飛輪就是27速,速別就是前面的盤的數量乘後面輪的數量,通常狀況下前面都是三個盤,主要差距在於後面的小飛輪,常見的速別有1八、2一、2四、2七、30。
畢竟你不可能一開始學騎車就想着未來成爲秋名山車神。
即便你學會這些,對於你學習騎車沒有什麼幫助,就像你即便知道了高度沒有撐起來是由於沒有觸發BFC,就算是你知道了文檔流和常規流,知道了float的默認值是none,對於你能流暢的佈局有多少幫助呢?
我不是否定這些知識的價值,是要讓你懂得輕重緩急。畢竟若是你連最基礎的float佈局都寫得磕磕絆絆,你研究那些有什麼意義呢?先把典型的佈局記住,學會,用熟,而後再聊其餘的。繼續第二個問題,
2.高度不夠,直接一句話,記住就好
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> #wrap{ width:1000px; margin: 0 auto; border:5px solid yellow; overflow: hidden; } div{ border:5px solid #000; } #left{ width:200px; background:red; height: 300px; float: left; box-sizing: border-box; } #right{ width:800px; background:green; height: 300px; float: left; box-sizing: border-box; } </style> </head> <body> <div id="wrap"> <div id="left">左側</div> <div id="right">右側</div> </div> </body> </html>
其實就一句話,
overflow: hidden;
先記住就好,等你長大了就明白了。
說第三個問題,
明顯footer位置不對,這是一個特性,float後面的元素會自動跟隨,並儘可能靠上靠左。問題是明顯footer是不肯意跟着右側元素混的,他應該在下面。咋弄?清除浮動。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> #wrap { width: 1000px; margin: 0 auto; border: 5px solid yellow; overflow: hidden; } div { border: 5px solid #000; } .main { border: 0; } #left { width: 200px; background: red; height: 400px; float: left; box-sizing: border-box; } #right { width: 800px; background: green; height: 200px; float: left; box-sizing: border-box; } .clearFix:after { content: ''; display: block; clear: both; } .clearFix { zoom: 1; } </style> </head> <body> <div id="wrap"> <div class="main clearFix"> <div id="left">左側</div> <div id="right">右側</div> </div> <div id="footer">我是帥氣的footer</div> </div> </body> </html>
注意,這裏在left和right外面包了一層div,而後添加了class
.clearFix:after { content: ''; display: block; clear: both; } .clearFix { zoom: 1; }
這裏你不會都不要緊,先記住會用就好。記住代碼就像騎自行車,騎得多了天然就知道怎麼騎了,熟練了之後再去騎山地車,公路車,入門就會很快。
目前你已經掌握了float的基礎入門,走起吧!