一、前言
- 本文主要介紹了實現頁面佈局的幾種方法。
- 以常見的左中右佈局爲例。
2. 代碼實現
html * {
margin: 0;
padding: 0;
}
.layout {
margin-bottom: 20px;
}
.layout article {
width: 100%;
}
.layout article > div {
min-height: 100px;
}
.layout article .left {
width: 300px;
background: red;
}
.layout article .center {
background: orange;
}
.layout article .right {
width: 300px;
background: blue;
}
複製代碼
<!-- 浮動佈局 -->
<section class="layout float">
<style>
.layout.float .left {
float: left;
}
.layout.float .right {
float: right;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="right"></div>
<div class="center">
<h2>這是float佈局</h2>
<p>這是一段文字</p>
<p>這是一段文字</p>
</div>
</article>
</section>
複製代碼
<!-- 定位佈局 -->
<section class="layout absolute">
<style>
.layout.absolute .left-center-right > div {
position: absolute;
}
.layout.absolute .left {
left: 0;
}
.layout.absolute .center {
left: 300px;
right: 300px;
}
.layout.absolute .right {
right: 0;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>這是absolute佈局</h2>
<p>這是一段文字</p>
<p>這是一段文字</p>
</div>
<div class="right"></div>
</article>
</section>
複製代碼
<!-- flex佈局 -->
<section class="layout flex">
<style>
.layout.flex {
margin-top: 140px;
}
.layout.flex .left-center-right{
display: flex;
}
.layout.flex .center {
flex: 1;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>這是flex佈局</h2>
<p>這是一段文字</p>
<p>這是一段文字</p>
</div>
<div class="right"></div>
</article>
</section>
複製代碼
<!-- table佈局 -->
<section class="layout table">
<style>
.layout.table .left-center-right {
display: table;
height: 100px;
}
.layout.table .left-center-right > div{
display: table-cell;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>這是table佈局</h2>
<p>這是一段文字</p>
<p>這是一段文字</p>
</div>
<div class="right"></div>
</article>
</section>
複製代碼
<!-- grid佈局 -->
<section class="layout grid">
<style>
.layout.grid .left-center-right {
display: grid;
grid-template-columns: 300px auto 300px;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>這是grid佈局</h2>
<p>這是一段文字</p>
<p>這是一段文字</p>
</div>
<div class="right"></div>
</article>
</section>
複製代碼
三、效果以下
當增長內容時,如圖二:
4. 各類佈局的優缺點
float
佈局的兼容性比較好。缺點是如圖二, 解決辦法:給橙色塊添加overflow: hidden
(生成了一個BFC)。浮動元素父元素還存在高度塌陷問題,解決方法: 父元素生成一個BFC。
absolute
佈局的有點是簡單直接,兼容性好。缺點,脫離了文檔流。
flex
佈局的優勢,佈局簡單、靈活,移動端友好;缺點是ie8如下不兼容。
table
佈局的優勢是兼容性好,有時候佈局相對簡單。缺點是它是對TABLE標籤的不正規使用,一直以來被你們所詬病。當須要內容高度不一致時並不適應。
grid
佈局優勢,是第一個基於二維方向的佈局模塊。它是第一個基於網格的原生布局系統。缺點是對低版本瀏覽器兼容性很差。