为啥设置“可见性:隐藏”时表格单元格边框在谷歌浏览器中消失和“边界崩溃:崩溃;”?
Posted
技术标签:
【中文标题】为啥设置“可见性:隐藏”时表格单元格边框在谷歌浏览器中消失和“边界崩溃:崩溃;”?【英文标题】:Why do table cell borders disappear in Google Chrome when setting "visibility:hidden;" and "border-collapse: collapse;"?为什么设置“可见性:隐藏”时表格单元格边框在谷歌浏览器中消失和“边界崩溃:崩溃;”? 【发布时间】:2011-09-22 02:39:24 【问题描述】:我正在尝试使用 CSS 设置 html 表格的样式。我需要能够通过 CSS 隐藏单个单元格的内容,因为在打印布局(或任何其他样式表)中,它们的内容必须是可见的。
该表有一个<thead>
和一个<tbody>
部分,沿着每个<tr>
、<th>
和<td>
,都有一个边框应用于它们,所以不管我隐藏什么,边框(甚至是外部个)将始终显示。
在我的样式表中,我设置了border-collapse: collapse;
,并使用visibility:hidden;
隐藏了我想要隐藏的单元格,这在大多数浏览器上都可以正常工作,除了谷歌浏览器(以及 Firefox 中的一些小显示故障,但我认为它们来自宽度的百分比..)。
我还创建了这种行为的示例:
table.example
width:100%;
border-collapse: collapse;
table.example td
padding: 2px;
table.example .number
text-align:right;
table.example .null
visibility:hidden;
table.example .number.negative
color:red;
table.example .Date
text-align:center;
table.example th
background-color: #dedbde;
table.example, th.example, td.example,.example thead,.example tbody
border: 1px solid #a5a6a5;
#Demo1 .hideme.Col1,
#Demo1 .hideme.Col2
visibility:hidden;
border: 0;
#Demo1
width: 50%;
.Col1
width: 4%;
.Col2, .Col3, .Col4
width: 32%;
<table class="example" id="Demo1">
<thead>
<tr class=" example">
<th class="Col1 example"></th><th class="Col2 example">Title1</th><th class="Col3 example">Title2</th><th class="Col4 example">Title3</th>
</tr>
</thead><tbody>
<tr class="r1 example odd first">
<td class="Col1 example"><img src="image.png" ></td><td class="Col2 example"><a href="#" class="detaillink"> 2865 </a></td><td class="Col3 example Date">10.06.2011</td><td class="Col4 example Date">10.07.2011</td>
</tr><tr class="r2 example even">
<td class="Col1 example"><img src="image.png" ></td><td class="Col2 example"><a href="#" class="detaillink"> 2864 </a></td><td class="Col3 example Date">10.06.2011</td><td class="Col4 example Date">10.07.2011</td>
</tr><tr class="r3 example odd">
<td class="Col1 example hideme"><img src="image.png" ></td><td class="Col2 example hideme"><a href="#" class="detaillink"> 2863 </a></td><td class="Col3 example hideme Date">10.06.2011</td><td class="Col4 example hideme Date">10.08.2011</td>
</tr><tr class="r4 example even">
<td class="Col1 example"><img src="image.png" ></td><td class="Col2 example"><a href="#" class="detaillink"> 2863 </a></td><td class="Col3 example Date">10.06.2011</td><td class="Col4 example Date">10.08.2011</td>
</tr><tr class="r5 example odd">
<td class="Col1 example"><img src="image.png" ></td><td class="Col2 example"><a href="#" class="detaillink"> 2299 </a></td><td class="Col3 example Date">10.05.2011</td><td class="Col4 example Date">10.06.2011</td>
</tr><tr class="r6 example even">
<td class="Col1 example null"></td><td class="Col2 example null"></td><td class="Col3 example Date null"></td><td class="Col4 example Date null"></td>
</tr><tr class="r7 example odd">
<td class="Col1 example"><img src="image.png" ></td><td class="Col2 example"><a href="#" class="detaillink"> 1249 </a></td><td class="Col3 example Date">10.03.2011</td><td class="Col4 example Date">10.04.2011</td>
</tr><tr class="r8 example even">
<td class="Col1 example"><img src="image.png" ></td><td class="Col2 example"><a href="#" class="detaillink"> 1248 </a></td><td class="Col3 example Date">10.03.2011</td><td class="Col4 example Date null"></td>
</tr><tr class="r9 example odd">
<td class="Col1 example"><img src="image.png" ></td><td class="Col2 example null"></td><td class="Col3 example Date">10.02.2011</td><td class="Col4 example Date">10.03.2011</td>
</tr><tr class="r10 example even last">
<td class="Col1 example"><img src="image.png" ></td><td class="Col2 example"><a href="#" class="detaillink"> 563 </a></td><td class="Col3 example Date">10.02.2011</td><td class="Col4 example Date">20.03.2011</td>
</tr>
</tbody>
</table>
如您所见,如果您尝试此代码,它甚至会将所有单元格隐藏到一个小空间的行折叠起来。
这个问题对我当前的项目来说并不是很重要,因为大多数用户都使用 Internet Explorer,但是因为我找不到任何解决方案,而且这个问题将来可能会影响我(我敢肯定其他人已经遇到过这个问题),我真的很想知道为什么会这样。
【问题讨论】:
副手,我认为边框问题是border:0;
样式应用于#Demo1 .hideme.Col1, #Demo1 .hideme.Col2
。至于较短的一排,有些东西告诉我它与可见性有关(即使它应该保留不动产,只是不可见)。
另外,这篇其他 SO 帖子可能会有所帮助:***.com/questions/57002/…
@Brad 我试图删除border: 0
,但它没有改变(至少在 Chrome 中没有)。你对较短的行是正确的,但我似乎找不到解决方法(至少没有什么不是太难看并且适用于所有浏览器)。
@Brad 另一个 SO 帖子帮助我解决了我的另一个问题,谢谢!
【参考方案1】:
更新 1
如果您的 TD 只显示文字,您可以试试这个
文本缩进:-9999px;
不确定浏览器的兼容性,它应该只影响内联元素。无需移除可见性。
在每个单元格中放置一个 div,该 div 将包含您现在在单元格中的元素,然后将 visibility:hidden
设置为仅该 div。
例子
<tr class="r2 example even">
<td class="Col1 example">
<div>
what you want to hide here...
</div>
</td>
</tr>
【讨论】:
好的,这个解决方案听起来很简单(我自己应该想到的......)。可悲的是,它会添加很多标记(表格已经变得非常大,超过一个 MB,它们必须显示 很多 数据),而且感觉有点脏......纯粹的CSS 解决方案会很棒! 从您的代码中,我认为您只在这些单元格内显示文本?如果是这样,你可以把 text-indent:-9999px;对于您不想显示的 TD,但据我所知,这只会影响内联元素。我也不确定浏览器的兼容性。 你说得对,我只显示文本(最多显示一些较小的图标,也是内联的)。好点子!它有效,非常感谢!它甚至会照顾“失踪”<tr>
!你是否也有一些想法如何保持外边界无论如何,但如果两个附近的单元格被隐藏,隐藏它们之间的边界?
你可以添加另一个只指定border-top:1px纯黑色的类;边框底部:1px 纯黑色;右边框:1px 纯黑色;除行中的第一个 TD 之外的所有相邻 TD。那应该做的工作!或者您可以使用边距,但布局肯定会中断;
请注意,如果您只显示文本,您也可以轻松地使用 color:transparent;或颜色:白色; whick 会将 TDs 内的文本显示为透明或白色(如果白色是 TDs 背景的颜色),这样您根本不会注意到它。【参考方案2】:
设置 tr 和 td 的边框似乎可以解决我的问题。
.collateral-tabs .std tr,
.collateral-tabs .std td
border: 1px solid #333;
【讨论】:
以上是关于为啥设置“可见性:隐藏”时表格单元格边框在谷歌浏览器中消失和“边界崩溃:崩溃;”?的主要内容,如果未能解决你的问题,请参考以下文章