一、前言
在之前的文章中,我曾經寫到過css兩欄布局(今天,我利用相同的思路來實現三欄布局。所謂的三欄布局,一般指的是「左右側定寬,中間部分自適應」,在這篇文章中,我們將採用5種方式來實現三欄布局。
在這裡我們假設已經對所有元素設定了
margin:0;
padding:0;
二、布局方式
1.position布局
html**如下:
css**如下:
.left, .right
/* 左側定位 */
.left
/* 中間自適應區 */
.center
/* 右側定位 */
.right
**邏輯方面還是比較清晰的,通過定位,將幾個塊放在一堆。不過其冗餘度太高,而且維護成本和維護難度也相當之大。違背了dry原則(don't repeat yourself)。
2.float + calc 布局
html部分與position中一致。
css部分:
/* 三者共有樣式 */
.left, .center, .right
/* 左側樣式 */
.left
/* 中間樣式,關鍵在 calc */
.center
/* 右側樣式 */
.right
該方式的邏輯還是挺簡單的,三個塊依次浮動,從而形成一行。關鍵部分在於 calc 屬性,其可以動態計算值,在該例中,其用來計算 center 部分的寬度,其為 父元素的寬度(100%)減去左右側實際寬度之和(200 + 200 ),利用該屬性,實現了自適應寬度布局。關於該屬性的具體介紹,參看 。
3.flex布局
html部分:
css部分:
/* 外層容器設定為 flex 布局 */
.container
/* 左右側定寬處理 */
.left, .right
/* 中間部分自適應布局 */
.center
flex布局一如既往的靈活與簡單。還是那句話,如果不用苦逼的相容ie9及以下瀏覽器,愉快的使用flex布局吧。
4.grid布局
html**部分與flex布局一致
css部分:
.container
.left, .right
.center
5.table布局
html與flex布局、grid布局一致
css部分:
.container
/* 將其子項設定為 table-cell 布局 */
.left, .center, .right
.left, .right
.center
table布局很形象,就把其理解為乙個**。不過在實際運用中其實用得比較少。
三、總結
通過上文的分析,咱們可以有五種布局方式,以實現三欄布局。
要檢視完整**,請移步我的github:
CSS布局 三欄布局
題外話 抓狂系列片之叄個我。三欄布局要求說明 兩邊固定寬度,中間自適應,頂部對齊 html文件結構有三種 內層div順序不同 左右中 左中右。實現效果 方法如下 1.左右中 對左右子元素使用了浮動屬性 float 從而脫離了文件流,如果按照正常左中右的順序,會導致右子元素出現在中間子元素的右下方。所...
CSS布局 三欄布局
css布局技術可謂是前端技術中最基礎的技術,就是因為基礎,所以我認為要更加熟練,深入的去掌握,去梳理。採用浮動實現的三欄布局有以下特點及注意事項 注意dom結構的排列順序。因為左右兩側的dom都是浮動布局,而中間的dom則是普通的文件流,所以為了規避瀏覽器正常的頁面渲染,即先解析左側dom 浮動 再...
CSS三欄布局
有這樣一種情況,在兩列布局的基礎上,將列的數量改為三欄。其中左右兩列的寬度固定,中間部分的寬度隨著瀏覽器寬度變化而變化。首先,我們還是介紹一下傳統的方法,就是利用了margin取負值的技巧。如下 三列布局 middle left right css 如下 margin left 1 margin l...