1、前言
- 本文主要介绍了实现页面布局的几种方法。
- 以常见的左中右布局为例。
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;
}
复制代码
float
布局。
<!-- 浮动布局 -->
<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>
复制代码
absolute
布局
<!-- 定位布局 -->
<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
布局
<!-- 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
布局
<!-- 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布局
<!-- 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>
复制代码
3、效果如下
当增加内容时,如图二:
4. 各种布局的优缺点
float
布局的兼容性比较好。缺点是如图二, 解决办法:给橙色块添加overflow: hidden
(生成了一个BFC)。浮动元素父元素还存在高度塌陷问题,解决方法: 父元素生成一个BFC。absolute
布局的有点是简单直接,兼容性好。缺点,脱离了文档流。flex
布局的优点,布局简单、灵活,移动端友好;缺点是ie8以下不兼容。table
布局的优点是兼容性好,有时候布局相对简单。缺点是它是对TABLE标签的不正规使用,一直以来被大家所诟病。当需要内容高度不一致时并不适应。grid
布局优点,是第一个基于二维方向的布局模块。它是第一个基于网格的原生布局系统。缺点是对低版本浏览器兼容性不好。