CSS實現(xiàn)三欄布局的四種方法

1. 什么是三欄布局
常見的一種頁面布局方式,將頁面分為左欄、中欄和右欄
左右兩側(cè)的盒子寬度固定,中間的盒子會隨屏幕自適應(yīng)
一般中間放主體內(nèi)容,左右兩邊放輔助內(nèi)容
2. 如何實現(xiàn)三欄布局
2.1 彈性布局
將最外層盒子設(shè)為彈性布局,左右兩邊的盒子固定寬度200px
將中間的盒子flex
設(shè)為1
這樣中間盒子的寬度就能一直得到全部寬度減去左右盒子的寬度,這個寬度會隨著窗口的大小而變化
<style> *{ margin: 0; padding: 0; } div{ height: 200px; } .container{ display: flex; } .left,.right{ width: 200px; background: #66a4bd; } .middle{ flex: 1; background: gray; } </style> <div class="container"> <div class="left">left</div> <div class="middle">middle</div> <div class="right">right</div> </div>
缺點:先加載左邊容器的,左右兩邊往往是輔助內(nèi)容,這樣用戶體驗不好
為了優(yōu)化這個問題,就出現(xiàn)了經(jīng)典的 圣杯 和 雙飛翼 布局,它們的目的就是為了在HTML結(jié)構(gòu)上,中間欄在最前面保證了最先渲染中間提升性能
2.2 grid布局
左右兩邊的寬度固定,將剩余的空間給中間的主體部分
要用到grid-template-columns
:定義網(wǎng)格的列大小和數(shù)量
<style> .wrap { height: 200px; display: grid; grid-template-columns: 200px 1fr 200px; } .left { width: 200px; height: 100%; background-color: aqua; } .content { width: 100%; height: 100%; background-color: cadetblue; flex: 1; } .right { width: 200px; height: 100%; background-color: bisque; } </style> <div class="wrap"> <div class="left">left</div> <div class="content">content</div> <div class="right">right</div> </div>
2.3 圣杯布局
先加載主體內(nèi)容,增加用戶體驗
實現(xiàn)原理: float
+ margin
負值 + position: relative
要保證中間欄最先加載,那就要把middle容器寫在前面
<body> <div class="container"> <div class="middle">middle</div> <div class="left">left</div> <div class="right">right</div> </div> </body>
給父容器添加`padding:0 200px,騰開位置
middle中間容器設(shè)置width:100%
,此時的寬度繼承了父容器的100%
并給三個子容器都設(shè)置float: left
,都向左浮動,去到同一行
頁面效果:第一行位置放不下,左右兩個容器被擠到了第二行,按道理來說它們應(yīng)該是在第一行兩塊紅色區(qū)域位置的
給左右容器相對定位,讓它們相對自己原本文檔流的位置進行定位
.left{ width: 200px; background: #76d1ea; position: relative; margin-left: -100%; //向左挪動父容器寬度的100% left: -200px; //再向左挪動自身的200寬度 }
此時right
接替了left
原本的位置,同理,這時候只需要給right
設(shè)置:margin-right: -200px;
,就可以實現(xiàn)三欄布局了
有一個問題就是:
- 有一個最小寬度,當頁面小于最小寬度時布局就會亂掉
- 由于設(shè)置了相對定位,所以當left原來的位置和right的位置產(chǎn)生重疊時,由于浮動的原因一行放不下就會換行
- 所以布局就被打亂了,使用雙飛翼布局就可以避免這個問題
<style> *{ margin: 0; padding: 0; } .container{ height: 100px; padding: 0 200px; } .middle, .left, .right{ height: 100%; float: left; } .middle{ width: 100%; background: gray; } .left{ width: 200px; background: #76d1ea; position: relative; margin-left: -100%; left: -200px; } .right{ width: 200px; background: #76d1ea; position: relative; margin-right: -200px; } </style> <div class="container"> <div class="middle">middle</div> <div class="left">left</div> <div class="right">right</div> </div>
2.4 雙飛翼布局
先把HTML結(jié)構(gòu)稍微改造一下,在middle容器里面多用了個inner
容器
<div class="container"> <div class="middle"> <div class="inner">middle</div> </div> <div class="left">left</div> <div class="right">right</div> </div>
已經(jīng)設(shè)置了middle的width:100%
,這時候我們只需要設(shè)置inner
容器為padding:0 200px
,我們要的效果同樣是把左右兩個容器擺放到對應(yīng)的紅框位置
left、middle、right
同樣使用浮動
left設(shè)置margin-left:-100%
(父容器的整個寬度)
right設(shè)置margin-left:-200px
這樣便實現(xiàn)了三欄布局的效果,連定位都不使用,且當頁面過小時,布局不會亂
<style> *{ margin: 0; padding: 0; } .container{ height: 100px; } .middle, .left, .right{ float: left; height: 100%; } .middle{ width: 100%; background: gray; } .inner{ height: 100%; padding: 0 200px; } .left{ width: 200px; background: pink; margin-left: -100%; } .right{ width: 200px; background: pink; margin-left: -200px; } </style> <div class="container"> <div class="middle"> <div class="inner">middle</div> </div> <div class="left">left</div> <div class="right">right</div> </div>
兩個布局結(jié)構(gòu)上不同:
相同:讓三列浮動,通過負外邊距形成三列布局
不同:在于如何處理中間主列的位置
圣杯布局:利用父容器的左、右內(nèi)邊距 + 兩個列的相對定位
雙飛翼布局:把主列嵌套在一個新的父級塊中,并利用主列的左、右外邊距進行布局調(diào)整
以上就是CSS實現(xiàn)三欄布局的四種方法的詳細內(nèi)容,更多關(guān)于CSS三欄布局的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
CSS實現(xiàn)三欄布局中間一欄自適應(yīng)且隨文字大小變化寬度的示例代碼
這篇文章主要介紹了CSS實現(xiàn)三欄布局中間一欄自適應(yīng)且隨文字大小變化寬度的示例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需2020-06-02- 這篇文章主要介紹了CSS經(jīng)典三欄布局方案(6種方法)的相關(guān)資料,詳細的介紹了6種三欄布局的方法,具有一定的參考價值,有興趣的可以了解一下2017-12-01
- 本篇文章主要介紹了淺談CSS三欄布局的N種實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-18
- 可能有人不理解三欄布局是什么,其實三欄布局頁面分為左中右三部分,然后對中間一部分做自適應(yīng)的一種布局方式,下面這篇文章就給大家詳細介紹了CSS實現(xiàn)三欄布局的四種方法2017-01-24
css實現(xiàn)兩欄布局,左側(cè)固定寬,右側(cè)自適應(yīng)的多種方法
今天通過7種方法給大家介紹css實現(xiàn)兩欄布局,左側(cè)固定寬,右側(cè)自適應(yīng)效果,每種方法通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2021-08-04淺談CSS 多欄布局(Multi-Columns Layout)
這篇文章主要介紹了淺談CSS 多欄布局(Multi-Columns Layout)的相關(guān)資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-20- 左中右分欄在頁面布局中非常實用也很常見,符合大眾的瀏覽習(xí)慣,那么如何輕松簡單實現(xiàn)呢?下面有個不錯的示例,感興趣的朋友可以參考下2013-10-28