前端開發(fā)中,頁(yè)面布局一直都是基礎(chǔ),在CSS廣泛使用之前大部分布局是使用的table布局,CSS流行后,CSS布局一直是布局核心技能之一。隨著CSS技術(shù)的不斷發(fā)展,我們經(jīng)歷了從浮動(dòng)到Flexbox再到Grid的演進(jìn)過程。面對(duì)這三種主流的布局方案,很多開發(fā)者都會(huì)疑惑:到底該選擇哪種布局方式?今天我們從幾個(gè)簡(jiǎn)單的例子來分別用不同的布局實(shí)現(xiàn)一下,就來一場(chǎng)實(shí)戰(zhàn)對(duì)比,讓你徹底搞清楚!
我們先看看一個(gè)簡(jiǎn)單的布局,一個(gè)盒子里面包含三個(gè)盒子,需要兩邊對(duì)齊,中間間距均等分;
首先出場(chǎng)的是“浮動(dòng)布局”:
浮動(dòng)布局曾是Web布局的唯一選擇,雖然現(xiàn)在略顯老態(tài),但仍有其適用場(chǎng)景,而且簡(jiǎn)單容易上手。
<style>.container { overflow: hidden; width: 700px; border: 5px solid #000; padding: 20px;}.box { float: left; width: 200px; height: 100px; margin-right:50px; box-sizing: border-box; background-color: orange;}.box:last-child { margin-right:0px ;}.clearfix::after { content: ""; display: table; clear: both;} </style><div class="container"> <div class="box">
</div> <div class="box">
</div> <div class="box">
</div></div>
Flexbox布局為的一維布局提供了完美的解決方案,讓我們能夠輕松實(shí)現(xiàn)元素的彈性排列。<style>.container { width: 700px; border: 5px solid #000; padding: 20px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;}.box { width: 200px; height: 100px; box-sizing: border-box; background-color: orange;}</style>
<div class="container"> <div class="box">
</div> <div class="box">
</div> <div class="box">
</div></div>
我們?cè)倏纯磄rid布局(網(wǎng)格布局):CSS Grid布局是專門為二維布局設(shè)計(jì)的革命性技術(shù),可以同時(shí)處理行和列的布局。<style>.container { width: 700px; border: 5px solid #000; padding: 20px; display: grid; grid-template-columns: repeat(3, 200px); justify-content: space-between; }.box { width: 200px; height: 100px; box-sizing: border-box; background-color: orange;}</style><div class="container"> <div class="box">
</div> <div class="box">
</div> <div class="box">
</div></div>
- 浮動(dòng)布局相對(duì)好理解,需要間隔多少,直接給出值,但是需要清除浮動(dòng),否則會(huì)導(dǎo)致布局塌陷,實(shí)現(xiàn)復(fù)雜布局時(shí)代碼冗長(zhǎng);因?yàn)橹当容^固定所以響應(yīng)式適配需要大量媒體查詢,比較適合簡(jiǎn)單網(wǎng)格布局、文字環(huán)繞圖片等傳統(tǒng)布局需求。
- flex布局代碼比較少,對(duì)于這種橫向布局方式,比較簡(jiǎn)單,如果要實(shí)現(xiàn)元素的垂直居中,左右居中都很方便,元素順序可靈活調(diào)整,強(qiáng)大的空間分配能力。
- Grid布局在這個(gè)例子中和flex布局區(qū)別不太大,沒有明顯的優(yōu)勢(shì)。
當(dāng)然,平時(shí)我們這三種并不是互相排斥的,是可以結(jié)合起來用的,grid可以用來做整體頁(yè)面布局或者是復(fù)雜的網(wǎng)格布局,flex特別適合組件內(nèi)部布局。<style>.page { display: grid; grid-template-columns: 250px 1fr; grid-template-rows: auto 1fr auto; border: 2px solid #00ff00;}
.nav { height: 100vh; display: flex; flex-direction: column; align-items: center; border: 2px solid #ff00ff;}
.box { width: 200px; height: 100px; border: 1px solid #000; box-sizing: border-box; background-color: orange;}
.card-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px; border: 2px solid #00ffff;}
.card { display: flex; flex-direction: column; border: 2px solid #0000ff;}</style><div class="page"> <div class="nav"> <div class="box"></div> <div class="box"></div> <div class="box"></div> </div> <div class="card-container"> <div class="card">
</div> <div class="card">
</div> <div class="card">
</div> <div class="card">
</div> <div class="card">
</div> </div></div>
現(xiàn)代前端開發(fā)中,推薦以Grid為主力布局工具,F(xiàn)lexbox作為補(bǔ)充,浮動(dòng)布局僅用于特定場(chǎng)景。掌握這三種技術(shù),并根據(jù)實(shí)際需求靈活選擇,是你成為CSS高手的關(guān)鍵!
閱讀原文:點(diǎn)擊這里?
該文章在 2025/9/22 15:27:57 編輯過