我怎么能指定一个 td 标记应该跨越所有列(当时的确切数额列在表中将变量/难以确定当HTML正在呈现的)? w3schools 提到的可以使用 colspan="0", 但它没有说什么浏览器的支持,值(即6个是在我们的列表以支持)。

看来,设置 colspan 一个值大于理论上的数额列为你可能已经将工作,但它不会工作如果你有 table-layout 设置 fixed.是否有任何缺点使用一种自动的布局有一个大号 colspan?是否有更多的正确方法这样做?

有帮助吗?

解决方案

我有IE 7.0,火狐3.0和Chrome 1.0

在合并单元格= “0” 在TD的属性是不会跨越横跨所有TD的任何上述浏览器的

也许不推荐,因为适当的标记的做法,但如果你给一个高合并单元格高于总可能没有价值。在其它行的列,然后在TD将跨越所有列。

<强>当表格的布局CSS属性被设置为固定的,这并不工作。

再一次,这不是完美的解决方案,但似乎在上面提到的3个浏览器版本的工作表时,布局CSS属性的自动的。希望这有助于。

其他提示

只要使用这样的:

colspan="100%"

它适用于火狐3.6,IE 7和Opera 11! (我猜别人,我不能尝试)


警告:如在下面这个评价中提到实际上是一样的colspan="100"。因此,该解决方案将打破用于CSS table-layout: fixed,或超过100个列的表。

