使空单元格边框出现的CSS?


Answers:


59

如果我还记得的话,除非在某些IE中存在该单元格,否则它不存在...

如果您可以放置​​一个 (不间断的空格)来填补空白,那通常会起作用。还是您需要纯CSS解决方案?

显然,IE8默认显示单元格,您必须使用隐藏它,empty-cells:hide但是在IE7中它根本不起作用(默认情况下是隐藏的)。


4
纯CSS会很好。我已经在那儿了,但是感觉很脏。:)
Allain Lalonde

2
据我所知,这是唯一的解决方案,这就是我们所做的。
Juan Mendes

12
我不会那样做。而是添加<span style ='width:0px;'> </ span>。放置&nbsp; 放大后,会引起问题与Firefox。
wbkang

2
哇,这是个很棒的小技巧。
定义

44

确保所有单元中都有数据的另一种方法:

   $(document).ready(function() {
      $("td:empty").html("&nbsp;");
    });

5
这很好用,因为您可以将其保存在单独的“ ie.js”文件中,以通过条件注释将其包含在内。就我而言,我不想为IE显示错误更改后端。
Mathew Byrne

谢谢,您在那里救了我几百条条件语句:)
Toms Mikoss 2010年

太棒了!!! 您刚刚为我节省了很多工作!!!希望我能提供的不仅仅是投票!!!
KennyZ 2013年

在我看来,这很像黑客
Leo

31

如果将border-collapse属性设置为collapse,则IE7将显示空白单元格。尽管它也会使边界折叠,所以这可能不是您想要的100%

td {
  border: 1px solid red;
}
table {
  border-collapse: collapse;
}
<html> <head> <title>Border-collapse Test</title> <style type="text/css"> td {
  border: 1px solid red;
}
table {
  border-collapse: collapse;
}
<table>
  <tr>
    <td></td>
    <td>test</td>
    <td>test</td>
  </tr>
  <tr>
    <td>test</td>
    <td></td>
    <td>test</td>
  </tr>
  <tr>
    <td>test</td>
    <td></td>
    <td>test</td>
  </tr>
  <tr>
    <td>test</td>
    <td></td>
    <td />
  </tr>
</table>


我不确定这是否应该被接受,因为正如张贴者所指出的那样,它还有其他副作用,这很可能是不可取的。这也是不正确的,至少就我所能证实的而言。您可以发布指向有效示例的链接吗?
鲍比·杰克

我添加了一个示例HTML文档,该文档甚至在空白单元格上也显示了边框。在IE7,fx3和最新的野生动物园中进行了测试。边框折叠的主要副作用是您不能拥有看起来不错的双边框。此外,无论您如何努力,都无法对丢失的单元格进行样式设置
rpetrich

边界崩溃:崩溃;对我来说很好(在IE7中测试),谢谢:)
nerdess

24

这个问题要求使用CSS解决方案,但是在偶然情况下可以使用HTML解决方案,这里是一个:

尝试将这两个属性添加到表元素中: frame =“ box” Rules =“ all”, 如下所示:

<table border="1" cellspacing="0" frame="box" rules="all">

1
嗯。如果空单元格因为不存在而没有空,则不起作用...(例如,指定一个包含10个td单元格的tr,而其他trs具有100个或1000个td单元格)
Michael

从2018年开始发表评论...这些元素现在被认为已过时。
midoriha_senpai


9

我碰到了这个问题,还没有看到任何真正解决该问题的答案。

由于IE7看不到该单元格的任何内部内容,因此出现了问题。用编程术语来说null,像元是由a生成的,并且像大多数事物一样,您不能将a边界null或对其执行任何操作。浏览器需要具有布局的元素/对象,以便应用边框/布局。

即使是空的<div></div><span></span>不包含任何内容,因此也没有要渲染的内容,从而null再次导致这种情况。

但是,您可以通过提供空的div/span布局属性来诱使浏览器认为该单元格具有内容。最简单的方法是应用CSS样式zoom:1

<table>
   <tr><td>Foo</td>
       <td><span style="zoom:1;"></span></td></tr>
</table>

这种解决方法比使用更好&nbsp;,因为它不会不必要地弄乱屏幕阅读器,并且不会错误地表示单元格的值。在较新的浏览器中,您可以使用empty-cell:<show|hide>替代方法。


