谈谈css左右等高的几个方法

左右等高是我们在前面应用中会常碰到了,我们经常希望右边不会因为内容问题而导致不美观了,下面我就整理了一些css等高布局的经典例子希望对各位同学会有所帮助。
 
 

等高布局的使用场景有很多,很多时候为了满足某列的背景或者边框跟外框高度一样,并且不受其他列动态变化高度的影响。一般我会考虑几种方式:

一、负margin实现

 代码如下 复制代码

.row-wrap {
overflow: hidden;
}
.row1, .row2, .row3 {
padding: 10px;
margin-bottom: -1000px;
padding-bottom: 1000px;
}
.row1{
120px;
background: #F2F2F2;
float: left;
}
.row2{
300px;
background: #81C0F2;
color: #FFF;
float: left;
_margin-right: -6px; //fix ie6
}
.row3{
150px;
background: #FF6600;
color: #FFF;
overflow: hidden;
zoom: 1; //触发haslayout
}

<div class="row-wrap">
<div class="row1">
<p>悉尼洲际...</p>
</div>
<div class="row2">
<p>酒店离悉尼海滨...</p>
</div>
<div class="row3">
<p>在砂岩商场...</p>
</div>
</div>

谈谈css左右等高的几个方法

这也是负margin的一个应用。这种方法是有一个缺点,就是当其中有出现锚点的时候,会出现锚点跳转错位的问题。
二、display:table-cell实现

 代码如下 复制代码

.demo {
600px;
}
.cell-wrap {
display:table-row;
overflow:hidden;
}
.cell {
display:table-cell;
30%;
margin-bottom:-100px;
padding:1.6%;
*padding-bottom:110px;

*float:left;
}
.cell-center{
background: #FF6600;
color: #FFF;
}

<div class="demo">
<div class="cell-wrap">
<div class="cell">
...
</div>
<div class="cell cell-center">
...
</div>
<div class="cell">
...
</div>
</div>

谈谈css左右等高的几个方法

三、使用table布局

使用table是最简单而且兼容性最好的。不过如果是主要区域的布局,你可能不会喜欢使用table去做。这就要看个人的取舍和项目的实际需求了。
四、使用javascript动态控制高度

这个也没什么好说的,先获取最外层的高度,然后动态控制里面每列的高度。
五、使用背景伪装等高

这是一种常用的方法,也是一般人最先想到的。使用背景图片通过repeat-y来平铺最外层的背景,达到伪装等高的效果。


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

谈谈css左右等高的几个方法

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

谈谈css左右等高的几个方法

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 {
960px;
margin: 0 auto;
}
.rightWrap {
100%;
float: left;
background: green;
overflow: hidden;
position: relative;
}

.contentWrap {
float: left;
background: orange;
100%;
position: relative;
right: 320px;/*此值等于rightSidebar的宽度*/
}

.leftWrap{
100%;
background: lime;
float:left;
position: relative;
right: 420px;/*此值等于Content的宽度*/
}
#left {
float: left;
220px;
overflow: hidden;
position: relative;
left: 740px;
}
#content {
float: left;
420px;
overflow: hidden;
position:relative;
left: 740px;
}
#right {
float: left;
overflow: hidden;
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),并且可以很容易创建任意列数。

缺点:

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

原文请戳: http://www.android100.org/html/201405/20/11057.html

原文地址:https://www.cnblogs.com/heavens/p/4860834.html