`
highfly-s
  • 浏览: 96787 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

八种创建等高列布局

阅读更多

高度相等列在Web页面设计中永远是一个网页设计师的需求。如果所有列都有相同的背景色,高度相等还是不相等都无关紧要,因为你只要在这些列的父元素中设置一个背景色就可以了。但是,如果一个或多个列需要单独设置自己的背景色,那么它的视觉完整性的设计就显得非常重要了。大家都知道当初Table实现等高列布局是多么的简单,但是我们使用CSS来创建等高列布局并非是那么容易的事情。

 

如果一个设计是固定宽度(非流体的宽度设计),那么实现多列等高效果是相当的容易。最好的技术就是使用Dan CederholmFaux Columns技术。只要制作一张合适的背景图片,在你多列的父元素中进行垂直铺放,从而达到一种假像(假的多列等高布局效果)。但是在流体布局中要用CSS实现多列等高的设计那就不是那么容易的事情,因为我们没有办法在使用背景图片来实现多列等高的假像了,那么是不是就没有办法实现了呢?那当然不是那么回事了,不管是实现固定布局还是流体布局的等多列等高视觉效果,方法还是蛮多的,这些方法体现了CSS的不同技术,也各有千秋,下面我们就一起来探讨Web页面中的多列等高的实现技术。

下面要介绍的方法都是让我们的布局如何实现多列的等高视觉效果,正如下图所示:

一、假等高列

这种方法是我们实现等高列最早使用的一种方法,就是使用背景图片,在列的父元素上使用这个背景图进行Y轴的铺放,从而实现一种等高列的假像:

Html Markup

				<div class=”container clearfix”>
					<div class=”left”></div>
					<div  class=”content”></div>
					<div class=”right”></div>
				</div>
			

在制作样式之前需要一张类似下面的背景图:

CSS Code:

				.container {
					background: url("column.png") repeat-y;
					width: 960px;
					margin: 0 auto;
					}
					.left {
					float: left;
					width: 220px;
					}
					.content {
					float: left;
					width: 480px;
					}
					.right {
					float:left;
					width: 220px;
					}
			

优点:

实现方法简单,兼容性强,不需要太多的css样式就可以轻松实现。

缺点:

使用这种方法不适合流体布局等高列的布局,另外如果你需要更换背景色或实现其他列数的等高列时,都需要重新制作过背景图。

二、给容器div使用单独的背景色(固定布局)

这种方法实现有点复杂,如果你理解其实现过程也是相当的简单。这种方法我们主要给每一列的背景设在单独的<div>元素上。这种方法的实现的原则是:任何<div>元素的最大高度来撑大其他的<div>容器高度。如下图所示:

上图中,不管我们哪一列的高度最高,那么其三个容器“rightBack,contentBack,leftBack”的高度相应会随最高列的高列变化,下面我们一起来看其实现过程:

Html Markup

 

<div class="container">
								<div class="rightWrap">
									<div class="contentWrap">
										<div class="leftWrap">
											<div class="aside column leftSidebar" id="left"></div>
											<div id="content" class="column section"></div>
											<div class="aside rightSidebat column" id="right"></div>
										</div>
									</div>
								</div>
							</div>
						

 

CSS Code:

<style type="text/css">
								.container {
									width: 960px;
									margin: 0 auto;
								}
								.rightWrap {
									width: 100%;
									float: left;
									background: green;
									overflow: hidden;
									position: relative;
								}
								
								.contentWrap {
									float: left;
									background: orange;
									width: 100%;
									position: relative;
									right: 320px;/*此值等于rightSidebar的宽度*/
								}
								
								.leftWrap{
									width: 100%;
									background: lime;
									float:left;
									position: relative;
									right: 420px;/*此值等于Content的宽度*/
								}
								#left {
									float: left;
									width: 220px;
									overflow: hidden;
									position: relative;
									left: 740px;
								}
								#content {
									float: left;
									width: 420px;
									overflow: hidden;
									position:relative;
									left: 740px;
								}
								#right {
									float: left;
									overflow: hidden;
									width: 320px;
									background: #333;
									position: relative;
									left: 740px;
								}
							</style>
						

看起来蛮复杂吧?其实你只要了解了它是如何的工作原理就会变得非常简单,你只要理解并掌握以下几点:

  1.  “div.rightWrap”、“div.contentWrap”、“div.leftWrap”都是一个封闭的容器;而“div#left”、“div#content”、“div#right”就是我们所说的列,里面放了内容;
  2.  每一个容器对应一列的背景色(用来放置背景色或背景图片);此例对应的是:“div.rgithWrap”用来实现“div#right”列的背景色;“div.contentWrap”用来实现“div#content”列的背景色;“div.leftWrap”用来实现“div#left”列的背景色;
  3.  除了最外面的容器(也就是对应的最左列容器)外,我都都对他们进行相对定位,并且设置其“right”值,此值并和相对应的列宽相等。此例中“div.contentWrap”对应的刚好是“div#right”的宽度;而“div.leftWrap”对应用的刚好是“div#content”的宽度;
  4.  给每列进行左浮动,并设置其列宽
  5.  给每一列设置相对定位,并进行“left”设置,而且“left”的值等于除第一列的所有列宽的和。此例中“left”的值等于“div#right”和“div#content”两列的宽度之和,也就是320px+420=740px

用两幅图来展示其实现的过程:

下图是实现上面的第二步对应的示例图,也就是容器“div.rightWrap”,“div.contentWrap”,“div.leftWrap”进行相对定位(position: releative),并展示了如何设置对应的“right”值。

上图虚线代表的范围是可视范围,其中有两列背景将会溢出,解决这个只需要在最外层容器“div.rightWrap”加上“overflow:hidden”就可以进行隐藏溢出的其他背景色。接下来下图所展示的是上面所说的第五步:

前面我们对三个内容元素都进行了相对定位,现在只需要按第五步将其定位回去,如上图所示。其实说到最后,你只要理解了这两幅,你就什么都清楚了。

优点:

这种方法是不需要借助其他东西(javascript,背景图等),而是纯CSS和HTML实现的等高列布局,并且能兼容所有浏览器(包括IE6),并且可以很容易创建任意列数。

缺点:

这种方法不像其他方法一样简单明了,给你理解会带来一定难度,但是只要你理解清楚了,将能帮你创建任意列数的等高布局效果。

三、给容器div使用单独的背景色(流体布局)

这种布局可以说是就是第二种布局方法,只是这里是一种多列的流体等高列的布局方法。前面也说过了,其实现原理就是给每一列添加相对应用的容器,并进行相互嵌套,并在每个容器中设置背景色。这里需要提醒大家你有多少列就需要多少个容器,比如说我们说的三列,那么你就需要使用三个容器。如下图所示:

HTML Markup

								<div id="container3">
									<div id="container2">
											<div id="container1">
													<div id="col1">Column 1</div>
													<div id="col2">Column 2</div>
													<div id="col3">Column 3</div>
											</div>
									</div>
								</div>
							

CSS Code:

								<style type="text/css">
									#container3 {
										float: left;
										width: 100%;
										background: green;/**/
										overflow: hidden;
										position: relative;
									}
									
									#container2 {
										float: left;
										width: 100%;
										background: yellow;
										position: relative;
										right: 30%; /*大小等于col3的宽度*/
									}
									
									#container1 {
										float: left;
										width: 100%;
										background: orange;
										position: relative;
										right: 40%;/*大小等于col2的宽度*/
									}
									
									#col1 {
										float:left;
										width:26%;/*增加了2%的padding,所以宽度减少4%*/
										position: relative;
										left: 72%;/*距左边呀增加2%就成72%*/
										overflow: hidden;
									}
									#col2 {
										float:left;
										width:36%;/*增加了2%的padding,所以宽度减少4%*/
										position: relative;
										left: 76%;/*距左边有三个padding为2%,所以距离变成76%*/
										overflow: hidden;
									}
									#col3 {
										float:left;
										width:26%;/*增加了2%的padding,所以宽度减少4%*/
										position: relative;
										left: 80%;/*距左边5个padding为2%,所以距离变成80%*/
										overflow: hidden;
									}
								</style>
							

上面展示的是三列的,下面我们在来看一下两列和更多列的模板:

两列的HTML Markup:

					<div id="container2">
						<div id="container1">
							<div id="col1">Column 1</div>
							<div id="col2">Column 2</div>
						</div>
					</div>
				

两列的CSS Code:

					<style type="text/css">
						#container2 {
							float: left;
							width: 100%;
							background: orange;
							position: relative;
							overflow: hidden;
						}
						#container1 {
							float: left;
							width: 100%;
							background: green;
							position: relative;
							right: 30%;
						}
						
						#col1 {
							width: 66%;
							float: left;
							position: relative;
							left: 32%;
						}
						
						#col2 {
							width: 26%;
							float: left;
							position: relative;
							left: 36%;
						}
					</style>
				

四列的HTML Markup:

							<div id="container4">
								<div id="container3">
									<div id="container2">
										<div id="container1">
											<div id="col1">col1</div>
											<div id="col2">col2</div>
											<div id="col3">col3</div>
											<div id="col4">col4</div>
										</div>
									</div>
								</div>
							</div>
						

四列的CSS Code:

							<style type="text/css">
								#container4 {
									float: left;
									width: 100%;
									background: green;
									position: relative;
									overflow: hidden;
								}
								
								#container3 {
									float: left;
									width: 100%;
									background: #B2F0F9;
									position: relative;
									right: 20%;/*此值等于col4的宽度*/
								}
								
								#container2 {
									float: left;
									width: 100%;
									background: #89FFA2;
									position: relative;
									right: 30%;/*此值等于col3的宽度*/
								}
								
								#container1 {
									float: left;
									width: 100%;
									background: #369;
									position: relative;
									right: 30%;/*此值等于col2的宽度*/
								}
								
								#col1 {
									width: 18%;/*1%的padding*/
									float: left;
									position: relative;
									left: 81%;
									overflow: hidden;
								}
								
								#col2 {
									float: left;
									width: 28%;
									position: relative;
									left: 83%;
									overflow: hidden;
								}
								
								#col3 {
									float: left;
									width: 28%;
									position: relative;
									left: 85%;
									overflow: hidden;
								}
								
								#col4 {
									float: left;
									width: 18%;
									position: relative;
									left: 87%;
									overflow: hidden;
								}
							</style>
						

下面来看其实现过程,如果你理解了第二制作方法,那么这个你不用想一下就知道他们是一样的道理,如果你对第二种方法还不够清楚,那么你接着看这下面的内容,你会更清楚他们是怎么一回事的。下面我们一起来看三列的实现过程:

上图展示了,我们有三列,并且也说过了,这三列内容都放在了三个容器的div中,我们每一列的背景色不是放在内容列中,而是放置在容器中,现在我们需要通过对容器进行相对定位,把背景显示出来,而且我们这个容器是最外层的不能进行相对定位的移动,具体的请看下图:

上面我们把容器进行了相对定位,这样一来,我们内容也相应的做了移动,现在我们需要对页面列的内容也进行相对定位,并把内容和容器进行相反方向的定位,这样内容和容器背景色就能对应上了,请看下图所展示的:

接下来我们需要把溢出的部分切掉去,和前面一相,在最外面的容器加上overflow:hidden;这样就OK了。

最后为了让你的效果更加好看一点,你可以尝试给他们加上padding,比如说每列加上2%的padding值,具体实现可以简单从下图中得到:

优点:

兼容各浏览器,可以制作流体等高列,交无列数限制。

缺点:

标签使用较多,结构过于复杂,不易于理解,不过你掌握了其原理也就不难了,这也不算太大缺点。

三、创建带边框的现列等高布局

平常在制作中,我们需要制作两列的等高效果,并且有一条边框效果,那么这个实例我们就一起来看其实现方法:

Html Code

				<div id="wrapper">
					<div id="sidebar">
						.....
					</div>
					<div id="main">
						....
					</div>
				</div>
			

CSS Code:

				<style type="text/css">
					html {
						background: #45473f;
						height: auto;
					}
					
					body {
						width: 960px;
						margin: 20px auto;
						background: #ffe3a6;
						border: 1px solid #efefef;
					}

					#wrapper {
						display: inline-block;
						border-left: 200px solid #d4c376;
						position: relative;
						vertical-align: bottom;
					}
					
					#sidebar {
						float: left;
						width: 200px;
						margin-left: -200px;
						margin-right: -1px;
						border-right: 1px solid #888;
						position: relative;
					}
					
					#main {
						float: left;
						border-left: 1px solid #888;
					}	

					#maing,
					#sidebar{
						padding-bottom: 2em;
					}
				</style>
			

优点:

可以制作带有边框的两列等高布局,并能兼容所有浏览器,结构简单明了。

缺点:

不适合于更多列的应用,比如说三列以上,这样的方法就行不通了。

四、使用正padding和负margin对冲实现多列布局方法

这种方法很简单,就是在所有列中使用正的上、下padding和负的上、下margin,并在所有列外面加上一个容器,并设置overflow:hiden把溢出背景切掉。下面一起来看代码:

HTML Markup:

						<div id="container">
							<div id="left" class="column aside">
								<p>Sidebar</p>
							</div>
							<div id="content" class="column section">
								<p>Main content</p>
							</div>
							<div id="right" class="column aside">
								<p>Sidebar</p>
							</div>			
						</div>
				

CSS Code:

					<style type="text/css">
											
						#container {
							margin: 0 auto;
							overflow: hidden;
							width: 960px;
						}
						
						.column {
							background: #ccc;
							float: left;
							width: 200px;
							margin-right: 5px;
							margin-bottom: -99999px;
							padding-bottom: 99999px;
						}
						
						#content {
							background: #eee;
						}
						
						#right {
							float: right;
							margin-right: 0;
						}
					</style>
				

优点:

这种可能实现多列等高布局,并且也能实现列与列之间分隔线效果,结构简单,兼容所有浏览器

缺点:

这种方法存在一个很大的缺陷,那就是如果要实现每列四周有边框效果,那么每列的底部(或顶部)将无法有边框效果。

下面我们就针对这个缺陷来介绍两种解决办法,第一种是使用背景图来模仿底部(或顶部)边框;第二种方法是使用div来模仿列的边框,下面我们来看这两种方法:

1、背景图模仿边框效果:

Html Code:

					<div id="containerOuter">
						<div id="containerInner">
							<div id="left" class="column aside">
								<p>Sidebar</p>
							</div>
							<div id="content" class="column section">
								<p>Main content</p>
							</div>
							<div id="right" class="column aside">
								<p>Sidebar</p>
							</div>			
						</div>
					</div>
				

CSS Code:

					<style type="text/css">
						#containerOuter {
							background: url("images/bg.gif") no-repeat center bottom;
							width: 616px;
							margin: 0 auto;
							padding-bottom: 1px;
							overflow: hidden;
						}
						
						#containerInner {
							float: left;
							overflow: hidden;
							margin-right: -5px;
						}
						
						.column {
							background: #ccc;
							border: 1px solid #000;
							float: left;
							width: 200px;
							margin-right: 5px;
							margin-bottom: -99999px;
							padding-bottom: 99999px;
						}
						
						#content {
							background: #eee;
						}
					</style>
				

这种方法我们需要在外面增加一个层,并将背景图放置在这个层的底部,而且需要制作一张和列边框色一致,并且要先排列好他们之间的间距,如下图所示:

这种方法有一个最大的不足之处就是,如果我们更改了列的边框的颜色,或者改变了他们之间的间距,都需要重新制作过一张背景图来重新模仿这样的效果,下面一起来看看这种方法带来的最后效果:

2、使用div来模仿列的边框

我们这种方法是在列里面添加一个div,用这个div来模仿边框的效果,具体看代码吧:

Html Code:

				<div class="wrapper">
					<div class="container">
						<div class="col1">
							<div class="colBottom1"><!-- ie needs this comment for small div heights --></div>
						</div>
						<div class="col2">
							<div class="colBottom2"><!-- ie needs this comment for small div heights --></div>
						</div>
					</div>
				</div>
			

CSS Code:

				<style type="text/css">
					.wrapper { 
						width: 960px; 
						margin: 0 auto; 
					}
					.container { 
						position: relative; 
						overflow: hidden; 
						zoom: 1; 
					} /* zoom fix for ie6 */
					.col1 { 
						float: left; 
						width: 728px; 
						padding-bottom: 32767px; 
						margin-bottom: -32767px; 
						border: #f36 1px solid; 
						background: #AFAFAF; 
						}
					.col2 { 
						float: right; 
						width: 208px; 
						padding-bottom: 32767px; 
						margin-bottom: -32767px; 
						border: #f36 1px solid; 
						background: #6F6F6F; 
					}
					.colBottom1 { 
						position: absolute; /*相对于div.container*/
						bottom: 0; 
						left: 0px;/*如果第一列左浮动就设置left:0;*/
						height: 1px; /*当前列的边框宽度*/
						width: 730px;/*当前列宽度+边框宽度*2 */
						background: #f36;/*当前列的边框颜色*/
						} 
					.colBottom2 { 
						position: absolute; /*相对于div.container*/
						bottom: 0; 
						right: 0px; /*如果第二列右浮动就设置left:0;*/
						height: 1px; /*当前列的边框宽度*/
						width: 210px; /*当前列宽度+边框宽度*2 */
						background: #f36;/*当前列的边框颜色*/
					}

				</style>
			

五、使用边框和定位模拟列等高

这种方法是使用边框和绝对定位来实现一个假的高度相等列的效果。假设你需要实现一个两列等高布局,侧栏高度要和主内容高度相等。如:

Html Code:

				<div id="wrapper">
					<div id="mainContent">...</div>
					<div id="sidebar">...</div>
				</div>
			

CSS Code:

				<style type="text/css">
					#wrapper {
						width: 960px;
						margin: 0 auto;
					}
					
					#mainContent {
						border-right: 220px solid #dfdfdf;
						position: absolute;
						width: 740px;
					}
					
					#sidebar {
						background: #dfdfdf;
						margin-left: 740px;
						position: absolute;
						width: 220px;
					}
				</style>
			

优点:

结构简单,兼容各浏览器,容易掌握。

缺点:

这个方法就是无法单独给主内容列设置背景色,并且实现多列效果效果不佳。

六、边框模仿等高列

第五种方法我们无法实现主列的背景色设置,针对上面方法,稍作一下改良,这样就可以实现主内容也设置颜色的效果了

CSS Html:

				<div id="container">
					<div id="content">This is<br />some content</div>
					<div id="right">This is the right</div>
				</div>
			

CSS Code:

				<style type="text/css">
					#container{
						background-color:#0ff;
						overflow:hidden;
						width:960px;
						margin: 0 auto;
					}
					#content{
						background-color:#0ff;
						width:740px;
						border-right:220px solid #f00; /* 边框大小和颜色设置和right大小与颜色一样 */
						margin-right:-220px; /*此负边距大小与right边栏宽度一样*/
						float:left;
					}
					#right{
						background-color:#f00;
						width:220px;
						float:left;
					}
				</style>
			

下面我们在此基础上改变流体布局:

HTML Markup

				<div id="container">
					<div id="content">Main content section</div>
					<div id="sidebar">Right Sidebar </div>
				</div>
			

 

				<style type="text/css">
					#container{
						background-color:#0ff;
						overflow:hidden;
						margin:0 100px;
						padding-right:220px; /* 宽度大小等与边栏宽度大小*/
					}
					* html #container{
						height:1%; /* So IE plays nice */
					}
					#content{
						background-color:#0ff;
						width:100%;
						border-right:220px solid #f00;
						margin-right:-220px;
						float:left;
					}
					#sidebar{
						background-color:#f00;
						width:220px;
						float:left;
						margin-right:-220px;
					}
				</style>
			

上面主要展示了这种方法的二列布局,下面我们在来看看三列布局的用法

HTML Markup

					<div id="containerOuter">
						<div id="container">
							<div id="content">Main content section</div>
							<div id="left">LEFT sidebar</div>
							<div id="right">RIGHT sidebar</div>
						</div>
					</div>
				

CSS Code:

					<style type="text/css">
						#containerOuter {
							margin: 0 auto;
							width: 960px;
						}
						#container{
							background-color:#0ff;
							float:left;
							width:520px;
							border-left:220px solid #0f0; /* 边框大小等于左边栏宽度,颜色和左边栏背景色一致*/
							border-right:220px solid #f00;/* 边框大小等于右边栏宽度,颜色和右边栏背景色一致*/
						}
						#left{
							float:left;
							width:220px;
							margin-left:-220px;
							position:relative;
						}
						#content{
							float:left;
							width:520px;
							margin-right:-520px;
						}
						#right{
							float:right;
							width:220px;
							margin-right:-220px;
							position:relative;
						}
					</style>
				

接着在看一个三列自适应布局

Html Markup

				<div id="container">
					<div id="content">Main Content</div>
					<div id="left">Left Sidebar</div>
					<div id="right">Right Sidebar</div>
				</div>
			

CSS Code

				<style type="text/css">
					body{
					margin:0 100px;
					padding:0 220px 0 220px;
				}
				#container{
					background-color:#0ff;
					float:left;
					width:100%;	
					border-left:220px solid #0f0;
					border-right:220px solid #f00;
					margin-left:-220px;
					margin-right:-220px;
					display:inline; /* So IE plays nice */
				}
				#left{
					float:left;
					width:220px;
					margin-left:-220px;
					position:relative;
				}
				#content{
					float:left;
					width:100%;
					margin-right:-100%;
				}
				#right{
					float:right;
					width:220px;
					margin-right:-220px;
					position:relative;
				}
			</style>
			

优点:

能兼容所有浏览器效果,结构简单明了,容易掌握。

缺点:

列数受到极限,超过三列不好控制。

七、模仿表格布局实列等高列效果

这种方法只适合现代浏览器,本不想介绍的,不过还是顺便列出让大家参考一下吧:

HTML Markup:

						<div class="container table">
							<div class="containerInner tableRow">
								<div class="column tableCell cell1">
									<div class="left aside">
										....
									</div>
								</div>
								
								<div class="column tableCell cell2">
									<div class="content section">
										...
									</div>
								</div>
								
								<div class="column tableCell cell3">
									<div class="right aside">
										...
									</div>
								</div>
								
							</div>
						</div>
					

CSS Code:

						<style type="text/css">
							.table {
								width: auto;
								min-width: 1000px;
								margin: 0 auto;
								padding: 0;
								display:table;
							}
							
							.tableRow {
								display: table-row;
							}
							
							.tableCell {
								display: table-cell;
								width: 33%;
							}
							
							.cell1 {
								background: #f00;
							}
							
							.cell2 {
								background: #0f0;
							}
							
							.cell3 {
								background: #00f;
							}
						</style>
					

优点:

这是一种非常简单,易于实现的方法。

缺点:

兼容性不好,在ie6-7无法正常运行。

八、jQuery和javascript大法

最后要给大家介绍的是使用jQuery和javascript方法来实现多列的布局效果。

1、jQuery实现方法:

Html Markup

				<div class="container">
					<div id="left" class="aside leftSidebar"></div>
					<div id="content" class="section"></div>
					<div id="right" class="aside rightSidebar"></div>
				</div>
			

CSS Code:

				<style type="text/css">
					.contanier {
						width: 960px;
						margin: 0 auto;		
					}
					
					.aside,
					.section {
						float:left;
						width: 33%;
						background: lime;
					}
					
					.leftSidebar {background: orange;}
					.section { background: green;}
				</style>
			

jQuery Code:

				<script type="text/javascript">
					$(document).ready(function(){
						//等高列的小插件
						function setEqualHeight(columns) {
							var tallestColumn = 0;
							columns.each(function(){
								currentHeight = $(this).height();
								if(currentHeight > tallestColumn) {
									tallestColumn = currentHeight;
								}
							});
							columns.height(tallestColumn);
						}
						//调用写好的插件,基中“.container > div”是你需要实现的等高列
						setEqualHeight($(".container > div"));
					});	
				</script>
			

你也可以把上面的jQuery代码换成下面的

				<script type="text/javascript">
					$(document).ready(function(){
						var currentTallest = 0,
								currentRowStart = 0,
								rowDivs = new Array(),
								$el,
								topPosition = 0;

					 $('.column').each(function() {
						 $el = $(this);
						 topPostion = $el.position().top;
						 if (currentRowStart != topPostion) {
							 // we just came to a new row.  Set all the heights on the completed row
							 for (currentDiv = 0 ; currentDiv < rowDivs.length ; currentDiv++) {
								 rowDivs[currentDiv].height(currentTallest);
							 }
							 // set the variables for the new row
							 rowDivs.length = 0; // empty the array
							 currentRowStart = topPostion;
							 currentTallest = $el.height();
							 rowDivs.push($el);
						 } else {
							 // another div on the current row.  Add it to the list and check if it's taller
							 rowDivs.push($el);
							 currentTallest = (currentTallest < $el.height()) ? ($el.height()) : (currentTallest);
						}
						// do the last row
						 for (currentDiv = 0 ; currentDiv < rowDivs.length ; currentDiv++) {
							 rowDivs[currentDiv].height(currentTallest);
						 }
					 });​
					});
				</script>
			

如果你使用上面这个jQuery代码,你需要在需要实现等高列的div中加上"column"类名,这样才会有效果的。

2、JavaScript方法

上面是jQuery的实现方法,接下来看看javaScript的实现方法:

Html Markup:

				<div class="contanier">
					<div class="column" id="left"></div>
					<div id="content" class="column"></div>
					<div id="right" class="column"></div>
				</div>
			

CSS Code:

				<style type="text/css">
					.contanier {
						width: 960px;
						margin: 0 auto;
					}
					
					#left {
						width: 220px;
						float: left;
						margin-right: 20px;
						background: green;
					}
					
					#content {
						width: 480px;
						float: left;
						margin-right: 20px;
						background: lime;
					}
					
					#right {
						width: 220px;
						float: right;
						background: orange;
					}				
				</style>
			

Javascript Code:

				<script type="text/javascript">
					function matchColumns(classname){
						var divs,contDivs,maxHeight,divHeight,d;   
						// get all <div> elements in the document
						divs=document.getElementsByTagName('div');
						contDivs=[];
						// initialize maximum height value
						maxHeight=0;
						// iterate over all <div> elements in the document
						for(var i=0;i<divs.length;i++){
								// make collection with <div> elements with class attribute 'container'
								if(new RegExp("\\b" + classname + "\\b").test(divs[i].className)){
									d=divs[i];
									contDivs[contDivs.length]=d;
									// determine height for <div> element
									if(d.offsetHeight){
										divHeight=d.offsetHeight;                    
									}
									else if(d.style.pixelHeight){
										divHeight=d.style.pixelHeight;                   
									}
									// calculate maximum height
									maxHeight=Math.max(maxHeight,divHeight);
								}
						}
						// assign maximum height value to all of container <div> elements
						for(var i=0;i<contDivs.length;i++){
							contDivs[i].style.height=maxHeight + "px";
						}
				}
				// Runs the script when page loads
				window.onload=function(){
					if(document.getElementsByTagName){
						 
						matchColumns('column'); // class=maincolumn   
					}
				}			
				</script>
			

 

上面八大种方法就是我今天要跟大家一起分享的等高列的布局方法,他们之间更有千秋,希望能给需要的您带来一定的帮助。篇幅过长,慢慢看吧,上面的代码都是经过测试的,兼容各大浏览器,可以直接复制代码使用。

分享到:
评论

相关推荐

    Web页面中八种创建多列等高(等高列布局)的实现技术

    高度相等列在Web页面设计中永远是一个网页设计师的需求;大家都知道当初Table实现等高列布局是多么的简单,但是我们使用CSS来创建等高列布局并非是那么容易的事情;下面我们就一起来探讨Web页面中的多列等高的实现技术

    自绘ListCtrl控件

    可变高列表头,可设置单元格字颜色和背景颜色

    百家姓2(自动生成).doc

    WORD 利用域公式生成带拼音的百家姓!意在抛砖引玉,解脱繁杂的手工劳动! 赵 (zhào) 带VBA编程,有自动生成表格,增加行,高列宽,增加域代码等技巧。免费给大家用!

    关于__Federico Milano 的电力系统分析工具箱.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    mlab-upenn 研究小组的心脏模型模拟.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    混合图像创建大师matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    中序遍历二叉树-java版本

    在Java中,实现二叉树的中序遍历同样可以通过递归来完成。中序遍历的顺序是:首先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。 在这段代码中,Node类定义了二叉树的节点,BinaryTree类包含一个指向根节点的指针和inOrder方法,用于递归地进行中序遍历。printInOrder方法调用inOrder方法并打印出遍历的结果。 在Main类中,我们创建了一个示例二叉树,并调用printInOrder方法来输出中序遍历的结果。输出应该是:4 2 5 1 3,这表示中序遍历的顺序是左子树(4),然后是根节点(2),接着是右子树的左子树(5),然后是右子树的根节点(1),最后是右子树的右子树(3)。

    无头单向非循环链表的实现(SList.c)

    无头单向非循环链表的实现(函数定义文件)

    两个有序链表的合并pta

    "PTA" 通常指的是一种在线编程平台,例如“Pata”或者某些特定学校或组织的编程练习与自动评测系统。在这种平台或系统中,学生或程序员会提交代码来解决各种问题,然后系统会自动运行并评测这些代码的正确性。 当提到“两个有序链表的合并PTA”时,这通常意味着在PTA平台上解决一个特定的问题,即合并两个有序链表。具体任务可能是给定两个已按升序排序的链表,要求编写代码来合并这两个链表,形成一个新的有序链表。

    在 Matlab 中创建的图形工具可改善航空航天数据的可视化.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    搜索引擎的设计与实现.zip

    搜索引擎的设计与实现

    年公司财务会计岗位工作总结(二).docx

    工作总结,新年计划,岗位总结,工作汇报,个人总结,述职报告,范文下载,新年总结,新建计划。

    【基于Springboot+Vue的Java毕业设计】无人超市管理系统项目实战(源码+录像演示+说明).rar

    【基于Springboot+Vue的Java毕业设计】无人超市管理系统项目实战(源码+录像演示+说明).rar 【项目技术】 开发语言:Java 框架:Spingboot+vue 架构:B/S 数据库:mysql 【演示视频-编号:314】 https://pan.quark.cn/s/8dea014f4d36 【实现功能】 无人超市管理系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,商品类型管理,支付类型管理,公告类型管理,商品信息管理,出入库管理,出入库详情管理,购买管理,购买详情管理,公告信息管理。用户可以注册登录,自助购买,点击购买管理里面收银就可以选择支付类型和商品然后提交,还可以查看购买详情和公告信息。

    电视的半盲图像去模糊问题,.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    公司年会基本流程表.doc

    年会班会资料,节目策划,游戏策划,策划案,策划方案,活动方案,筹办,公司年会,开场白,主持人,策划主题,主持词,小游戏。

    5G智慧港口解决方案.pptx

    在现有省、市港口信息化系统进行有效整合基础上,借鉴新 一代的感知-传输-应用技术体系,实现对码头、船舶、货物、重 大危险源、危险货物装卸过程、航管航运等管理要素的全面感知、 有效传输和按需定制服务,为行政管理人员和相关单位及人员提 供高效的管理辅助,并为公众提供便捷、实时的水运信息服务。 建立信息整合、交换和共享机制,建立健全信息化管理支撑 体系,以及相关标准规范和安全保障体系;按照“绿色循环低碳” 交通的要求,搭建高效、弹性、高可扩展性的基于虚拟技术的信 息基础设施,支撑信息平台低成本运行,实现电子政务建设和服务模式的转变。 实现以感知港口、感知船舶、感知货物为手段,以港航智能 分析、科学决策、高效服务为目的和核心理念,构建“智慧港口”的发展体系。 结合“智慧港口”相关业务工作特点及信息化现状的实际情况,本项目具体建设目标为: 一张图(即GIS 地理信息服务平台) 在建设岸线、港口、港区、码头、泊位等港口主要基础资源图层上,建设GIS 地理信息服务平台,在此基础上依次接入和叠加规划建设、经营、安全、航管等相关业务应用专题数据,并叠 加动态数据,如 AIS/GPS/移动平台数据,逐步建成航运管理处 "一张图"。系统支持扩展框架,方便未来更多应用资源的逐步整合。 现场执法监管系统 基于港口(航管)执法基地建设规划,依托统一的执法区域 管理和数字化监控平台,通过加强对辖区内的监控,结合移动平 台,形成完整的多维路径和信息追踪,真正做到问题能发现、事态能控制、突发问题能解决。 运行监测和辅助决策系统 对区域港口与航运业务日常所需填报及监测的数据经过科 学归纳及分析,采用统一平台,消除重复的填报数据,进行企业 输入和自动录入,并进行系统智能判断,避免填入错误的数据, 输入的数据经过智能组合,自动生成各业务部门所需的数据报 表,包括字段、格式,都可以根据需要进行定制,同时满足扩展 性需要,当有新的业务监测数据表需要产生时,系统将分析新的 需求,将所需字段融合进入日常监测和决策辅助平台的统一平台中,并生成新的所需业务数据监测及决策表。 综合指挥调度系统 建设以港航应急指挥中心为枢纽,以各级管理部门和经营港 口企业为节点,快速调度、信息共享的通信网络,满足应急处置中所需要的信息采集、指挥调度和过程监控等通信保障任务。 设计思路 根据项目的建设目标和“智慧港口”信息化平台的总体框架、 设计思路、建设内容及保障措施,围绕业务协同、信息共享,充 分考虑各航运(港政)管理处内部管理的需求,平台采用“全面 整合、重点补充、突出共享、逐步完善”策略,加强重点区域或 运输通道交通基础设施、运载装备、运行环境的监测监控,完善 运行协调、应急处置通信手段,促进跨区域、跨部门信息共享和业务协同。 以“统筹协调、综合监管”为目标,以提供综合、动态、实 时、准确、实用的安全畅通和应急数据共享为核心,围绕“保畅通、抓安全、促应急"等实际需求来建设智慧港口信息化平台。 系统充分整合和利用航运管理处现有相关信息资源,以地理 信息技术、网络视频技术、互联网技术、移动通信技术、云计算 技术为支撑,结合航运管理处专网与行业数据交换平台,构建航 运管理处与各部门之间智慧、畅通、安全、高效、绿色低碳的智 慧港口信息化平台。 系统充分考虑航运管理处安全法规及安全职责今后的变化 与发展趋势,应用目前主流的、成熟的应用技术,内联外引,优势互补,使系统建设具备良好的开放性、扩展性、可维护性。

    【基于Java+Springboot的毕业设计】线上医院挂号系统(源码+演示视频+说明).rar

    【基于Java+Springboot的毕业设计】线上医院挂号系统(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:Spingboot+vue 架构:B/S 数据库:mysql 【演示视频-编号:300】 https://pan.quark.cn/s/8dea014f4d36 【实现功能】 本次开发的线上医院挂号系统实现了字典管理、论坛管理、会员管理、单页数据管理、医生管理、医生留言管理、医生挂号订单管理、管理员管理等功能。

    年网通营业员个人工作总结.docx

    工作总结,新年计划,岗位总结,工作汇报,个人总结,述职报告,范文下载,新年总结,新建计划。

    财务数据分析模型3.xlsx

    Excel数据看板,Excel办公模板,Excel模板下载,Excel数据统计,数据展示

    最全英语六级真题(从12年到23年总共66个真题)

    最全英语六级真题,从12年到23年总共66个真题。全网最全。

Global site tag (gtag.js) - Google Analytics