注意:代替Tomalak的评论,应该理解hasLayout与无关null,它仅仅是浏览器如何交互和呈现hasLayout的比较,类似于数据库或编程语言如何与null交互。这是很大的努力,但我认为对于那些成为Web设计人员的程序员而言,它可能更容易理解。


1
+1有趣。尽管您的null类比我并不完全相信。
Lightness Races in Orbit

@Tomalak:这是我可以对hasLayout进行的最接近的比较。如果没有元素/对象具有布局,则浏览器(IE)会对它们进行不同的处理,并且在渲染时不会对其及其父级应用很多视觉设置。虽然不是同义词,但我比较宽松地使用了该比较,因为从概念上讲Stack Overflow是一个用于编程问答的论坛,而不一定是Web设计调试-它从此变得越来越大:)您有权利不被说服!
vol7ron 2011年

我测试了{border-bottom:1px纯红色;zoom:1;}在IE7中并没有帮助。边框底部没有出现....
nerdess

@nerdess:您必须创建一个问题并显示您的确切案例。随着浏览器呈现CSS的方式有所不同,您可能还会遇到其他问题。例如,如果您两次设置相同的属性(例如color:blue;color:red;),则其中一些使用第一个读取设置(blue),而另一些使用最后一个设置(red)。不管是否存在边界问题,这些问题都可能会受到影响border-collapse。由于所有这些特质,很难确定您的情况可能会发生什么。
vol7ron 2013年

5

理想情况下,表中不应有任何空单元格。您有一个数据表,并且该特定单元格中没有数据(应使用“-”或“ n / a /”或同等适当的值来指示,或者-如果必须-则建议) ),或者您的单元格需要跨越一列或一行,或者您试图使用应该用于CSS的表格来实现某些布局。

我们可以详细一点吗?


我喜欢这个。清晰度增加。
Allain Lalonde

1
如果您有一个很大的表(成千上万个单元格或更大),而单元格很多而没有内容(75-95%),则空单元格的性能可能更高。
2014年

5

这个问题已经很久了,但在Google中仍然是最好的结果,因此,我将添加发现的内容:

只需添加border-collapse: collapse表格样式即可在IE7中为我解决此问题(并且不影响它们在FF,Chrome等中的显示方式)。

&nbsp;当您可以使用CSS进行修复时,最好避免添加多余的代码来添加一个或其他的间隔元素。


2

我想用CSS不能做到这一点。您需要输入&nbsp; 在每个空白单元格中显示在IE中的边框...


1

仅空单元修复的Firefox(是的,我确实在Firefox中确实存在此问题)IE 7和8仍然有问题。

这在Firefox 3.6.x,IE 7和8,Chrome和Safari中都对我有用:

=============================

table {
*border-collapse: collapse;}

.sampleTD {
empty-cells: show;}

=============================

必须使用*来确保表格样式仅应用于IE浏览器。


使用CSS骇客可能会带来意想不到的后果,因此请注意。另一种方法是使用条件CSS。
跨度

1

如果您不能使用不可破坏的空间,请尝试以下方法:

var tn = document.createTextNode('\ ');
yourContainer.appendChild(ta);

1

我创建一个div样式,该样式具有与单元格背景相同的字体颜色,并编写任何内容(通常为“-”,“ n / a”或“ empty”)以提供单元格内容。如果突出显示该页面,则会显示该页面,但是正常查看时会显示您想要的样子。


如何改善/增加其他13个答案?
random_user_name 2012年

1

我混合使用html和css创建跨浏览器表网格:

html

<table cellspacing="1" style="background-color:#000;" border="0">

的CSS

td{background-color:#fff;}

到目前为止,我还没有看到任何浏览器出现任何问题。


0

由于IE8已经发布,因此在这种情况下,“ IE”不再是一个有用的术语。

IE7总是执行“ empty-cells:show”(或者告诉我... Vista)。IE8在其任何“ Quirks”或“ IE7 Standards”模式下始终执行“ empty-cells:hide”。IE8在“标准”模式下默认为“ empty-cells:show”,并通过CSS支持该属性。

据我所知,其他所有浏览器都已经正确地支持了几年(我知道它是在Firefox 2中添加的)。


0

我是从另一个网站上获取的,但:

.sampletable {
border-collapse: collapse;}

.sampleTD {
empty-cells: show;}

分别用于表和TD元素的CSS。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.