如果你想要做一个"标题"的小区,跨越所有列,作为标题为你的桌子,你可能想要使用的标题标记(http://www.w3schools.com/tags/tag_caption.asp / https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption)这个元素是用于这一目的。它的行为就像一个div,但不跨越整个宽度的母体桌(如div会做同样的地位(不试试这个在家里!)), 相反,它跨越宽度表。有一些跨浏览器问题与边界,诸如(很可接受的对我)。不管怎么说,你可以把它看作一个细胞,跨越所有列。内,可以行使通过增加div元素。我不知道如果你能把它插入之间的tr-要素,但这将是一个破解我猜(所以不建议).另一个选择就是瞎搞浮div,但是呸!

<table>
    <caption style="gimme some style!"><!-- Title of table --></caption>
    <thead><!-- ... --></thead>
    <tbody><!-- ... --></tbody>
</table>

不不

<div>
    <div style="float: left;/* extra styling /*"><!-- Title of table --></div>
    <table>
        <thead><!-- ... --></thead>
        <tbody><!-- ... --></tbody>
    </table>
    <div style="clear: both"></div>
</div>

有关IE 6,你要平等合并单元格的列在表中的号码。如果你有5列,那么你会想:colspan="5"

原因在于, IE处理colspans 的不同,它使用HTML 3.2规范:

  

IE实现HTML 3.2定义,它设置colspan=0作为colspan=1

在错误是以及记录

如果您正在使用jQuery(或不介意将它添加),这将完成这项工作比任何这些黑客的更好。

function getMaxColCount($table) {
    var maxCol = 0;

    $table.find('tr').each(function(i,o) {
        var colCount = 0;
        $(o).find('td:not(.maxcols),th:not(.maxcols)').each(function(i,oo) {
            var cc = Number($(oo).attr('colspan'));
            if (cc) {
                colCount += cc;
            } else {
                colCount += 1;
            }
        });
        if(colCount > maxCol) { maxCol = colCount };
    });

    return maxCol;

}

要缓解的执行情况,我装饰任何TD /日我需要与类如“MAXCOL”那么我可以执行以下调整:

$('td.maxcols, th.maxcols').each(function(i,o) {
    $t = $($(o).parents('table')[0]); $(o).attr('colspan',  getMaxColCount($t));
});

如果你觉得这不会为工作,不踩住了答案,在注释中解释,我会更新,如果它可以覆盖的实现。

作为部分答案,这里有几点 colspan="0", ,问题中提到了这一点。

TL;博士版本:

colspan="0" 在任何浏览器中都不起作用。W3Schools 是错误的(像往常一样)。HTML 4 表示 colspan="0" 应该导致一列跨越整个表格,但没有人实现这一点,并且在 HTML 4 之后它从规范中删除了。

一些更多细节和证据:

  • 所有主流浏览器都将其视为等同于 colspan="1".

    这是一个展示这一点的演示;在您喜欢的任何浏览器上尝试一下。

    td {
      border: 1px solid black;
    }
    <table>
      <tr>
        <td>ay</td>
        <td>bee</td>
        <td>see</td>
      </tr>
      <tr>
        <td colspan="0">colspan="0"</td>
      </tr>
      <tr>
        <td colspan="1">colspan="1"</td>
      </tr>
      <tr>
        <td colspan="3">colspan="3"</td>
      </tr>
      <tr>
        <td colspan="1000">colspan="1000"</td>
      </tr>
    </table>

  • HTML 4 规范(现在已经过时,但在提出这个问题时是最新的) 做过 确实说colspan="0" 应被视为跨越所有列:

    值零 (“0”) 表示单元格跨越从当前列到定义该单元格的列组 (COLGROUP) 的最后一列的所有列。

    然而,大多数浏览器从未实现过这一点。

  • HTML 5.0(早在 2012 年就提出了候选推荐)、WhatWG HTML 生活标准(当今的主导标准)以及最新的 W3 HTML 5 规范均不包含上面引用的 HTML 4 的措辞,并且一致认为 colspan 不允许为 0,这种措辞出现在所有三个规范中:

    tdth 元素可能有一个 colspan 指定的内容属性,其值必须是大于零的有效非负整数...

    资料来源:

  • 以下声明来自 问题中链接到的 W3Schools 页面 至少现在是完全错误的:

    只有 Firefox 支持 colspan="0",它有特殊的含义...[It] 告诉浏览器将单元格跨越到列组 (colgroup) 的最后一列

    HTML 4.01 和 HTML5 之间的差异

    没有任何。

    如果您还没有意识到 W3Schools 因其频繁的错误而普遍受到 Web 开发人员的蔑视,请将此视为一个教训。

另一个工作但丑陋的解决方案:colspan="100",其中100是一个值比你需要colspan合计列更大的

根据W3C,所述colspan="0"选项仅对与COLGROUP标签

下面是一个简明ES6溶液(类似于 Rainbabba的回答但没有jQuery的)。

Array.from(document.querySelectorAll('[data-colspan-max]')).forEach(td => {
    let table = td;
    while (table && table.nodeName !== 'TABLE') table = table.parentNode;
    td.colSpan = Array.from(table.querySelector('tr').children).reduce((acc, child) => acc + child.colSpan, 0);
});
html {
  font-family: Verdana;
}
tr > * {
  padding: 1rem;
  box-shadow: 0 0 8px gray inset;
}
<table>
<thead>
  <tr>
    <th>Header 1</th>
    <th>Header 2</th>
    <th>Header 3</th>
    <th>Header 4</th>
    <th>Header 5</th>
    <th>Header 6</th>
  </tr>
</thead>
<tbod><tr>
  <td data-colspan-max>td will be set to full width</td>
</tr></tbod>
</table>

只想补充我的经验和答案。点击 注意:它只能当你有一个预先定义的tabletrs一个th,但在你的行动态加载(例如通过AJAX)

在这种情况下,你可以指望有你的第一个标题行th的数量,并用它来跨越整个列。

这可以在需要时,当没有结果被发现捎信是必要的。

这样jQuery中的东西,其中table是您的输入表:

var trs = $(table).find("tr");
var numberColumns = 999;
if (trs.length === 1) {
    //Assume having one row means that there is a header
    var headerColumns = $(trs).find("th").length;
    if (headerColumns > 0) {
        numberColumns = headerColumns;
    }
}

根据该规范colspan="0"应导致表宽度TD。

不过,如果你的表的宽度,这是唯一的真!甲表可以包含具有不同宽度的行。因此,该引擎知道,如果你的表格的宽度的唯一情况定义COLGROUP !否则,列跨度的= “0” 的结果是不确定的...

http://www.w3.org /TR/REC-html40/struct/tables.html#adef-colspan

我无法测试它在旧的浏览器,但是这是规范的一部分,因为4.0 ...

也许我是一个直的思想家,但我有点疑惑,难道你不知道你的表的列数?

顺便说IE6不兑现合并单元格=“0”,有或没有限定的COLGROUP。 我试图也使用THEAD和TH以产生列的组,但浏览器不recognlise形式合并单元格=“0”。

我已经在Firefox 3.0在Windows和Linux尝试,它只能与严格的DOCTYPE工作。

可以在

检查几个加油车测试

HTTP:// browsershots .ORG / HTTP://hsivonen.iki.fi/test/wa10/tables/colspan-0.html

我发现这里的测试页面 HTTP://hsivonen.iki .fi /测试/ WA10 /表/列跨度-0.html

编辑:请复制和粘贴的链接,该格式将不接受链接中的双协议部分(或者我没有那么聪明正确格式化)

我有同样的问题 - 如何解决我的问题。把你想在一个TD跨越任何控件

尝试使用“列跨度”而不是“列跨度”。 IE喜驼峰版本...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top