實際的頁面開發中經常會遇到左邊定寬,右邊自適應的需求,特別是一些管理系統,比如左邊顯示信息或操作列表,右邊顯示詳情,如下所示:、
針對這種布局,首先抽象出頁面結構如下:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <style> 7 * { 8 padding: 0; 9 margin: 0; 10 color: #fff; 11 font-size: 30px; 12 font-weight: bold; 13 text-align: center; 14 box-sizing: border-box; 15 } 16 aside { 17 width: 200px; 18 height: 200px; 19 padding-top: 75px; 20 background: #5A6A94; 21 } 22 section { 23 height: 200px; 24 padding-top: 75px; 25 background: #BE4F4F; 26 } 27 </style> 28 </head> 29 <body> 30 <!-- 左邊定寬 --> 31 <aside class="left">Left</aside> 32 <!-- 右邊自適應 --> 33 <section class="right">Right</section> 34 </body> 35 </html>
瀏覽器中效果:
需要實現的效果如下:
那么針對這種常見的布局,方式是非常多的,下面給出幾種比較簡單和常見的方法。
方法一:左邊設置左浮動,右邊寬度設置100%
【分析】這樣的方式簡單得讓我懷疑,但是效果上確實是實現了。
方法二: 父容器設置 display:flex;Right部分設置 flex:1
【分析】display:flex; 設置為彈性盒子,其子元素可以通過設置 flex 的數值來控制所占空間的比例。
方法三:設置浮動 + 在 css 中使用 calc() 函數
【分析】
1. 浮動。(注意:為了不影響其他元素,別忘了在父級上清除浮動)
2. calc() = calc(四則運算) 用於在 css 中動態計算長度值,需要注意的是,運算符前后都需要保留一個空格,例如:width: calc(100% - 10px)
;
3. vw: viewport width。1vw = viewport 寬度的 1%, 100vw = viewport width,
同樣的還有 vh: viewport height。1vw = viewport 高度的 1%, 100vh = viewport height。
瀏覽器支持情況: 主流瀏覽器、IE10+
vw 和 vh 會隨着viewport 的變化而變化,因此十分適合於自適應場景來使用。
方法四:使用負margin
首先修改頁面結構,為自適應部分添加容器 .container, 同時改變左右部分的位置,如下:
設置樣式:
【分析】
1. 首先設置左邊部分和右邊部分左浮動,並為自適應部分(Right)設置寬度100%。此時的效果是這樣的:
2. 設置左邊部分左外邊距為負100%,此時效果如下:
但是右邊部分的寬度仍然為100%,部分內容被 Left 所覆蓋。
3. 為 Right 部分添加左邊距(即 Left 部分的寬度)
此時可以看到,Right 部分的內容居中顯示了。