【问题标题】:Button with 100% width in table cell prevents auto width of cell in Firefox表格单元格中宽度为 100% 的按钮可防止 Firefox 中的单元格自动宽度
【发布时间】:2023-03-06 00:49:01
【问题描述】:

我想让一个按钮填充表格单元格以使整个单元格可点击。默认情况下,按钮具有自动宽度,因此我必须明确地将其设为 100% 宽度(display: blockdoesn’t work)。但是这样做会使单元格不再识别自己的宽度。在 Firefox 中,当使用overflow: scroll 将表嵌套在容器中时,这是一个问题:

正如您在示例中看到的那样,单元格中的文本从单元格中流出,而单元格太小了。 可见宽度的宽度均匀分布在所有单元格中。在第二个示例中,我用 div 替换了按钮,这没有显示问题:单元格正确地获得了所需的宽度。第三个示例显示了一个更真实的用例,第二行使列更宽(这就是按钮需要有width: 100% 的原因)。

.wrapper {
  width: 250px;
  overflow-x: scroll;
  background: indigo;
  margin-bottom: 1em;
}
.table {
  white-space: nowrap;
}
.table td {
  background: lavender;
}
.table button {
  font: inherit;
  border: 0;
  background: none;
  padding: 0;
  width: 100%;
}
<div class="wrapper">
  <table class="table">
    <tr>
      <td><button>Some long table header A</button></td>
      <td><button>Some long table header B</button></td>
      <td><button>Some long table header C</button></td>
     </tr>
  </table>
</div>

<div class="wrapper">
  <table class="table">
    <tr>
      <td><div>Some long table header A</div></td>
      <td><div>Some long table header B</div></td>
      <td><div>Some long table header C</div></td>
     </tr>
  </table>
</div>

<div class="wrapper">
  <table class="table">
    <tr>
      <td><button>Table header A</button></td>
      <td><button>Table header B</button></td>
      <td><button>Table header C</button></td>
     </tr>
    <tr>
      <td>Some long table content</td>
      <td>Some long table content</td>
      <td>Some long table content</td>
    </tr>
  </table>
</div>

您知道如何使用按钮使单元格具有所需的宽度吗?我现在的替代方法是使用 div 并向它们添加 ARIA 角色,因此它们的行为就像按钮(但感觉有点脏)。

该问题未出现在 Chrome 或 Internet Explorer 中,因此可能有一些与 Firefox 相关的样式添加到按钮中。也许可以使用特定于浏览器的 CSS 属性来禁用它?

【问题讨论】:

  • 我假设您使用的是 Firefox,对吧?因为我在 Chrome 或 IE 中没有发现问题。
  • @JoshCrozier 是的,你是对的。当我发布这篇文章时,我记得在其他浏览器中再次检查它。它似乎是特定于 Firefox 的(这只会使这个问题变得更糟 imo xD)。我已更新问题以反映这一点。
  • 我从你的 CSS 中的 .table 按钮中删除了 width: 100% ,它对我来说很好用!
  • @ChrisG 但是按钮不会填充单元格。因此,如果列中有另一个单元格使列变宽,那么按钮仍将仅填充所需空间,而不是可用空间。
  • 我会创建一个小提琴,看看我是否不能让它工作:)

标签: html css


【解决方案1】:

这似乎是 Firefox 中的一个错误。描述您的问题的错误报告已在此处提交https://bugzilla.mozilla.org/show_bug.cgi?id=332171

看起来它很快就会得到修复,尽管该错误报告中出现了以下事件:

我认为我对错误 823483 的修补程序将解决此问题(因为它们以一种方式扩展怪癖(最大宽度也是)并将其限制在另一种方式(更少的帧类型);后者在这里很重要);只需要完成它们(并弄清楚为什么我写的测试没有全部通过)......

David Baron 于 2016-01-06 21:12:31 PST 回复

目前要获得所需的行为,最简单的更改似乎是:

  • .table button 上将width: 100%; 更改为min-width: 100%;

.wrapper {
  width: 250px;
  overflow-x: scroll;
  background: indigo;
  margin-bottom: 1em;
}
.table {
  white-space: nowrap;
}
.table td {
  background: lavender;
}
.table button {
  font: inherit;
  border: 0;
  background: none;
  padding: 0;
  min-width: 100%;
}
<div class="wrapper">
  <table class="table">
    <tr>
      <td><button>Some long table header A</button></td>
      <td><button>Some long table header B</button></td>
      <td><button>Some long table header C</button></td>
     </tr>
  </table>
</div>

<div class="wrapper">
  <table class="table">
    <tr>
      <td><div>Some long table header A</div></td>
      <td><div>Some long table header B</div></td>
      <td><div>Some long table header C</div></td>
     </tr>
  </table>
</div>

<div class="wrapper">
  <table class="table">
    <tr>
      <td><button>Table header A</button></td>
      <td><button>Table header B</button></td>
      <td><button>Table header C</button></td>
     </tr>
    <tr>
      <td>Some long table content</td>
      <td>Some long table content</td>
      <td>Some long table content</td>
    </tr>
  </table>
</div>

【讨论】:

  • 即将发布! ;)
  • 我接受这个,因为min-width 似乎是问题的原因。我发现this bug 很好地描述了这个问题,并说带有width: 100% 的按钮显然有一个内在的min-width: 0 导致这个问题。因此,明确设置 min-width 将解决此问题。
  • 很好地找到了@HiddenHobbes!在那个上加一个给你!
  • @poke 看起来有几个关于这个问题的错误报告,希望很快就会解决。
  • 该修复程序昨天在 mozilla-central 中发布,而在今天的 Firefox Nightly 版本中,问题就消失了!
猜你喜欢
  • 2011-03-03
  • 2017-03-02
  • 2013-04-26
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多