`
i_love_sc
  • 浏览: 35846 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

基于百分比的多列布局

    博客分类:
  • css
阅读更多

    多列布局通常分成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>

 

 

效果如下:

 

 

  • 大小: 17.9 KB
  • 大小: 17.5 KB
  • 大小: 16 KB
分享到:
评论
3 楼 lidong2001 2011-03-06  
其实从三层分离的角度说,csser不一定能100%控制后台输出的内容,所以得假定就是有这个空白符。

而这个空白符可以用letter-spacing:-1em;的方式kill掉。
2 楼 nqykl 2010-12-20  
恩 楼主这个发现挺重要的。呵呵
1 楼 slippy 2010-10-21  
多谢分享

相关推荐

    WPF中使用百分比的布局方式

    标题"使用百分比的布局方式"揭示了这个话题的核心,即如何在WPF中实现基于百分比的布局,使元素能够在窗口大小改变时按比例调整自身大小。描述中提到的"Grid比重与Binding的方式"是实现这一目标的两种主要技术。 ...

    行业分类-设备装置-基于固定的界面布局文件实现界面重新布局的方法及系统.zip

    4. **百分比单位**:在布局文件中使用百分比而不是固定像素值,可以使元素的大小随容器大小变化而变化,从而实现更动态的布局。 5. **布局权重**:在某些框架或平台上,如Android的LinearLayout,可以通过分配权重...

    移动端布局之流式布局(百分比布局)

    本文将深入探讨“流式布局”这一主题,它是一种基于百分比的布局方式,能够灵活适应不同屏幕尺寸,实现响应式设计。 流式布局的核心思想是利用百分比而非固定像素来定义元素的宽度,这样可以确保页面在不同分辨率和...

    21种经典的CSS布局

    18. **多列滚动同步布局**:在多列布局中,当用户滚动某一列时,其他列也同步滚动,提供一致的浏览体验。 19. **视口单位布局**:使用vw、vh单位,让元素大小与视口尺寸关联,实现自适应设计。 20. **百分比布局**...

    CSS网站布局实录内含各色css布局样式

    3. 布局模式切换:响应式设计需要根据屏幕尺寸调整布局,如在小屏幕上使用单列布局,在大屏幕上使用多列布局。 四、CSS预处理器 1. SASS/LESS:这些预处理器扩展了CSS的功能,如变量、嵌套规则、混合(mixins)、...

    css布局 之 流式布局-原子风格

    例如,小屏幕设备上可能需要堆叠布局,大屏幕则可以使用多列布局。 在这个项目中,我们可以学习如何使用JavaScript来实现这些功能,并结合HTML5和CSS增强用户体验。HTML5的新特性,如`&lt;section&gt;`、`&lt;article&gt;`等...

    android布局_Android布局_android_

    `TableRow`是表格布局的行,可包含多个列。 5. **网格布局(GridLayout)**:类似于表格布局,但它允许更灵活的行和列配置,可以设置每行和每列的宽度和高度。 6. **约束布局(ConstraintLayout)**:这是Android ...

    10种经典布局和5种居中布局

    4. **栅格布局**:栅格布局类似于网格布局,但更强调列的排列,如960 Grid System,它可以创建多列布局,适用于复杂的网站设计。 5. **响应式图片**:通过CSS的`object-fit`属性或HTML的`srcset`和`sizes`属性,...

    《Div+CSS布局大全》.zip

    8. **浮动与清除**:在早期的Div+CSS布局中,浮动(float)常用于创建多列布局,但可能导致父元素高度塌陷的问题。因此,理解和使用clear属性来清除浮动是必要的。 9. **响应式设计**:随着移动设备的普及,响应式...

    div+css网页标准版式布局大全.rar

    3. **浮动布局**:浮动(float)是早期常用的布局方式,通过设置元素的`float:left`或`float:right`使其在父元素内浮动,常用于创建多列布局。 4. **定位(positioning)**:通过`position`属性(如`static`、`relative...

    三列百分之比布局

    首先,让我们讨论一下基本的三列布局。通常,这种布局可以通过CSS来实现,尤其是当涉及到流式布局(fluid layout)时,我们可以利用百分比单位来定义宽度。例如,如果我们想要创建三个等宽的列,每个列占总宽度的...

    Div+Css网页版式布局

    9. **浮动(Float)**:浮动最初用于创建图文混排,但现在更多地用于创建多列布局。`float: left;` 或 `float: right;` 可以让元素向左或向右浮动,从而让其他元素环绕其周围。 10. **Flexbox布局**:Flexbox是CSS3...

    android框架布局demo

    7. **百分比布局(PercentLayout)**:允许子视图的大小基于父视图的百分比,适应不同屏幕尺寸。 8. **折叠布局(CoordinatorLayout)**:适用于创建具有滚动行为和相互协作的视图,如底部导航栏(BottomNavigation...

    40种XHTML页面布局

    在40种布局中,可能会涵盖单列、双列、多列布局,固定宽度与自适应宽度的组合,顶部导航、侧边栏、底部栏等组件的排列方式,以及各种创新的视觉效果。通过学习和实践这些布局,开发者能够提升对页面布局的理解,提高...

    常用布局源代码

    栅格布局是基于网格的布局系统,通常由等宽的列组成,用于组织内容和保持视觉一致性。栅格系统可以帮助设计师创建结构清晰、易于阅读的页面,常见于新闻网站和杂志风格的布局。 6. 混合布局(Hybrid Layout) 混合...

    关于页面的布局

    4. **栅格布局**:栅格系统是基于行和列的布局,灵感来源于印刷设计。在HTML中,可以使用`&lt;div&gt;`元素创建行和列,然后利用CSS控制每个单元格的宽度和间距。Bootstrap框架就是一个广泛应用的栅格系统实例。 5. **...

    响应式布局

    通过设置断点,我们可以为特定的屏幕尺寸定义不同的布局模式,例如,窄屏设备可能显示一列布局,而宽屏设备则显示多列布局。 3. 灵活的图片与媒体:在响应式设计中,图片和媒体也需要适应不同屏幕尺寸。通常使用`...

    移动Web开发布局(流式布局、flex弹性布局、less+rem+媒体查询布局)

    这为创建多列布局、导航菜单、卡片式布局等提供了便利。关键属性如`display: flex;`用于开启flex容器,`flex-grow`、`flex-shrink`和`flex-basis`控制子元素的伸缩行为,而`align-items`和`justify-content`则用于...

    css布局定位.zip

    7. 多列布局:CSS3的`column-count`和`column-gap`属性可以创建多列布局,适用于杂志样式的设计。 8. 响应式布局:通过媒体查询(`@media`),可以根据设备特征如屏幕宽度调整布局。这有助于实现移动优先的Web设计...

Global site tag (gtag.js) - Google Analytics