html+css 佈局篇

芬芸發表於2018-09-21

float

做了float後有一些不好的影響。

1、背景不能顯示 由於浮動產生,如果對父級設定了(CSS background背景)CSS背景顏色或CSS背景圖片,而父級不能被撐開,所以導致CSS背景不能顯示。
2、邊框不能撐開 如上圖中,如果父級設定了CSS邊框屬性(css border),由於子級裡使用了float屬性,產生浮動,父級不能被撐開,導致邊框不能隨內容而被撐開。
3、margin padding設定值不能正確顯示 由於浮動導致父級子級之間設定了css padding、css margin屬性的值不能正確表達。特別是上下邊的padding和margin不能正確顯示。
故需清除浮動

1 、父div設定合適高度

2 、在要做float的div後,可以在html加一個空的div,或者在css在其父元素用after中 content:“;,

而後寫

clear:both;(有一些瀏覽器不寫這句就不作用

display:block;

(最好再寫上width:0;height:0;visibility:hidden;保證這個元素看不見,不影響佈局)

(建議是用after)

3、父級div定義overflow:hidden(或overflow:auto)

(注意:給導航欄單獨每一項加下劃線時不要用3,因為會把下劃線隱藏)

(還有一些奇奇怪怪不好用的方法,比如把父元素也設定浮動,就不提了)

 

div

預設一個div佔一行,那麼如何讓多個個div同一行?

1、用float

如果分兩列,可以先把兩列的div分別包含在兩個div裡面

如果分三列,要都float:left,或者兩個float:left一個float:right;

缺點:如果右邊div沒有設定寬度,右邊div的寬度會根據div裡的內容自動調整,不易控制。

2、只有左側div設定為float:left,右側div設定overflow:auto;,右側div將會佔據整個右側剩餘寬度。

缺點:如果有多個div 比如三個及以上了?

3、使用display的inline-block屬性(不用inline,inline高度不可控)

(會上下錯位,原因:

①同一行的行內元素對齊方式預設是底部對齊,即vertical-align:baseline

②對於內容為空的inline-block元素而言,該元素的基線就是它的margin底邊緣,否則就是元素的內部最後一行內聯元素的基線

解決方案:

改變vertical-align屬性(右側div設定vertical-align: top;)

4、①對於兩個div並排,左邊為絕對寬度,右邊為相對寬度的,需要用到這種佈局的情況比較多見,如左邊為導航,右邊為內容的頁面

      ②左邊固定寬度,使用position:absolute

      ③右邊margin-left為左邊一塊的固定寬度

 

(此處暫時不考慮彈性盒子,我先練習不用彈性盒子的)

相關文章