Рассмотрим следующий HTML:
<html>
<head>
<style>
TABLE.data TD.priceCell
{
background-color: #EEE;
text-align: center;
color: #000;
}
div.datagrid table
{
border-collapse: collapse;
}
div.datagrid table tbody
{
position: relative;
}
</style>
</head>
<body>
<div id="contents" class="datagrid">
<table class="data" id="tableHeader">
<thead>
<tr class="fixed-row">
<th>Product</th>
<th class="HeaderBlueWeekDay">Price</th>
<th class="HeaderBlueWeekDay">Discount</th>
</tr>
</thead>
<tbody>
<tr style="font-style: italic;">
<td>Keyboard</td>
<td class="priceCell">20</td>
<td style="border-right: #3D84FF 1px solid; border-left: #3D84FF 1px solid;" class="priceCell">2</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Обратите внимание, что последняя ячейка имеет левую и правую границу во встроенном стиле. Вы (или, по крайней мере, я) ожидали бы, что это будет видно. В IE это так. Но в Firefox (6) этого нет. Вы можете решить это следующим образом:
- Удаление позиции относительно включения
div.datagrid table tbody
в CSS - Переход
div.datagrid table tbody
наdiv.datagrid table
в CSS - Удаление
background-color
наtable.data td.priceCell
в CSS - Удаление
border-collapse
наdiv.datagrid table
в CSS
Это упрощенная версия нашего кода; мы тоже ее решили (выбрав вариант 2). Но вот что меня интересует:
- Это ошибка Firefox?
- Это ошибка IE?
И особенно: почему Firefox не показывает границы, когда CSS такой, какой он есть?
border-collapse
свойство изdiv.datagrid table
вtable.data
само в CSS выше, все сработало нормально. Может быть, здесь есть кто-то еще, кто может объяснить ... (я использую Firefox 5)Ответы:
Мне это кажется ошибкой Firefox. Фон закрашивает границы; Вы можете увидеть это, если используете полупрозрачный цвет фона.
Я подал https://bugzilla.mozilla.org/show_bug.cgi?id=688556
источник
Просто столкнулся с этой проблемой и пришел к единственному решению css: просто добавьте
background-clip: padding-box
в свойtd
элемент.См. Эту статью для получения дополнительной информации: https://developer.mozilla.org/en-US/docs/CSS/background-clip
источник
Просто собрать все в одном месте.
Проблема возникает, когда у вас есть ячейка с относительной позицией внутри таблицы со свернутыми границами (как указал Борис и заполнил ошибку https://bugzilla.mozilla.org/show_bug.cgi?id=688556 )
Это можно легко решить с помощью CSS, как указано пользователем2342963 (Добавление background-clip: padding-box в ячейку).
Вы можете увидеть проблему (с Firefox) и исправление здесь: http://jsfiddle.net/ramiro_conductiva/XgeAS/
table {border-spacing: 0px;} td {border: 1px solid blue; background-color: yellow; padding: 5px;} td.cellRelative {position: relative;} td.cellRelativeFix {background-clip: padding-box;} table.tableSeparate {border-collapse: separate;} table.tableCollapse {border-collapse: collapse;} <table class="tableSeparate"> <tbody> <tr> <td class="cellRelative">position: relative</td> <td>position: static</td> </tr> </tbody> </table> <table class="tableCollapse"> <tbody> <tr> <td class="cellRelative">position: relative</td> <td>position: static</td> </tr> </tbody> </table> <table class="tableCollapse"> <tbody> <tr> <td class="cellRelative cellRelativeFix">position: relative</td> <td>position: static</td> </tr> </tbody> </table>
источник
Это ошибка в Firefox, и, надеюсь, они скоро ее исправят. Но тем временем я смог решить эту проблему, установив для своих
td
ячеек значениеposition: static
. Надеюсь, это поможет кому-то другому.td { position: static; }
источник
::before
или::after
на одном и том жеtd
,position: static
испортите эти стили.background-clip: padding-box
безопаснее.Другое возможное решение - исправить ошибки colspan в разметке таблицы.
Очевидно, ошибки colspan могут вызывать те же эффекты со скрытыми границами при использовании border-collapse: collapse;
Я был направлен к нужному решению через http://www.codingforums.com/html-and-css/46049-border-collapse-hiding-some-outside-borders.html .
В моей таблице я написал <th colspan = "9">, когда было всего 8 столбцов.
Это вызвало ошибку (скрытая правая граница) в
но отображается с правильными границами в
источник
<thead>
что хотел</thead>
. Исправив эту опечатку, проблема с границами была устранена!Лучший способ решить эту проблему - сделать что-то подобное.
Обратите внимание на свойство position: relative в элементах thead и tbody, они важны. Так же, как и свойства border-collapse и background-clip. Работает с background-color для всех и чередующихся строк.
table { width: 100% !important; border-spacing: 0; border-collapse: unset !important; thead { position: relative; left: -1px; top: -1px; tr { th { background-clip: padding-box; border-top: 1px solid #737373!important; border-left: 1px solid #737373!important; border-right: none !important; border-bottom: none !important; &:last-child { border-right: 1px solid #737373!important; } } } } tbody { position: relative; left: -1px; top: -1px; tr { &:last-child { td { border-bottom: 1px solid #737373!important; } } td { background-clip: padding-box; border-top: 1px solid #737373!important; border-left: 1px solid #737373!important; border-right: none !important; border-bottom: none !important; &:last-child { border-right: 1px solid #737373!important; } } } } }
источник
Добавление другого решения этой (старой) проблемы: это случилось со мной сегодня, потому что у меня довольно сложная таблица с несколькими tbody. Единственная проблема заключалась в том, что у меня был открытый тег tbody, который не был закрыт. Я удалил этот тег, и границы снова появились, без необходимости изменять что-либо в моем CSS. Чтобы уточнить, моя структура была примерно такой:
<table> <thead> <tr><th>Col1</th><th>Col2</th></tr> </thead> <tbody> <tbody> <tr><td>Val1</td><td>Val2</td></tr> <tr><td>Val3</td><td>Val4</td></tr> </tbody> </table>
источник