今天聊聊一個經典的佈局實例:html
實現一個三列布局,其中左側和右側的部分寬度固定,中間部分寬度隨瀏覽器寬度的變化而自適應變化前端
可能不少朋友已經笑了,這玩意兒經過雙飛翼佈局就能輕鬆實現。不過,還請容我在雙飛翼以外,按部就班地介紹一下咱們能夠如何實現一個三列布局。git
See the Pen float-three-column by xal821792703 (@honoka) on CodePen.github
這是一種比較便利的實現方式,無需額外的元素輔助定位,同時兼容性也比較優秀。但有一個缺點就是該佈局方式只能實現左右兩列寬度固定,中間自適應這一種三列布局,靈活性不強。web
See the Pen bfc-three-columns by xal821792703 (@honoka) on CodePen.spring
昨天的《CSS 佈局實例系列(二)如何經過 CSS 實現一個左邊固定寬度、右邊自適應的兩列布局》已經談到了利用 BFC 原理實現多列布局的方法。BFC 元素不會與浮動元素疊加,天然也能夠利用 BFC 原理完成這個實例。瀏覽器
See the Pen grid-three-columns by xal821792703 (@honoka) on CodePen.佈局
雙飛翼是由淘寶玉伯等前端大牛提出的一種多列布局方法,主要利用了浮動、負邊距、相對定位三個佈局屬性,使三列布局就像小鳥同樣,擁有中間的身體和兩側的翅膀。post
接下來就簡單介紹一下雙飛翼的實現過程:flex
<div class="grid"> <div id="div-middle-02"><span>div-middle</span></div> <div id="div-left-02"><span>div-left</span></div> <div id="div-right-02"><span>div-right</span></div> </div>
#div-middle-02 { float: left; background-color: #fff9ca; width: 100%; height: 50px; }
中間元素直接佔滿全列,造成小鳥的身體。
#div-middle-02 { float: left; background-color: #fff9ca; width: 100%; height: 50px; } #div-left-02 { float: left; background-color: red; width: 150px; margin-left: -100%; height: 50px; } #div-right-02 { float: left; background-color: yellow; width: 200px; margin-left: -200px; height: 50px; }
看起來,雙翼安裝成功啦。
<div id="div-middle-02"> <div id="middle-wrap-02"><span>div-middle</span></div> </div>
在中間元素中再增長一層包裹,經過這層骨架咱們就能夠方便地控制小鳥身體的位置啦,方法就是調整骨架的左右邊距,使其分別等於左右兩列的寬度:
#div-middle-02 { float: left; background-color: #fff9ca; width: 100%; height: 50px; } #middle-wrap-02 { margin: 0 200px 0 150px; } #div-left-02 { float: left; background-color: red; width: 150px; margin-left: -100%; height: 50px; } #div-right-02 { float: left; background-color: yellow; width: 200px; margin-left: -200px; height: 50px; }
好啦,一個左右定寬,中間自適應的三列布局以雙飛翼的方式成功完成。
#div-middle-02 { float: left; background-color: #fff9ca; width: 100%; height: 50px; } #middle-wrap-02 { margin: 0 200px 0 150px; } #div-left-02 { float: left; position: relative; background-color: red; width: 150px; margin-left: -100%; height: 50px; } #div-right-02 { float: left; position: relative; background-color: yellow; width: 200px; margin-left: -200px; height: 50px; }
See the Pen flex-three-columns by xal821792703 (@honoka) on CodePen.
看完了強大的雙飛翼佈局,是否是已經心急火燎地想親手試試啦。別急,客官,再聽我嘮嘮 CSS3 的新佈局 flex 唄。先讓我說明一下上面的 DEMO 中是怎樣實現本次實例的:
.flex { display: flex; flex-flow: row; } #div-left-03 { background-color: red; width: 150px; height: 50px; } #div-middle-03 { background-color: #fff9ca; width: 100%; height: 50px; } #div-right-03 { background-color: yellow; width: 200px; height: 50px; }
效果以下圖:
最後感謝你們的閱讀,歡迎前往個人 repo 查看源代碼整理,有任何問題也請盡情向我吐槽。