最终实现如下效果图:
1.流体布局
左右模块各自向左右浮动,并设置中间模块的 margin 值使中间模块宽度自适应。
缺点就是主要内容无法最先加载,当页面内容较多时会影响用户体验。
<!DOCTYPE html>
<html lang="en">
<head>
<style>
.left {
float: left;
height: 200px;
width: 100px;
background-color: red;
}
.right {
width: 200px;
height: 200px;
background-color: blue;
float: right;
}
.main {
margin-left: 120px;
margin-right: 220px;
height: 200px;
background-color: green;
}
</style>
</head>
<body>
<div class="container">
<div class="left"></div>
<div class="right"></div>
<div class="main"></div>
</div>
</body>
</html>
2.BFC三栏布局
<!DOCTYPE html>
<html lang="en">
<head>
<style>
.left {
float: left;
height: 200px;
width: 100px;
margin-right: 20px;
background-color: red;
}
.right {
width: 200px;
height: 200px;
float: right;
margin-left: 20px;
background-color: blue;
}
.main {
height: 200px;
overflow: hidden;
background-color: green;
}
</style>
</head>
<body>
<div class="container">
<div class="left"></div>
<div class="right"></div>
<div class="main"></div>
</div>
</body>
</html>
3. 双飞翼布局
<!DOCTYPE html>
<html lang="en">
<head>
<style>
.content {
float: left;
width: 100%;
}
.main {
height: 200px;
margin-left: 110px;
margin-right: 220px;
background-color: green;
}
.left {
float: left;
height: 200px;
width: 100px;
margin-left: -100%;
background-color: red;
}
.right {
width: 200px;
height: 200px;
float: right;
margin-left: -200px;
background-color: blue;
}
</style>
</head>
<body>
<div class="content">
<div class="main"></div>
</div>
<div class="left"></div>
<div class="right"></div>
</body>
</html>
4. 圣杯布局
样式定义复杂
<!DOCTYPE html>
<html lang="en">
<head>
<style>
.container {
margin-left: 120px;
margin-right: 220px;
}
.main {
float: left;
width: 100%;
height: 200px;
background-color: green;
}
.left {
float: left;
width: 100px;
height: 200px;
margin-left: -100%;
position: relative;
left: -120px;
background-color: red;
}
.right {
float: left;
width: 200px;
height: 200px;
margin-left: -200px;
position: relative;
right: -220px;
background-color: blue;
}
</style>
</head>
<body>
<div class="container">
<div class="main"></div>
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
5. Flex 布局
推荐使用
<!DOCTYPE html>
<html lang="en">
<head>
<style>
.container {
display: flex;
height:200px;
}
.main {
flex: 1;
background-color: green;
}
.left {
width:100px;
margin-right: 20px;
background-color: red;
}
.right {
width:100px;
margin-left: 20px;
background-color: blue
}
</style>
</head>
<body>
<div class="container">
<div class="left"></div>
<div class="main"></div>
<div class="right"></div>
</div>
</body>
</html>
6. Table 布局
无法设置栏间距
效果入下:
<!DOCTYPE html>
<html lang="en">
<head>
<style>
.container {
display: table;
width: 100%;
}
.left, .main, .right {
display: table-cell;
}
.left {
width: 200px;
height: 200px;
background-color: red;
}
.main {
background-color: green;
}
.right {
width: 100px;
height: 200px;
background-color: blue;
}
</style>
</head>
<body>
<div class="container">
<div class="left"></div>
<div class="main"></div>
<div class="right"></div>
</div>
</body>
</html>
若想造成有边距的视觉效果:
1.可以在class为main的类下添加下方代码(不推荐为了效果而强行修改)
border-left: 20px solid white;
border-right: 20px solid white;
2.可以在main元素外再套一个父元素
<!DOCTYPE html>
<html lang="en">
<head>
<style>
.container {
display: table;
width: 100%;
}
.left, box,.right {
display: table-cell;
}
.left {
width: 200px;
height:200px;
background-color: red;
}
.main {
height:200px;
margin:0px 20px;
background-color: green;
}
.right {
width: 100px;
height:200px;
background-color: blue;
}
</style>
</head>
<body>
<div class="container">
<div class="left"></div>
<div class="box">
<div class="main"></div>
</div>
<div class="right"></div>
</div>
</body>
</html>
7. 绝对定位布局
<!DOCTYPE html>
<html lang="en">
<head>
<style>
.container {
position: relative;
}
.main {
height: 400px;
margin: 0 120px;
background-color: green;
}
.left {
position: absolute;
width: 100px;
height: 200px;
left: 0;
top: 0;
background-color: red;
}
.right {
position: absolute;
width: 100px;
height: 200px;
background-color: blue;
right: 0;
top: 0;
}
</style>
</head>
<body>
<div class="container">
<div class="main"></div>
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>