49

根据W3 Schools上的这篇文章,可以像这样在 HTML 中创建一个基本表格:

<table border="1">
    <tr>
        <td>row 1, cell 1</td>
        <td>row 1, cell 2</td>
    </tr>
    <tr>
        <td>row 2, cell 1</td>
        <td>row 2, cell 2</td>
    </tr>
</table>

从上面看,似乎是按行输入数据。

我有一种情况,我需要按列输入所有数据。这样的事情可能吗?

<table border="1">
    <tc>
        <td>row 1, cell 1</td>
        <td>row 2, cell 1</td>
    </tc>
    <tc>
        <td>row 1, cell 2</td>
        <td>row 2, cell 2</td>
    </tc>
</table>
4

6 回答 6

31

在现代浏览器中,您可以通过在 CSS 中重新定义 TR 和 TD 标签行为来实现这一点。鉴于您问题中的 HTML,请附加下一个 CSS 样式:

table {
	display: table;
}
table tr {
	display: table-cell;
}
table tr td {
	display: block;
}
<table border="1">
    <tr>
        <td>row 1, cell 1</td>
        <td>row 2, cell 1</td>
    </tr>
    <tr>
        <td>row 1, cell 2</td>
        <td>row 2, cell 2</td>
    </tr>
</table>

于 2018-08-22T19:51:39.620 回答
24

您可以通过使用表中的表来呈现列中的表...

<table>
<tr>
<td>
    <table>
        <thead>
            <tr>
                <td>column 1 header 1</td>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>column 1 row 1</td>
            </tr>
            <tr>
                <td>column 1 row 2</td>
            </tr>
        </tbody>
    </table>
</td>
<td>
    <table>
        <thead>
            <tr>
                <td>column 2 header 1</td>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>column 2 row 1</td>
            </tr>
            <tr>
                <td>column 2 row 2</td>
            </tr>
        </tbody>
    </table>
</td>
</tr>
</table>
于 2015-12-17T11:39:57.607 回答
19

最好的办法是逐行呈现表格,然后使用 javascript 反转表格

http://jsfiddle.net/CsgK9/2/

以下代码将反转一个表(此示例代码使用 jquery)


    $("table").each(function() {
        var $this = $(this);
        var newrows = [];

        $this.find("tr").each(function(){
            var i = 0;

            $(this).find("td").each(function(){
                i++;
                if(newrows[i] === undefined) { newrows[i] = $(""); }
                newrows[i].append($(this));
            });
        });

        $this.find("tr").remove();
        $.each(newrows, function(){
            $this.append(this);
        });
    });

更新:

这是一个也适用于 th 元素的版本:http: //jsfiddle.net/zwdLj/

于 2013-04-21T01:19:19.450 回答
1

只是通过使用一堆充满 lis 的 uls 来做到这一点,看起来比我能找到的任何东西都要干净。您必须执行一些操作,例如向所有 uls 添加一个类并将其样式设置为显示:inline-table。

@* pseudo html/razor *@
@foreach(var col in columns){
    <ul class='tableColumn'>
        foreach(var data in col){
            <li>data</li>
        }
    </ul>    
}

和一些造型

.tableColumn {
    border: 1px solid;
    display: inline-table;
}
于 2017-11-17T18:59:27.500 回答
0

您始终可以创建一个父元素(表格),然后在表格内您可以创建宽度有限的内联块元素作为您的列,这样您添加到这些子列的任何内容都将遵循向下模式,然后要制作类似网格的图案,只需确保设置列内元素的高度,就像这样使用列表显示内容:

<div id="your_table">
    <span style="width: 25%" id="fist_column"> <ul></ul></span>
    <span style="width: 25%" id="second_column"><ul></ul></span>
    <span style="width: 25%" id="third_column"><ul></ul></span>
    <span style="width: 25%" id="fourth_column"><ul></ul></span>
</div>
于 2020-08-28T15:21:01.173 回答
-2

我处于同样的情况,我必须按列添加数据。但是,这个问题可以通过简单的方法解决。我在这个例子中使用了 twig,但你会很容易得到它。

<table>
<tr>
    <th>id</th>
    <th>title</th>
    <th>ISBN</th>
    <th>author_id</th>
    <th>publisher_id</th>
</tr>

{% for book in books %}   //for loop is used before the <tr> tag
    <tr>
        <td>{{ book.id }}</td>
        <td>{{ book.title }}</td>
        <td>{{ book.isbn }}</td>
        <td>{{ book.publisher.id }}</td>
        <td>{{ book.author.id }}</td>
    {% endfor %}
    </tr>

注意:{{这是要打印的数据}}

于 2017-09-13T10:50:47.180 回答