我有这段要设置样式的 HTML。html 是一个表格(和实际表格),我想给它一个边框。该元素还有一个 :before 伪元素,我用它在顶角放置一个小三角形。
JSFiddle 在这里。我希望这是有道理的。我尽可能地去掉了标记和 CSS,因为它实际上只是一个大网站的一小部分。
http://jsfiddle.net/GolezTrol/28yDb/2/
现在的问题是,有 2 列的组合,border-collapse: collapse;
在 table 和:before
伪元素上,导致元素的顶部边框部分消失。它只存在于第一列的长度。
您会假设它是位于边框顶部的伪元素,但这个元素非常小,据我所知,这不是问题。我添加visibility: hidden;
了伪元素以确保,我可以告诉三角形已经消失了,但边框仍然不完整。
不幸的是,我无法更改标记,因为这是由 MediaWiki 输出的,但我确实可以完全控制 CSS。
的HTML:
<div id="globalWrapper">
<div id="column-content">
<div class="thumb tright">
<table class="infobox vcard" style="">
<tbody>
<tr>
<th colspan="2" class="fn org" style=""> Example text</th>
</tr>
<tr>
<th>Row head</th>
<td>Content</td>
</tr>
CSS:
/* Generic table styling */
table {
border-collapse: collapse;
/*border-spacing: 0;*/ }
/* The box */
.thumb.tright table.infobox.vcard {
border: 3px solid #fae104;
position: relative;
}
/* Triangle */
.thumb.tright table.infobox.vcard:before {
content: "";
position: absolute;
width: 0;
height: 1px;
border-top: 5px solid transparent;
top: -7px;
border-left: 10px solid #555;
visibility: hidden;
right: -1px; }
我已经发现它在我删除时有效border-collapse: collapse;
,但我不确定这是一个正确的解决方案,即使是,我真的很想解释发生了什么。
顺便提一句。我在 Chrome 29 和 Internet Explorer 10 中都遇到了这个问题。尚未测试其他浏览器。
更新
我发现这也有效,而不是使用 - 或不使用 - 'border-collapse' 来解决问题:
.thumb.tright table.infobox.vcard tbody {
display: block;
}
所以表格本身还是表格,伪元素还在表格上,边框,定位等也是。之前没有样式的tbody现在是块,两个浏览器都解决了问题。我通过反复试验发现了这一点,但仍然不知道其背后的原因。
更新小提琴:http: //jsfiddle.net/GolezTrol/28yDb/9/