使用多行跨度时行高不正确

Posted

技术标签:

【中文标题】使用多行跨度时行高不正确【英文标题】:Incorrect row height when using multiple rowspan 【发布时间】:2017-09-02 21:41:16 【问题描述】:

编辑:请考虑我上次编辑的示例。

这一直适用于 Chrome、Edge 或 IE,但从不适用于 Firefox,并且此错误开始出现在 Chrome 的最后一次更新 (57) 中。 当我使用多个行跨度并且某些表格单元格有 2 行或更多行时,连续行高无法正常工作。

老实说,我的英语还在进步中,很难解释,所以我创建了一个示例:

https://codepen.io/anon/pen/xqoZZj

CSS

table 
  border-collapse: collapse;
  border-spacing: 0;
  border: 1px solid #dddddd;


table td, table th 
  border: 1px solid #dddddd;


.column-product 
  width: 30px;

HTML

<table>
  <thead>
    <tr>
      <th class="column-product">Product</th>
      <th>Color</th>
      <th>Qty</th>
      <th>Price</th>
    </tr>
  </thead>
  <tbody>
    <!-- 1st product -->
    <tr>
      <td rowspan="3">Epic Shorts</td>
    </tr>
    <tr>
      <td rowspan="2">Blue</td>
    </tr>
    <tr>
      <td>1</td>
      <td>10.20</td>
    </tr>
    <!-- 2nd product -->
    <tr>
      <td rowspan="5">Cool T-Shirt</td>
    </tr>
    <tr>
      <td rowspan="2">Black</td>
    </tr>
    <tr>
      <td>1</td>
      <td>10.00</td>
    </tr>
    <tr>
      <td rowspan="2">Green</td>
    </tr>
    <tr>
      <td>2</td>
      <td>7.10</td>
    </tr>
  </tbody>
</table>

如您所见,产品“Epic Shorts”只有一种变体 - 但它有 2 行,并且连续行的高度不遵循主行高度。 产品“酷 T 恤”没有出现此问题,因为它有 2 种变体(黑色和绿色)。

理想的结果是什么?

https://codepen.io/anon/pen/MpMyWX

我做的唯一改变是强制行的高度:

<!-- 1st product -->
<tr>
  <td rowspan="3">Epic Shorts</td>
</tr>
<tr>
  <td rowspan="2">Blue</td>
</tr>
<tr style="height: 39px;"> <!-- HERE -->
  <td>1</td>
  <td>10.20</td>
</tr>

老实说,这不是一个可行的解决方案,因为我无法预测主行的高度 - 它是自动的。

它在 Edge 或 Internet Explorer 上正常运行(有点讽刺)。

任何帮助将不胜感激。我会尽力解释得更好。

谢谢。

编辑:显示差异的图像:

编辑:

首先,我感谢所有的答案。其次,我很抱歉,我错过了另一个例子: https://codepen.io/anon/pen/OpeXGY

我添加了“酷 T 恤”的“黑色”的另一种变体,这可能会发生。

【问题讨论】:

我没有看到关于此代码行为的任何问题(或 Chrome 和 Firefox 之间的任何差异)。可以加几张截图吗? 好的,刚刚添加了截图。 这是我的屏幕截图:我在 Firefox 上看到了一些奇怪的东西……但在 Chrome 中没有……imgur.com/a/BW62L(无法在 IE/Edge 上测试) 谢谢@jaumemk。 太棒了,有人刚刚对我的问题投了反对票,甚至没有告诉我原因。我怎样才能学习或取得进步? 【参考方案1】:

您应该阅读一些有关构建表格的基本教程。

您有 4 个标题,也需要四个单元格的 rows(tr)。

您的表格由 4 行组成,1 tr = 1 行。你需要 4 个&lt;tr&gt; 来构建它

rowspan 可以在这里使用一次,例如当 1 个产品有不同的颜色时。

th,td border:1px solid;
<table>
  <thead>
    <tr>
      <th class="column-product">Product</th>
      <th>Color</th>
      <th>Qty</th>
      <th>Price</th>
      <!-- TOTAL : 4 CELLS -->
    </tr>
  </thead>
  <tbody>
    <!-- 1st product -->
    <tr>
      <th>Epic Shorts</th><!-- you can use a header here too -->
      <td>Blue</td>
      <td>1</td>
      <td>10.20</td>
      <!-- TOTAL : 4 CELLS -->
    </tr>
    <!-- 2nd product -->
    <tr>
      <th rowspan="2">Cool T-Shirt</th><!-- will span to next row -->
      <td>Black</td>
      <td>1</td>
      <td>10.00</td>
      <!-- TOTAL : 4 CELLS -->
    </tr>
    <tr>
      <!-- [Cool T-Shirt] is spanning down here -->
      <td>Green</td>
      <td>2</td>
      <td>7.10</td>
      <!-- TOTAL : 4 CELLS (1 spanning)-->
    </tr>
  </tbody>
</table>

【讨论】:

感谢您的宝贵时间。拜托,你能检查我的编辑吗?请理解,您可能不这么认为,但我了解表格的工作原理。这不是我要展示的简单场景,并且根据设计,可以使用表/行跨度。 rowspan 的工作方式总是使这种情况在我工作的所有浏览器(Chrome(Blink/WebKit)、Safari(macOS/ios)、IE、Edge、android 等)中都成为可能,但 Firefox 除外。这不是我错过的东西,或者我需要“阅读一些关于构建表格的基本教程”。 Firefox 自 2008 年以来一直存在关于此错误的问题:bugzilla.mozilla.org/show_bug.cgi?id=431403 @jaumemk 发布了此屏幕截图,显示该错误在 Chrome 和 Linux 上的 Firefox 上都没有发生。 imgur.com/a/BW62L 无论如何,我感谢您抽出时间来帮助我。我希望我们都能从中学到一些东西。 @KimTranjan 你好,刚刚看到你的更新和 codepen:我按照我自己的拙见分叉了它的构建方式:codepen.io/gc-nomade/pen/zZVwNX 一个屏幕阅读器可以帮助你确定你的 go 是否合适标记数据的方法;) @KimTranjan 在 html 中添加了 cmets 来解释为什么我认为这是一个正确的结构。 ;) 谢谢@GCyrillus!

以上是关于使用多行跨度时行高不正确的主要内容,如果未能解决你的问题,请参考以下文章

excel打印时行高不够,部分内容被遮挡。

Flutter Web 行高不一致

初始化网格行高不起作用

DataGridView 设置行高不起作用

Firefox 和 Chrome 中的 CSS 行高不一样

div行高不确定,文字和图片居中