【问题标题】:Complex table rowspan and colspan复杂表行跨度和列跨度
【发布时间】:2014-07-27 21:15:25
【问题描述】:

可以通过适当使用 rowspan 和 colspan 在 HTML 表格中重现 Excel 中合并和未合并单元格的任意排列,还是有限制?我已经seen 在这里解决了一些非常复杂的安排,所以我充满希望。

我有一个 8 行 5 列的网格,它被合并到 16 个不同的单元格中,分别代表 8 个部分的标题和内容,标记为 A-H。

这是我试图实现的安排,就像它在 Excel 中的样子(单元格 B2:F9):

这是我如何概念化 HTML 跨度:

以下标记是我的最佳近似值:请注意,红色 div 旨在表示部分内容的任意大小。

JSFiddle

<style>
    table {
        border-spacing: 0;
        width: 1500px;
    }

        table > tbody > tr > td {
            border: 1px solid black;
            vertical-align: top;
            text-align: center;
        }

            table > tbody > tr > td > div {
                margin: 0 auto;
                border: 1px red solid;
            }
</style>
<table>
    <tr id="Row1">
        <td>A
        </td>
        <td colspan="2">B
        </td>
        <td colspan="2">C
        </td>
    </tr>
    <tr id="Row2">
        <td>
            <div style="width: 340px; height: 100px;" />
        </td>
        <td colspan="2" rowspan="3">
            <div style="width: 450px; height: 200px" />
        </td>
        <td colspan="2" rowspan="5">
            <div style="width: 400px; height: 100px" />
        </td>
    </tr>
    <tr id="Row3">
        <td>D
        </td>
    </tr>
    <tr id="Row4">
        <td rowspan="5">
            <div style="width: 340px; height: 100px;" />
        </td>
    </tr>
    <tr id="Row5">
        <td colspan="2">E
        </td>
    </tr>
    <tr id="Row6">
        <td colspan="2">
            <div style="width: 450px; height: 200px;" />
        </td>
    </tr>
    <tr id="Row7">
        <td>F
        </td>
        <td colspan="2">G
        </td>
        <td>H
        </td>
    </tr>
    <tr id="Row8">
        <td>
            <div style="width: 330px; height: 100px" />
        </td>
        <td valign="top" colspan="2">
            <div style="width: 200px; height: 100px" />
        </td>
        <td valign="top">
            <div style="width: 200px; height: 100px" />
        </td>
    </tr>
</table>

它会生成:

我的解决方案有两个问题:

  • 标题“D”(第 3 行)的底部边缘似乎与 标头“E”(第 5 行),标头“D”太高。相反,我认为“A”下方的内容单元格应该缩小以适应 div,将标题“D”向上绘制。
  • 我无法解释为什么超过一半的单元格(B、C、E、F、H)对它们来说太宽了 内容。表格最终比我需要的要宽得多 - 我希望像 G 那样有更多的单元格来适应它们的内容。

不同浏览器的渲染是一致的。我的跨度是否有误,或者由于某种原因无法实现?

