常用布局的实现(两列布局、三列适应布局,两列等高适应布局等)

两列布局:左侧定宽,右侧自适应
方法一:利用float和负外边距

<style>
  * {
	margin: 0;
	padding: 0;
}

.main,.sitebar {
	font: bolder 20px/300px;
}

.main {
	width: 100%;
	float: left;
}

.main .content {
	margin-left: 200px;
	background-color: red;
}

.sitebar {
	width: 200px;
	float: left;
	background-color: green;
	margin-left: -100%;
}
  </style>
<div class="main"> 
   <div class="content">
     右侧主体自适应区块 
   </div> 
  </div> 
  <div class="sitebar">
    左侧定宽200px区块 
</div>
  • 优点:考虑了页面优化,右侧主内容区先加载,左侧后加载。
  • 缺点:多添加了一层div包裹。

方法二:利用外边距

<style>       
 * {
	margin: 0;
	padding: 0;
}

.sitebar {
	float: left;
	width: 200px;
	background-color: green;
}

.content {
	background-color: red;
	margin-left: 200px;
}   
 </style>
<div class="sitebar">
   左侧定宽200px区块
  </div> 
  <div class="content">
   右侧主体自适应区块
</div>
  • 优点:代码简洁,便于理解
  • 缺点:不利于页面优化,右侧主内容区后加载

方法三:利用position

<style>        
* {
	margin: 0;
	padding: 0;
}

.sitebar {
	width: 200px;
	background-color: green;
}

.content {
	position: absolute;
	left: 200px;
	right: 0;
	top: 0;
	background-color: red;
}   
 </style>
<div class="content">
   右侧主体自适应区块
  </div> 
  <div class="sitebar">
   左侧定宽200px区块
</div>
  • 优点:考虑到了页面优化,右侧内容区先加载
  • 缺点:目测没有

上述三种方法兼容 IE7 以上,但在IE7下不设置高度时,会产生高度错位bug。可通过设置父元素 font-size=0 ,再分别设置 子元素 font-size解决。

方法四:利用flex布局

<style>        
* {
	margin: 0;
	padding: 0;
}

.main {
	display: flex;
}

.content {
	flex: 1;
	background-color: red;
}

.sitebar {
	flex: 0 0 200px;
	order: -1;
	background-color: green;
}            
</style>
<div class="main"> 
   <div class="content">
    右侧主体自适应区块
   </div> 
   <div class="sitebar">
    左侧定宽200px区块
</div>
  • 优点:CSS3新布局方式,高大上
  • 缺点:仅支持 IE11+

三列布局:左右定款,中间自适应。

方法一:使用负外边距

<style>        
* {
	margin: 0;
	padding: 0;
}

.main,.left,.right {
	height: 300px;
	font: 20px/300px;
	color: #fff;
	text-align: center;
}

.main {
	width: 100%;
	float: left;
}

.main .content {
	margin: 0 300px 0 200px;
	background-color: black;
}

.left {
	width: 200px;
	float: left;
	margin-left: -100%;
	background-color: red;
}

.right {
	width: 300px;
	float: left;
	margin-left: -300px;
	background-color: blue;
}  
</style>
<div class="main"> 
   <div class="content">
    中间主体区域宽度自适应
   </div> 
  </div> 
  <div class="left">
   左侧定宽200px
  </div> 
  <div class="right">
   右侧定宽300px
</div>
  • 优点:兼容IE7+,考虑到页面优化,中间内容区先加载
  • 缺点:多一层div嵌套,不易理解

方法二:使用绝对定位

<style>
body {
	margin: 0px;
}
#left {
	background-color: #E8F5FE;
	border: 1px solid #A9C9E2;
	height: 400px;
	width: 100px;
	position: absolute;
	top: 0px;
	left: 0px;
}

#center {
	background-color: #F2FDDB;
	border: 1px solid #A5CF3D;
	height: 400px;
	margin-right: 102px;
	margin-left: 102px;
}

#right {
	background-color: #FFE7F4;
	border: 1px solid #F9B3D5;
	height: 400px;
	width: 100px;
	position: absolute;
	top: 0px;
	right: 0px;
}
</style>
 <div id="center">
   中列
  </div> 
  <div id="left">
   左列
  </div> 
  <div id="right">
   右列
  </div>
  • 优点:代码结构简单,考虑到了页面优化,中间内容去先加载
  • 缺点:目测没有

方法三:使用flex布局

<style>
.HolyGrail-body {
	display: flex;
	flex: 1;
}

.HolyGrail-content {
	flex: 1;
	background-color: green;
}

.HolyGrail-nav, .HolyGrail-ads {
  /* 两个边栏的宽度设为12em */
	flex: 0 0 200px;
	background-color: blue;
}

.HolyGrail-nav {
  /* 导航放到最左边 */
	order: -1;
	background-color: grey;
}
</style>
<div class="HolyGrail-body"> 
   <main class="HolyGrail-content">
    ...
   </main> 
   <nav class="HolyGrail-nav">
    ...
   </nav> 
   <aside class="HolyGrail-ads">
    ...
   </aside> 
  </div>
  • 优点:高大上
  • 缺点:仅支持IE11+

两列等高布局
利用padding-bottom的正值与margin-bottom的负值相互抵消即可,同时最外层设置overflow:hidden;即可.
代码如下:

<html xmlns="http://www.w3.org/1999/xhtml">
 <head> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  <title>两列等高布局,利用padding-bottom的正值与margin-bottom的负值相互抵消即可</title> 
  <style>

.main{ width:600px; margin:0 auto; overflow:hidden;}

.left{background:red; width:300px; float:left; padding-bottom:2000px; margin-bottom:-2000px;}

.right{background:green; width:300px;float:left;padding-bottom:2000px; margin-bottom:-2000px;}

</style> 
 </head> 
 <body> 
  <div class="main"> 
   <div class="left"> 
    <p>we are good friend</p> 
   </div> 
   <div class="right"> 
    <p>we are good friend</p> 
    <p>we are good friend</p> 
    <p>we are good friend</p> 
    <p>we are good friend</p> 
   </div> 
  </div>  
 </body>
</html>

 

posted @ 2017-06-01 17:20  nalee  阅读(1666)  评论(0编辑  收藏  举报