有关表格双层边框的坑

今天刷百度前端学院试题的时候发现了一个奇怪的现象,给table元素的td元素分别加上不同颜色的background-color中间会有一条边框,类似这个样子

有关表格双层边框的坑

由于这一道尴尬的白线实在是影响页面整洁度,所以我考虑试着把边框颜色也填充成backgroung-color中方的颜色,试图得到没有白线的完美表格,添加了表格边框之后(在这里为了凸显差异性,我选择了颜色对比明显的对比色来填充边框颜色)

有关表格双层边框的坑

那道令人尴尬的白色线条依然存在,经过我的仔细分析,问题好像并没有那么简单,下面是我为table,tr,td元素都添加了边框之后显示的

有关表格双层边框的坑

那么问题来了,既然不是边框宽度,白色的框框是什么东西?

通过对度娘的搜索,我发现了border-collapse这个CSS元素,一下为W3C中的介绍:

定义和用法

border-collapse 属性设置表格的边框是否被合并为一个单一的边框,还是象在标准的 HTML 中那样分开显示。

默认值: separate
继承性: yes
版本: CSS2
JavaScript 语法: object.style.borderCollapse="collapse"

可能的值

描述
separate 默认值。边框会被分开。不会忽略 border-spacing 和 empty-cells 属性。
collapse 如果可能,边框会合并为一个单一的边框。会忽略 border-spacing 和 empty-cells 属性。
inherit 规定应该从父元素继承 border-collapse 属性的值。

通过添加border-collapse:collapse;我得到了想要的表格,美滋滋~

有关表格双层边框的坑

你以为到这里就结束了?哈哈哈,结束的话怎么能对得起金牛男爱钻牛角尖的形容呢!

不知道各位看官刚刚有没有注意到border-spacing 和 empty-cells 这两个元素,好奇宝宝又出动了!去W3C瞅瞅这又是啥?

定义和用法

empty-cells 属性设置是否显示表格中的空单元格(仅用于“分离边框”模式)。

注释:某些版本的 IE 浏览器不支持此属性。

说明

该属性定义了不包含任何内容的表单元格如何表示。如果显示,就会绘制出单元格的边框和背景。除非 border-collapse 设置为 separate,否则将忽略这个属性。

默认值: show
继承性: yes
版本: CSS2
JavaScript 语法: object.style.emptyCells="hide"

可能的值

描述
hide 不在空单元格周围绘制边框。
show 在空单元格周围绘制边框。默认。
inherit 规定应该从父元素继承 empty-cells 属性的值。

----------------------------------------------我是分割线-----------------------------------------------------

定义和用法

border-spacing 属性设置相邻单元格的边框间的距离(仅用于“边框分离”模式)。

注释:某些版本的IE浏览器不支持此属性。

说明

该属性指定分隔边框模型中单元格边界之间的距离。在指定的两个长度值中,第一个是水平间隔,第二个是垂直间隔。除非 border-collapse 被设置为 separate,否则将忽略这个属性。尽管这个属性只应用于表,不过它可以由表中的所有元素继承。

默认值: not specified
继承性: yes
版本: CSS2
JavaScript 语法: object.style.borderSpacing="15px"

可能的值

描述
length length

规定相邻单元的边框之间的距离。使用 px、cm 等单位。不允许使用负值。

如果定义一个 length 参数,那么定义的是水平和垂直间距。

如果定义两个 length 参数,那么第一个设置水平间距,而第二个设置垂直间距。

inherit 规定应该从父元素继承 border-spacing 属性的值。

empty-cells属性用于是否显示表格中空表格的边框,好像没什么用处。

border-spacing属性用于设置表格中td与td之间的水平和垂直间距?试试:

有关表格双层边框的坑

好像是这么回事。