常見布局-左側固定,右側自適應兩欄布局

"左邊固定,右邊自適應的兩欄布局",其中有老生常談的float方法,BFC方法,也有CSS3的flex布局與grid布局。并非所有的布局都會在開發(fā)中使用,但是其中也會涉及一些知識點。

常用的寬度自適應的方法通常是利用了block水平的元素寬度能隨父容器調節(jié)的流動特性。另外一種思路是利用CSS中的calc()方法來動態(tài)設定寬度。還有一種思路是,利用CSS3中的新型布局flex layoutgrid layout。

效果圖:

HTML布局:

<div class="outer">
    <div class="sidebar">固定寬度區(qū)(sideBar)</div>
     <div class="content">自適應區(qū)(content)</div>
</div>
<div class="footer">footer</div>

常見的方法:

1、將左側div浮動,右側div設置margin-left

/*方法1*/ 
.outer{overflow: hidden; border: 1px solid red;} 
.sidebar{float: left;width:200px;height: 150px; background: #BCE8F1;} 
.content{margin-left:200px;height:100px;background: #F0AD4E;}

2、固定區(qū)采用絕對定位,自適應區(qū)設置margin

/*方法2*/ 
.outer2{position: relative;height:150px; border: 1px solid red;} 
.sidebar2{position: absolute;left: 0;top:0;width:200px;height:100%;background: #BCE8F1;} 
.content2{margin-left:200px;height:100px;background: #F0AD4E;} 

缺點:

  • 使用了絕對定位,若是用在某個div中,需要更改父容器的position。
  • 沒有清除浮動的方法,若左側盒子高于右側盒子,就會超出父容器的高度。因此只能通過設置父容器的min-height來放置這種情況。

3、標準瀏覽器的方法

/*方法3*/ 
.outer3{display: table;width:100%; border: 1px solid red;} 
.sidebar3{display:table-cell;width:200px;height:150px;background: #BCE8F1;} 
.content3{display:table-cell;height:100px;background: #F0AD4E;}

4、雙float + calc()計算屬性

/*方法4*/ 
.outer4{overflow: hidden; border: 1px solid red;} 
.sidebar4{float:left;width:200px;height:150px;background: #BCE8F1;} 
.content4{float:left;width:calc(100% - 200px);height:100px;background: #F0AD4E;}

5、雙inline-block + calc()計算屬性

/*方法5*/ 
.outer5{box-sizing: content-box;font-size: 0; border: 1px solid red;}
.sidebar5,.content5{display: inline-block;vertical-align: top;box-sizing: border-box;width: 200px;
 height:150px; background: #BCE8F1;font-size: 14px;} .outer5 
.content5{width:calc(100% - 200px);height:100px;background: #F0AD4E;}

這種方法是通過width: calc(100% - 140px)來動態(tài)計算右側盒子的寬度。需要知道右側盒子距離左邊的距離,以及左側盒子具體的
寬度(content+padding+border),以此計算父容器寬度的100%需要減去的數值。同時,還需要知道右側盒子的寬度是否包含border
的寬度。
在這里,為了簡單的計算右側盒子準確的寬度,設置了子元素的box-sizing:border-box;以及父元素的box-sizing: content-box;。
同時,作為兩個inline-block的盒子,必須設置vertical-align來使其頂端對齊。
另外,為了準確地應用計算出來的寬度,需要消除div之間的空格,需要通過設置父容器的font-size: 0;,或者用注釋消除html中的空格等方法。

缺點:

  • 需要知道左側盒子的寬度,兩個盒子的距離,還要設置各個元素的box-sizing
  • 需要消除空格字符的影響
  • 需要設置vertical-align: top滿足頂端對齊。

6、float + BFC方法(理解CSS布局和BFC =》 https://www.w3cplus.com/css/understanding-css-layout-block-formatting-context.html

/*方法6*/ 
.outer6{overflow: auto; border: 1px solid red;} 
.sidebar6{float: left;height:150px;background: #BCE8F1;} 
.content6{overflow:auto;height:100px;background: #F0AD4E;}

這個方案同樣是利用了左側浮動,但是右側盒子通過overflow: auto;形成了BFC,因此右側盒子不會與浮動的元素重疊。

7、flex

/*方法7*/ 
.outer7{display: flex; border: 1px solid red;} 
.sidebar7{flex:0 0 200px;height:150px;background: #BCE8F1;} 
.content7{flex: 1;height:100px;background: #F0AD4E;}</pre>

flex可以說是最好的方案了,代碼少,使用簡單。但存在兼容性,有朝一日,大家都改用現代瀏覽器,就可以使用了。
需要注意的是,flex容器的一個默認屬性值:align-items: stretch;。這個屬性導致了列等高的效果。
為了讓兩個盒子高度自動,需要設置: align-items: flex-start;

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容