谈谈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;

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

缺点:

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

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

时间: 2024-10-05 20:58:45

谈谈css左右等高的几个方法的相关文章

【原】谈谈css中关于元素定位的属性(positon&z-index)

position position主要是4种设定: static(默认)如果不设置,默认就是staitc元素.其实就是没有position设定,DOM流安排在哪里就是哪里.所有的相关于位置的设定均无效,意味着left, right, z-index等属性设置了也是白设. relative如果只是设置postion: relative; 和static并没有视觉上的区别,但是,一旦设定了,就指定了对应DOM元素"被定位"了,之后就可以设置一些诸如right,left之类的属性. abso

html学习之CSS控制宽高背景

该笔记为自学html设计笔记,所有知识点为自己整理,如有疑问请浏览十八哥php教程,教程链接,点击这里. 知识梳理:1.html中的<head>和<body>分别为文本网页的头部和主体部分,其中head主要是定义html的类型和属性,比如title是标题部分,meta是机器搜索时的索引:body是html呈现的主体部分,是浏览网页可以看到得那一部分. 2.CSS 的引入方式 ①外部链接一个CSS文件,我们在HTML头部分标明:<link href="css/my.c

谈谈CSS预处理技术中for循环的应用-CSS Sprite

各种新技术的出现,推动着Web前端技术飞速发展,在提升用户体验的同时也方便开发者: 在前端优化时,我们使用CSSSprite技术,把多个图片合在一张图片上,然后通过background-image,background-position来定位现实不同效果,这样来达到减少HTTP请求,毕竟HTTP请求是相当昂贵的,但是HTTP请求是少了,开发人员工作量就大了,要定位图片不是一件很方便的事情,非常麻烦,要一个一个地计算: 其实我们可以有点技巧,让图片排列有点规律,这样可以减少大量时间: 假如我们的图

谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit

开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS 属性,赶紧去补习一下吧. 不断更新,不断更新,不断更新,重要的事情说三遍. 所有题目汇总在我的 Github . 4.从倒影说起,谈谈 CSS 继承 inherit 给定一张有如下背景图的 div: 制作如下的倒影效果: 方法很多,但是我们当然要寻找最快最便捷的方法,至少得是无论图

CSS line-height行高上下居中垂直居中样式属性

DIV CSS line-height行高上下居中属性教程篇常常使用line-height设置内容(图片.文字)行高上下居中样式效果.行高line-height目录(音乐放松椅)line-height行高语法行高应用line-height案例line-height总结一.line-height行高语法 - TOP line-height:22pxdiv{line-height:22px} linet-height样式属性解析图(音乐放松椅)line-height:+数字+单位(在CSS布局中我们

谈谈一些有趣的CSS题目(十五)-- 谈谈 CSS 关键字 initial、inherit 和 unset

原文:谈谈一些有趣的CSS题目(十五)-- 谈谈 CSS 关键字 initial.inherit 和 unset 开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS 属性,赶紧去补习一下吧. 不断更新,不断更新,不断更新,重要的事情说三遍. 谈谈一些有趣的CSS题目(一)-- 左边竖条的实现方法 谈谈一些有趣的CSS题目(

css清除浮动float的三种方法总结【转载自https://my.oschina.net/leipeng/blog/221125】

摘要: css清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?     一.抛一块问题砖(display: block)先看现象: 分析HTML代码结构: <div class="outer">     <div class="div1">1</div>     <div class="div2">2</div>     <div class="div3

谈谈Ext JS的组件——布局的使用方法续二

绝对布局(Ext.layout.container.Absolute) 绝对布局让我回想到了使用Foxpro开发的时候,哪时候的界面布局就是这样,通过设置控件的左上角坐标(x,y)和宽度来进行的,因为输入控件的 高度基本是固定的,所以不需要设置.在可视化编程没有出现之前,开发界面算是个苦差事,因为布局是需要花费不少功夫的,例如想要在已经定义好的组件中插入 一个组件,那就得重新修改插入位置以下的组件的坐标,这工作是比较枯燥无聊的,因而,在没必要的情况下,还是少选择这种布局模式. 绝对布局是使用CS

使用CSS使内容垂直居中的N中方法。

使用css+div使页面内容水平居中的方法大家并不陌生,那么如何使内容垂直居中呢? OK,下面进入正题,不如我们使用做高中数学题时经常用的思想:分情况讨论. 1.当待垂直居中的DIV高宽为已知时: 1.1绝对定位法: CSS: .middle-div{ width:300px; height:200px; position:absolute; left:50%; top:50%; margin:-100px 0 0 -150px } .parent-div{ position:relitive;