使用CSS和两个inline-block(或其他)DIV标签,是否可能实现这样的效果,而不是使用表格?
表格版本如下(添加了边框以便查看):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<table style="width:100%;">
<tr>
<td style="border:1px solid black;width:100px;height:10px;"></td>
<td style="border:1px solid black;height:10px;"></td>
</tr>
</table>
</body>
</html>
它生成一个带有固定宽度(而不是百分比宽度)的左侧列和一个右侧列,该列会扩展以填充该行的剩余空间。听起来很简单,对吧?此外,由于没有使用"float"属性,因此父容器的高度会适当地扩展以包含内容的高度。--开始抱怨-- 我看过固定宽度侧栏的多列布局的“清除修正”和“至高无上”的实现,它们都很糟糕且复杂。它们会颠倒元素的顺序,使用百分比宽度或使用浮动、负边距属性,以及"left"、"right"和"margin"属性之间的关系也很复杂。此外,这些布局对子像素非常敏感,即使添加一个像素的边框、内边距或外边距也会导致整个布局崩溃并将整个列包装到下一行。例如,即使尝试在一行上放置4个元素,每个元素的宽度设置为25%,四舍五入误差也是一个问题。 --结束抱怨--
我尝试过使用"inline-block"和"white-space:nowrap;",但问题是我无法让第二个元素填充该行的剩余空间。在某些情况下,将宽度设置为"width:100%-(LeftColumWidth)px"之类的值可以解决问题,但是在宽度属性中执行计算并不受支持。
display: table-*
结构之外,没有其他明智的方法可以解决这个问题。虽然这种方法可行,但也不是真正的“更语义化”(它是一个可怕的div
混合体),并且会破坏IE6的兼容性。个人而言,我会坚持使用<table>
,除非有人能想出一个天才简单的想法,可以在不使用<table>
的情况下解决问题。 - Pekka