【问题讨论】:

    标签: excel html-table


    【解决方案1】:

    现在,您正在让浏览器解释表格中每个单元格的宽度和高度。您需要为每个单元格设置宽度和高度属性来解决您的问题。

    <table>
            <tr id="Row1">
                <td width="340">A
                </td>
                <td colspan="2" width="450">B
                </td>
                <td colspan="2" width="450">C
                </td>
            </tr>
            <tr id="Row2">
                <td width="340" height="100">
                    <div style="width: 340px; height: 100px;" />
                </td>
                <td colspan="2" rowspan="3" width="450">
                    <div style="width: 450px; height: 200px" />
                </td>
                <td colspan="2" rowspan="5" width="400">
                    <div style="width: 400px; height: 100px" />
                </td>
            </tr>
            <tr id="Row3">
                <td>D
                </td>
            </tr>
            <tr id="Row4">
                <td rowspan="5" width="340">
                    <div style="width: 340px; height: 100px;" />
                </td>
            </tr>
            <tr id="Row5">
                <td colspan="2" width="450">E
                </td>
            </tr>
            <tr id="Row6">
                <td colspan="2" width="450">
                    <div style="width: 450px; height: 200px;" />
                </td>
            </tr>
            <tr id="Row7">
                <td>F
                </td>
                <td colspan="2">G
                </td>
                <td>H
                </td>
            </tr>
            <tr id="Row8">
                <td width="350">
                    <div style="width: 350px; height: 100px" />
                </td>
                <td valign="top" colspan="2" width="200">
                    <div style="width: 200px; height: 100px" />
                </td>
                <td valign="top" width="300">
                    <div style="width: 300px; height: 100px" />
                </td>
            </tr>
        </table>
    

    查看更新的fiddle

    【讨论】:

    • 这似乎解决了我的宽度问题。标题“D”的位置和高度如何?无论“A”部分的高度如何,第 3 行和第 5 行似乎仍然“粘”在一起。
    • 在我的电脑上看起来一切正常。您确定它不是特定于浏览器的吗? [dropbox.com/s/jq85tk7khhwkx48/….
    • 你是对的 - 在 Chrome、FF 和 IE10 中都可以。它现在只在 IE 11 中被破坏。嗯。
    • 众所周知,表格会在不同的浏览器中引起问题,这就是为什么人们通常使用更灵活的 div 来代替布局。您是否考虑过使用 div 或表格是必须的?
    • 我可能不得不这样做。我有许多基于 Excel 的布局要建模,而且我也会以这种方式进行修订。我希望这个模型能够与我需要复制的设计紧密耦合。
    【解决方案2】:

    html中的复杂表格程序 这是html代码中的代码复杂表。

    <style>
    
        table > tbody > tr > td {
            border: 5px solid black;
            vertical-align: top;
            text-align: cen`enter code here`ter;
            padding: 10px;
            
        }
        table{
            margin:  25px 50px 75px 100px;
            border: 5px rgb(20, 20, 20) solid;
        }
            #Row1{
            background-color:#7CFC00;
            }
            #Row2{
            background-color:#d6c564;
            }
            #Row3{
            background-color:red;
            }
            #Row4{
            background-color:#DAA520;
            }
            #Row5{
            background-color:#1E90FF;
            }
            #Row6{
            background-color:#f18973;
            }
            #Row7{
            background-color:#C0C0C0;
            }
            #Row8{
            background-color:gray;
            }
        
        </style>
    <!DOCTYPE html>
    
    <body>
        <table>
            <tr id="Row1">
                <td style="font-size:1vw"><b>Row1</b></td>
                <td>
                </td>
                <td colspan="2"><h1>Colmnspan="2"</h1>
                </td>
                <td colspan="2"><h1>Colmnspan="2"</h1>
                </td>
            </tr>
            <tr id="Row2">
                <td style="font-size:1vw"><b>Row2</b></td>
                <td>
                    <div style="width: 340px; height: 100px;" />
                </td>
                <td colspan="2" rowspan="3"><h1>Rowspan="3" Columnspan="2"</h1>
                    <div style="width: 450px; height: 200px" />
                </td>
                <td colspan="2" rowspan="5"><h1>RowSpan "5" Columnspan "2"</h1>
                    <div style="width: 400px; height: 100px" />
                </td>
            </tr>
            <tr id="Row3">
                <td style="font-size:1vw"><b>Row3</b></td>
                <td>
                    <div style="width: 20px; height: 40px;" />
                </td>
            </tr>
            <tr id="Row4">
                <td style="font-size:1vw"><b>Row4</b></td>
                <td rowspan="5"><h1>Rowspan ="5"</h1>
                    <div style="width: 340px; height: 100px;" />
                </td>
            </tr>
            <tr id="Row5">
                <td style="font-size:1vw"><b>Row5</b></td>
                <td colspan="2"><h1>Colmnspan="2"</h1>
                </td>
            </tr>
            <tr id="Row6">
                <td style="font-size:1vw"><b>Row6</b></td>
                <td colspan="2"><h1>Colmnspan="2"</h1>
                    <div style="width: 450px; height: 200px;" />
                </td>
            </tr>
            <tr id="Row7">
                <td style="font-size:1vw"><b>Row7</b></td>
                <td>
                </td>
                <td colspan="2"><h1>Colmnspan="2"</h1>
                </td>
                <td>
                </td>
            </tr>
            <tr id="Row8">
                <td style="font-size:1vw"><b>Row8</b></td>
                <td>
                    <div style="width: 330px; height: 150px" />
                </td>
                <td valign="top" colspan="2">
                    <div style="width: 200px; height: 100px" /><h1>Colmnspan="2"</h1>
                </td>
                <td valign="top">
                    <div style="width: 200px; height: 100px" />
                </td>
            </tr>
        </table>
    </body>
        </html>

    【讨论】:

      猜你喜欢
      • 2020-07-23
      • 1970-01-01
      • 2012-10-24
      • 2011-09-06
      • 1970-01-01
      • 2015-05-18
      • 2011-05-27
      • 2016-11-14
      • 1970-01-01
      相关资源
      最近更新 更多