23

无论我在哪里上网,我都不断地觉得我不应该使用表格。可悲的是,我是少数几个顽固地仍在使用它们的程序员之一——坦率地说,我发现 CSS 的对齐和布局功能对我来说不够强大,冷火鸡,停止使用表格。撇开我个人的程序员特质不谈,我想尝试解决我对 CSS 系统的主要不满之一:

假设我想要这样的布局:

+---+---+
| A | B |
+---+---+
| C | D |
+---+---+

在上面的示例中,我希望 A 和 C 的宽度相同,并且 和 的宽度B保持D相同。

我还希望 和 的高度A保持B锁定在一起,并且我希望C和 D 的高度彼此保持相同。

为了澄清,如果列中的任何元素变宽,我希望该列中的所有元素都变宽。如果一行中的任何元素变得更高,我再次希望同一行中的所有元素也变得更宽。

我刚才描述的是我们的老朋友桌子的确切功能。在我看来,表格对于这些类型的布局非常有用!如果我尝试使用 CSS 布局进行类似的操作,我可能会得到这样的结果:

+-------+---+
|   A   | B |
+---*---*---+
| C |   D   |
+---+-------+

绝不是我正在寻找的那种布局。(AC制作锯齿状的柱子,而不是我更喜欢的完美、光滑的柱子)

简单地说,我真的可以使用一种方法,使用 CSS 布局(而不是预定义的宽度或高度)将一个 CSS 框的边缘位置与不同 CSS 框的边缘位置对齐。如果 CSS 支持这一简单功能,我可以立即永远放弃表格,并创建超出表格功能的布局!这种力量的一个很好但无用的例子是桌子两侧的两个断开的盒子,它们动态地共享完全相同的高度和垂直位置。

但不幸的是,在我在互联网上的搜索中,到目前为止我发现的最先进的对齐方式是居中对齐、左对齐和右对齐。所有与其他元素不相关的对齐类型,使它们无用。

我想要的只是一种无需使用表格就能将 HTML 元素与其他 HTML 元素对齐的方法!

编辑

在为这个问题选择标签时,我遇到了一个几乎总结了所有内容的描述:

相对布局:一个布局,其中子级的位置可以相对于彼此或与父级进行描述。

有 CSS 相对布局吗?或者每当我想这样做时,我是否会被困在使用表格中?

我将接受最接近我想要的功能的答案,而不使用预定的宽度或高度(如果没有其他人提供更好的东西,包括答案“没有类似的存在”)。

4

2 回答 2

9

仅使用 CSS 可以将元素显示为在语义上不是表格的表格。使用该display属性,您可以在标记中有 div 时模仿表格。检查这篇文章

根据您想要实现的目标,有一些替代选项。如果您只希望每列中的两行与列的宽度一致,则应尝试将行放在列标记内,而不是相反。这是在没有预定义尺寸的情况下工作的。

此外,如果为一行中的每个单元格设置相同的高度,您可以简单地将它们浮动到左侧,并将容器宽度设置为行宽的总和。这仅适用于预定义的尺寸。

CSS

div.c
{
    width: 100%;
}

div.c>div:nth-child(2n-1)
{
    width: 25%;
    float: left;
    background: blue;
}

div.c>div:nth-child(2n)
{
    width: 75%;
    float: left;
    background: yellow;
}

这是一个小提琴:http: //jsfiddle.net/kdani3/DbRuV/

一个更复杂的例子:http: //jsfiddle.net/kdani3/DbRuV/1/

我认为这真的很简单,甚至比使用表格布局还要简单。

另外,我真的建议你看看 CSS 网格框架,比如Twitter Bootstrap。这绝对值得一看。

于 2013-04-16T08:16:27.980 回答
4

我认为使用纯 CSS,Width不使用,不使用table你可以使用Flex Layout

这是代码

HTML

<section class="flexrow">
    <div class='item'>1asdf</div>
    <div class='item'>2</div>
</section>
<section class="flexrow">
    <div class='item'>1</div>
    <div class='item'>2</div>
</section>

CSS

.flexrow {
    display: -webkit-flex;
    display: -moz-flex;
    display: -ms-flex;
    display: -o-flex;
    -webkit-justify-content: space-between;
    -moz-justify-content: space-between;
    -ms-justify-content: space-between;
    -o-justify-content: space-between;
    margin-bottom: 10px;
    -webkit-align-items: center;
    -moz-align-items: center;
    -ms-align-items: center;
    -o-align-items: center;
    -webkit-flex: none;
    -moz-flex: none;
    -ms-flex: none;
    -o-flex: none;
}
.item {
    -webkit-flex: 1;
    -moz-flex: 1;
    -ms-flex: 1;
    -o-flex: 1;
    margin: auto 10px;
    border-radius: 5px;
    border:1px solid black;
}

这是JsFiddle

于 2013-04-16T08:22:15.720 回答