實現一個三列布局,其中左側和右側的部分寬度固定,中間部分寬度隨瀏覽器寬度的變化而自適應變化
可能很多朋友已經笑了,這玩意兒通過雙飛翼布局就能輕松實現。不過,還請容我在雙飛翼之外,循序漸進地介紹一下我們可以如何實現一個三列布局。
See the Pen float-three-columns by xal821792703 ( @honoka ) on CodePen .
這是一種比較便利的實現方式,無需額外的元素輔助定位,同時兼容性也比較優秀。但有一個缺點就是該布局方式只能實現左右兩列寬度固定,中間自適應這一種三列布局,靈活性不強。
See the Pen bfc-three-columns by xal821792703 ( @honoka ) on CodePen .
昨天的《 CSS 布局實例系列(二)如何通過 CSS 實現一個左邊固定寬度、右邊自適應的兩列布局 》已經談到了利用 BFC 原理實現多列布局的方法。BFC 元素不會與浮動元素疊加,自然也可以利用 BFC 原理完成這個實例。
See the Pen grid-three-columns by xal821792703 ( @honoka ) on CodePen .
雙飛翼是由淘寶玉伯等前端大牛提出的一種多列布局方法,主要利用了浮動、負邊距、相對定位三個布局屬性,使三列布局就像小鳥一樣,擁有中間的身體和兩側的翅膀。
接下來就簡單介紹一下雙飛翼的實現過程:
div-middle div-left div-right
#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;}
看起來,雙翼安裝成功啦。
這樣三列布局就大功告成了?No,no,no,仔細看看上面的效果圖,可以發現 div-middle 的字塊消失了。這是因為通過負邊距調整浮動元素位置時,會產生層疊的效果,上面的布局其實只是左右兩列元素分別定位在自己的位置上并覆蓋中間元素的那部分而已,中間元素的定位并未成功。中間元素要怎樣定位在自己的位置上呢?小鳥的身體不是還缺少骨架嘛,那么我們在小鳥體內加上骨架吧:
div-middle
在中間元素中再增加一層包裹,通過這層骨架我們就可以方便地控制小鳥身體的位置啦,方法就是調整骨架的左右邊距,使其分別等于左右兩列的寬度:
#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;}
效果如下圖:
Flex 布局教程:語法篇
Flex 布局教程:實例篇
最后感謝大家的閱讀,歡迎前往我的 repo 查看源代碼整理,有任何問題也請盡情向我吐槽。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com