zoukankan      html  css  js  c++  java
  • 谈谈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

  • 相关阅读:
    c#添加托盘图标右键后显示菜单选项
    mysql workbench修改字段报错
    mysql增删改查语句
    连接win7的mysql很慢解决方法
    uvm_cmdline_processor
    cadence help文件库调出指令 :cdnshelp
    设置开机自动运行vncserver
    Vector bit-select and part-select addressing verilog片选写法
    Verilog三段式状态机描述
    同步FIFO学习
  • 原文地址:https://www.cnblogs.com/heavens/p/4860834.html
Copyright © 2011-2022 走看看