基于百分比的多列布局

    多列布局通常分成3种:第一种是每列都是固定宽度的;第二种其中1列是自适应宽度,剩余列是固定宽度;第三种是每都是百分比宽度。现在主要来说一下第三种。我们现在有个需求是页面平均分成左右2个部分。

    http://matthewjamestaylor.com/blog/perfect-2-column-double-page.htm 已经有了一个解决方案。但是我觉得他的html结构和css还是太复杂了,并且使用position:relative以及float等属性,这些属性在 ie6下会导致影响它们的父元素以及子元素的表现。比如relative的元素在ie6下一定要把他的每层上级父元素都设置为relative,就像感染 了病毒一样。

    接下来就说说我的方案吧。我这里是主要是使用了display:inline-block的布局。

<style>
	.u {				
	    display: inline-block;
	    zoom: 1; *display: inline; /* IE < 8: fake inline-block */
	}
	
	.u-1-2 {
		width: 50%;
	}	
	
	#content_a {
		height: 100px;
		background-color: #336699;
	}	
	
	#content_b {
		height: 50px;
		background-color: #339966;
	}
</style>	
<div>
    <div id="d1" class="u u-1-2">
        <div id="content_a">
        </div>
    </div>
    <div id="d2" class="u u-1-2">
        <div id="content_b">
        </div>
    </div>
</div>

    classname:u 定义了inline-block,classname:u-1-2定义了50%的宽度。所以d1和d2两个元素合在一起是50%,应该就是并排在一起的2个div了。

 

    但是实际上呢?2个元素还是垂直排列的。

 

    为什么呢?注意看dom结构里面d1和d2之间其实是有空白字符的,有换行符和tab缩进。所以浏览器在解析的时候也计算了这些字符的宽度。所以d1、d2再加上这些宽度总宽度就超过了100%所以导致了换行。所以接下来我们就把空白字符去掉。我使用了注释来保留缩进,这样比较容易排列。

<div>
    <div id="d1" class="u u-1-2">
        <div id="content_a">
        </div>
    </div><!-- 避免空白元素
 --><div id="d2" class="u u-1-2">
        <div id="content_b">
        </div>
    </div>
</div>

 

 

    这样,我们在firefox上就得到了想要的效果。

 

 

 

    这样做已经能够在ie8,firefox,safari,chrome下显示正常了。但是在ie6和ie7下还是会换行。

 

    经过不断的尝试,发现只要把width:50%改成width:49.999999%就能在ie6和ie7下面实现效果。然后再美化一下让d1和d2垂直居上对齐,这个效果就完成了。

    最后的代码如下:

 

<style>
	.u {				
	    display: inline-block;
	    zoom: 1; *display: inline; /* IE < 8: fake inline-block */
		vertical-align: top;
	}
	
	.u-1-2 {
		width: 49.9999999%;
	}	
	
	#content_a {
		height: 100px;
		background-color: #336699;
	}	
	
	#content_b {
		height: 50px;
		background-color: #339966;
	}
</style>
<div>
    <div id="d1" class="u u-1-2">
        <div id="content_a">
        </div>
    </div><!-- 避免空白元素
 --><div id="d2" class="u u-1-2">
        <div id="content_b">
        </div>
    </div>
</div>

 

 

效果如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值