如何通过浮动设计实现类似表格的效果?

3

我通常是一个网络技术爱好者,支持不使用表格进行设计,但现在它有点让我恼火。 :/

我正在尝试实现一个在使用表格时非常容易的东西,但使用浮动元素似乎过于复杂/不可能。请看以下内容:

+-----------------+ +-------+
|                 | |       |
|    #contents    | | #info |
|                 | |       |
|                 | +-------+
+-----------------+

在这个设计中,#info 有固定的宽度,并且必须浮动到 #contents 的右侧。 #contents 应该占据剩余的宽度。

在简单的设计中,#contents#info 都存在时,这并不太复杂。它们都是固定宽度的,具有 float:left 属性,并且非常适合。

然而,在某些页面上,#info 不会出现。当这种情况发生时,显然,#contents 就不能扩展到适合整个页面。

最明显的解决方案是不给 #contents 固定宽度,使其缩放,并将 #info 改为 float:right。除了需要进行一些小的其他更改外,它并没有完全符合期望的行为,因为当 #contents#info 更高时,它会打破列式布局:

+-----------------+ +-------+
|                 | |       |
|    #contents    | | #info |
|                 | |       |
|                 | +-------+
|                 +---------+
|                           |
+---------------------------+

更糟糕的是,在#contents内部,还有其他设置了border-bottom属性的<div>,边框也穿过#info,如下所示:
+-----------------+ +-------+
|                 | |       |
|    #contents    | | #info |
|-----------------|-|-------|
|                 | +-------+
|                 +---------+
|                           |
+---------------------------+

因此,考虑到所有这些因素,我该如何给#info设置固定宽度,使其浮动到#contents右侧,但保持列式设计,并在#info不存在时使#contents占据整个屏幕,同时确保没有视觉伪影,并且不使用超过一个样式表?以下是当#contents#info同时存在于页面上时的期望结果:
+-----------------+ +-------+
|                 | |       |
|    #contents    | | #info |
|-----------------| |       |
|                 | +-------+
|-----------------|
|                 |
+-----------------+

在仅有#contents的页面上,这是期望的结果:

+---------------------------+
|         #contents         |
|---------------------------|
|                           |
|---------------------------|
|                           |
+---------------------------+

希望这不会太令人困惑。我已经无法思考了。


3
http://giveupandusetables.com/ - Ben Zotto
@Ben:那是更好的陈述方式。 :) - zneak
2个回答

0
浮动您的#content div,它可以防止像您正在经历的泄漏,并且在#info消失时会填满整个页面。如果当您没有#info时,可以以某种方式更改#content,#content可能会具有相对位置和一些右填充,在#info中绝对位置以填补其位置。

将#contents设置为float确实可以停止泄漏,但是没有固定的宽度,它会占用所需的所有空间;当#contents可以占据100%的宽度时,这样做会将#info推到其下方而不是旁边。 - zneak

0
我给我的网页老师发了电子邮件询问这个问题,答案很简单。它在Internet Explorer(至少版本6)上不起作用,但对于我的情况,它会很好地降级。
#info设置为float:right,只需将#contents的属性设置为overflow:hidden即可。就这样。

1
为什么不邀请您的Web老师来SO,并让他们赚取自己的声望点数呢?;-) - Wim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接