展会信息港展会大全

谈谈css左右等高的几个方法
来源:互联网   发布日期:2016-03-25 16:26:54   浏览:1899次  

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

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

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

一、负margin实现

代码如下

复制代码

.row-wrap {

overflow: hidden;

}

.row1, .row2, .row3 {

padding: 10px;

margin-bottom: -1000px;

padding-bottom: 1000px;

}

.row1{

width: 120px;

background: #F2F2F2;

float: left;

}

.row2{

width: 300px;

background: #81C0F2;

color: #FFF;

float: left;

_margin-right: -6px; //fix ie6

}

.row3{

width: 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>

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

二、display:table-cell实现

代码如下

复制代码

.demo {

width: 600px;

}

.cell-wrap {

display:table-row;

overflow:hidden;

}

.cell {

display:table-cell;

width:30%;

margin-bottom:-100px;

padding:1.6%;

*padding-bottom:110px;

background-color:#81C0F2;

*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>

三、使用table布局

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

四、使用javascript动态控制高度

这个也没什么好说的,先获取最外层的高度,然后动态控制里面每列的高度。

五、使用背景伪装等高

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

给容器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),并且可以很容易创建任意列数。

缺点:

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

赞助本站

人工智能实验室

相关热词: 开发 编程 android

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港