基于百分比的多列布局
转自 http://www.javaeye.com/topic/785573
多列布局通常分成3种:第一种是每列都是固定宽度的;第二种其中1列是自适应宽度,剩余列是固定宽度;第三种是每都是百分比宽度。现在主要来说一下第三种。我们现在有个需求是页面平均分成左右2个部分。
http://matthewjamestaylor.com/bl ... umn-double-page.htm 已经有了一个解决方案。但是我觉得他的html结构和css还是太复杂了,并且使用position:relative以及float等属性,这些属性在 ie6下会导致影响它们的父元素以及子元素的表现。比如relative的元素在ie6下一定要把他的每层上级父元素都设置为relative,就像感染了病毒一样。
接下来就说说我的方案吧。我这里是主要是使用了display:inline-block的布局。
但是实际上呢?2个元素还是垂直排列的。
为什么呢?注意看dom结构里面d1和d2之间其实是有空白字符的,有换行符和tab缩进。所以浏览器在解析的时候也计算了这些字符的宽度。所以d1、d2再加上这些宽度总宽度就超过了100%所以导致了换行。所以接下来我们就把空白字符去掉。我使用了注释来保留缩进,这样比较容易排列。
这样做已经能够在ie8,firefox,safari,chrome下显示正常了。但是在ie6和ie7下还是会换行。
经过不断的尝试,发现只要把width:50%改成width:49.999999%就能在ie6和ie7下面实现效果。然后再美化一下让d1和d2垂直居上对齐,这个效果就完成了。
最后的代码如下:
多列布局通常分成3种:第一种是每列都是固定宽度的;第二种其中1列是自适应宽度,剩余列是固定宽度;第三种是每都是百分比宽度。现在主要来说一下第三种。我们现在有个需求是页面平均分成左右2个部分。
http://matthewjamestaylor.com/bl ... umn-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>
但是实际上呢?2个元素还是垂直排列的。
www.javaeye.com__c5a6ad01-e29b-3511-ab29-bc1840bccc2b.jpg (17.86 KB, 下载次数: 1)
为什么呢?注意看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>
www.javaeye.com__bcf2d270-2617-3482-a768-fb0728ccc95d.jpg (17.53 KB, 下载次数: 1)
这样做已经能够在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>
www.javaeye.com__56f99c49-f01d-3d10-b3c3-44fbffcfdc35.jpg (16 KB, 下载次数: 2)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论