扔掉float进行立体式多列布局

先来看一下这样的一个布局:

image

以上布局是典型的一行多列的布局开式。在之前我们要通过div来实现这样的布局,用的最多的就是利用float来进行处理。

在这里来说下别外一种处理方式。就是通过使用positions与z-index与margin: 0 0 0 auto来进行布局。

第一步:定义一个最外层的容器div。

<div></div>

式样:

.outside {
            width: 960px;
            min-width: 960px;
            background-color: orange;
            margin: auto;
            position: relative;
            top: 100px;
            height: 200px;
        }

第二步:在容器div中定义一第列的div。

<div class=”outside”>

<div class=”td_01”>&nbsp;</div>

<div>

css:

.td_01 {
           position: absolute;
           top: 0;
           height: 100px;
           width: 200px;
           background-color: black;
           z-index: 3;
       }
在这里要注意的是内部的这个div将position设置为了absolute。意味着这个div将脱离整个文档流,也就是说不会再受到外部的容器div的约束了。如果想要使其继续受到容器div的约束,办法就是在容器div的样式中将position设为relative或者fixed。在这里设置为relative。

第三步:定义第二列的div

在这一步时不仅是要写一个div,而是要另加一个div来将第三列的div包含进行。让第三列的div在这个div中右对齐。代码如下:

<div class="tdContainer td_02" id=”cellContainer”>
            <div id=”cellDiv”>
                &nbsp;
            </div>
        </div>

css:.td_02 {
            width: 400px;
            background-color: blue;
            z-index: 2;
            position: absolute;
            top: 0;
            height: 100px;
        }

.td_02 div {
            width: 200px;
            margin: 0 0 0 auto;
            background-color: red;
            height: 100%;
        }

看以上代码的css代码,我们将cellContainer来进行absolute定位,让它位于容器div的内从左边开始。其中注意width的值刚好是两个列的宽度总和。cellDiv的样式中width是列的宽度,这里最主要一个是margin:0 0 0 auto;这样设置后,就将这个div相对于cellContainer进行了右对齐。

因为第一列与第二列都是absolute的,所以会出现第二列将第一列覆盖的情况所以这里将第一列的z-index设置的比第二列要高。这样就可以了。第三列同样使用第二列的写法之不过width是列宽的3倍,z-index比第二列要小。这样一级级的排下去。可以实现N列布局。

之所以说是立体式的就是因为z-index。各列是一层叠一层的。就像在垒方块一样。

 

整个的代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>立体式多列布局</title>
    <style type="text/css">
        .outside {
            width: 960px;
            min-width: 960px;
            background-color: orange;
            margin: auto;
            position: relative;
            top: 100px;
            height: 200px;
        }
        .tdContainer {

        }
        .td_01 {
            width: 200px;
            background-color: black;
            z-index: 3;
            position: absolute;
            top: 0;
            height: 100px;
        }
        .td_02 {
            width: 400px;
            background-color: blue;
            z-index: 2;
            position: absolute;
            top: 0;
            height: 100px;
        }
        .td_03 {
            width: 600px;
            background-color: blue;
            z-index: 1;
            position: absolute;
            top: 0;
            height: 100px;
        }
        .tdContainer div {
            width: 200px;
            margin: 0 0 0 auto;
            background-color: red;
            height: 100%;
        }
    </style>
</head>
<body>
    <div class="outside">
        &nbsp;
        <div class="tdContainer td_01">
                &nbsp;
        </div>
        <div class="tdContainer td_02">
            <div>
                &nbsp;
            </div>
        </div>
        <div class="tdContainer td_03">
            <div style="background-color: blueviolet;">
                &nbsp;
            </div>
        </div>
    </div>

</body>
</html>

转载于:https://my.oschina.net/jjfly/blog/132174

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值