添加行时 Firefox 单元格边框呈现错误

Posted

技术标签:

【中文标题】添加行时 Firefox 单元格边框呈现错误【英文标题】:Firefox cell border rendering bug when adding rows 【发布时间】:2019-03-03 21:27:12 【问题描述】:

我有一张带有折叠边框的表格。有些单元格周围有边界。当我向这个表中添加行时,突然给定列中的所有单元格在 Firefox 中都有边框。

CSS 很简单

table 
  border-collapse: collapse;


.has-errors 
  border: 2px solid red;

这里有一个 JSBin 来说明这个问题:https://jsbin.com/jopaxoyesu/edit?html,css,js,output

单击文档会添加行。如果单击一次,就可以了。再次单击,突然该列中的所有单元格都将具有左右边框。这只发生在 Firefox 中。

有什么解决方法?

我不能单独使用边框。 使用'outline'会使边框加倍并且看起来很糟糕。 我不希望强制重新设计,因为我担心性能。我还能做什么?

【问题讨论】:

【参考方案1】:

我知道您提到了不重新设计的偏好,但是到目前为止我发现的唯一解决此问题的方法是删除边框折叠。

table 
/* REMOVED border-collapse*/


.has-errors 
    outline: 2px solid red;
    -moz-outline: 2px solid red;
    outline-offset:-1px;

【讨论】:

请提供正确格式的答案,更正问题的代码可以帮助用户更好地理解答案。【参考方案2】:

是的,问题是边框折叠,但是如果您在表格上使用 cellspacing="0" 并在 css 中使用一个小技巧(如果附近有 2 个或更多.has-errors,则删除左边框),它也适用于火狐!

$(document).on('click', function() 
  $('table').append('<tr><td>1</td><td>1</td><td>1</td></tr>')
);
.has-errors 
  border: 2px solid red;


.has-errors + .has-errors
  border-left: none;
 <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
 
 <table cellspacing="0"> 
    <tr>  
      <td >1</td>
      <td class="has-errors">2</td>
      <td class="has-errors">3</td>
    </tr>
  </table>

【讨论】:

【参考方案3】:

如果你想保持边框折叠,你也可以使用轮廓代替边框

$(document).on('click', function() 
  $('table').append('<tr><td>1</td><td>1</td><td>1</td></tr>')
);
table 
  border-collapse: collapse;


.has-errors 
   outline: 2px solid red;
   -moz-outline: 2px solid red;
   outline-offset:-1px;
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
 
 <table cellspacing="0"> 
    <tr>  
      <td >1</td>
      <td class="has-errors">2</td>
      <td class="has-errors">3</td>
    </tr>
  </table>

【讨论】:

这是使用轮廓偏移的非常聪明的方法,很高兴知道。 outline-offset 在 IE11 中不受支持,但我认为我可以忍受这些用户获得稍微丑陋的体验。谢谢!

以上是关于添加行时 Firefox 单元格边框呈现错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Firefox 不断删除 1px 到表格单元格的边框?

在 Firefox 中不显示边框,表格上的边框折叠,位置:tbody 上的相对或单元格上的背景颜色

将单元格中的边框扩展到内容最高的单元格

UICollectionView:添加单元格后内容偏移错误

如何在 UITableView 中一次添加多个单元格的边框?

Tableview单元格边框没有迅速占据全宽