【发布时间】:2014-11-06 14:09:44
【问题描述】:
搜索结果存储在如下表中:
<table>
<tbody>
<tr>
<td>Column One</td>
<td>Column Two</td>
<td>Column Three</td>
</tr>
</tbody>
</table>
实际的表格包含更多的数据(列和行)并且是流动的宽度。由于数据是可变的,我希望table-layout 保持auto,因为它处理自动调整大小(这在javascript 中对于1000 行来说会很昂贵且复杂)。
此表还由实时搜索小部件过滤,该小部件通过添加 display: none; 隐藏与查询不匹配的行。但是,我发现这通常会导致重新计算列宽(通常会导致列宽出现一些不和谐的跳跃)。这是有道理的,因为行可能只包含有display: table-row; 的计算。但这不是我所追求的行为。
是否可以从视图中隐藏<tr>,但仍将其包含在由浏览器在具有table-layout: auto; 的表格上完成的列宽计算中(例如调整大小)?
我尝试过设置height: 0;(和max-height: 0;),但从other SO questions 了解到这不起作用,因为display: table-cell;。同样,设置line-height: 0; 失败,但我认为会失败,因为我的一些列有块内容。
我还考虑过在<td>s 上显式设置宽度,但这会使表格保持流畅(我必须在调整大小时删除显式宽度,这可能会导致宽度跳跃,除非所有行都是可见的,并包含在浏览器的表格调整大小计算中)。
编辑:澄清一下,从视图中隐藏是指隐藏在display: none; 的意义上,而不是visibility: hidden;。如果元素在隐藏时没有保留其原始高度,则后者会起作用,但不幸的是,情况并非如此。
注意:我知道乍一看这似乎是一个非常适用的问题,但我相信这可能是一个常见的用例。因此,我将问题中最适用的部分(阅读:最重要)加粗。其余部分(对我来说有点特殊)比其他任何东西都更具解释性。
【问题讨论】:
-
通常在计算之前暂时显示它,然后在完成后再次隐藏它应该可以解决问题,因为隐藏的对象不会获得任何 CSS 值。因此,首先将其显示设置为块(或内联单元格,或其他),然后返回显示没有通常对我有用。如果您的计算速度很快,就没有闪光。
-
试试
max-height。只是猜测。 -
@torazaburo 这是一个有趣的想法。不幸的是,它遇到了与设置表格行的高度相同的问题。我已经尝试使用
height、visibility: hidden;和overflow: hidden;的组合,但无济于事。
标签: html css html-table