可以用CSS重新排列HTML表格单元格吗?

mu0hgdu0  于 2022-12-30  发布在  其他
关注(0)|答案(5)|浏览(164)

我想知道是否可以只使用CSS来重新排列HTML表格单元格。
比如说这个

------------------------------------------------
|             A            |    B    |    C    |
------------------------------------------------

显示为:

------------------------------------------------
|    C    |             A            |    B    |
------------------------------------------------

或者是这样的:

-------------------------
|           A           |
-------------------------
|     B     |     C     |
-------------------------

这是否仅适用于CSS,或者是否需要修改HTML节点?

**编辑:**你们中的一些人想知道为什么需要这样做,下面是我面临的现实问题:

我想显示用户报告的问题列表:

------------------------------------------------------------------------------
| Problem description (A) | Reporting user (B) | Link to affected entity (C) |
------------------------------------------------------------------------------

我想评估各种布局。第一个布局变体将强调报告用户,第二个将强调文本描述。
我对改变结构没有任何问题,事实上我已经这么做了,但是当我编写这个代码的时候,我想知道是否可以用CSS来做。

j0pj023g

j0pj023g1#

你可以,但这不是最好的做法(见其他答案)。
下面是我的例子:

*{margin:0; padding:0}
.type-a .b {width: 50%; float:left;}
.type-a .a {width:100%; float:left;}
.type-a .c {width: 50%; float:left;}

.type-b .b {width: 25%; float:left;}
.type-b .a {width: 50%; float:right;}
.type-b .c {width: 25%; float:left;}
<table class="type-a" width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="a" style="background-color:#060">A</td>
    <td class="b" style="background-color:#006">B</td>
    <td class="c" style="background-color:#600">C</td>
  </tr>
  <tr>
    <td class="a" style="background-color:#060">A</td>
    <td class="b" style="background-color:#006">B</td>
    <td class="c" style="background-color:#600">C</td>
  </tr>
</table>

<br />
<br />
<table class="type-b" width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="a" style="background-color:#060">A</td>
    <td class="b" style="background-color:#006">B</td>
    <td class="c" style="background-color:#600">C</td>
  </tr>
  <tr>
    <td class="a" style="background-color:#060">A</td>
    <td class="b" style="background-color:#006">B</td>
    <td class="c" style="background-color:#600">C</td>
  </tr>
</table>

View on JSFiddle

toe95027

toe950272#

目前在CSS中没有这样的特性。
CSS3将以这样或那样的形式提供flexbox model(目前W3C正在积极开发它),它应该允许你做你想做的事情。

omvjsjqw

omvjsjqw3#

十多年后,我们可以使用现代CSS一起破解一个解决方案。
一开始我考虑使用grid,但我认为这不适合这种情况,因此我将使用嵌套的flexboxes来破解这个表。
让我们先看看表的DOM树:

table
  ├ thead (optional)
  │ ⋮
  ├ tfoot (optional)
  │ ⋮
  └ tbody (one or many)
    ├ tr
    │ ├ td/th
    │ ⋮
    │ └ td/th
    ⋮
    └ tr
      ├ td/th
      ⋮
      └ td/th

theadtfoot内部的结构与tbody相同。
我们将用3层嵌套的弹性框布局替换表格布局:

  • 将具有垂直(即列)弹性框的table元素。这通常具有一个子代(仅tbody),但有时具有两个或三个子代(除tbody外,还有theadtfoot),甚至更多子代(允许多个连续的tbody元素)。
  • 将具有垂直(即列)弹性框的表节要素。子代是表行。
  • 将具有水平(即行)弹性框的表行要素。
  • 对于奖励点,我们可以让这个布局wrap
  • 可以使用order重新排序并使用flexflex-growflex-shrinkflex-basis的简写)调整大小的表格单元格。
  • 自动列宽将是不可能的,所有列都必须事先知道它们的宽度。

查看这段代码(并运行代码段以查看结果)。
x一个一个一个一个x一个一个二个x
这个答案是为了教育价值而作的简短回答,下面的问题留给读者作为练习:

  • tfoot应该出现在tbody之前,但是浏览器应该在所有tbody元素之后显示它。这可以通过使用order属性在这个flexbox中被破解。
  • 具有colspan的单元格将带来一些挑战,但通过添加一些CSS规则可能可以解决这些问题。
  • 带有rowspan的单元格肯定会破坏布局。如果不对HTML进行额外的更改,将很难修复它。
  • border-collapse在此攻击中不受支持,因为我们没有使用CSS表格模型。
  • <caption>在此代码中未实现,但可能很容易得到支持。
  • 此处不支持<colgroup><col>元素。
  • 通过巧妙地使用:nth-child(),我们可以避免向每个表单元格添加类。
bqujaahr

bqujaahr4#

你可以用一种肮脏的方式来做,你可以一直尝试使用浮动功能。
但对于最后的设计,你提供了一个例子,我认为你应该能够发挥左右的宽度(顶部一个应该是宽度:100%;另外2个应为50%)

y53ybaqx

y53ybaqx5#

您可以使用适当的标记(尽管添加了标记)和css.http://jsfiddle.net/jalbertbowdenii/xvBhF/来完成所有这三项操作
公正的警告:我不确定at的处理表格数据的能力有多强,我只想说他们没有,但是不管怎样,如果你要上市,你可能会想看看这个。我相信有一种方法可以处理所有的html属性风格,只在表格样式中出现。

相关问题