Considere el siguiente 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>
Observe que la última celda tiene un borde izquierdo y uno derecho en su estilo en línea. Usted (o al menos yo) esperaría que esto fuera visible. En IE, este es el caso. Pero en Firefox (6), esto no es así. Puede resolver esto por:
- Eliminar la posición relativa
div.datagrid table tbody
en el CSS - Cambiar
div.datagrid table tbody
adiv.datagrid table
en el CSS - Extracción del
background-color
sobretable.data td.priceCell
en el CSS - Extracción del
border-collapse
sobrediv.datagrid table
en el CSS
Esta es una versión simplificada de nuestro código; también lo solucionamos (eligiendo la opción 2). Pero lo que me pregunto es:
- ¿Es esto un error en Firefox?
- ¿Es esto un error en IE?
Y especialmente: ¿cuál es la razón por la que Firefox no muestra los bordes cuando el CSS es como está?
border-collapse
propiedad deldiv.datagrid table
en eltable.data
mismo en el CSS anterior, funcionó bien. Tal vez haya alguien más aquí que pueda explicar ... (estoy en Firefox 5)Respuestas:
Esto me parece un error de Firefox. Los fondos se pintan sobre los bordes; puede verlo si usa un color de fondo translúcido.
Presenté https://bugzilla.mozilla.org/show_bug.cgi?id=688556
fuente
Me encontré con este problema y encontré una única solución CSS: solo agregue
background-clip: padding-box
a sutd
elemento.Consulte este artículo para obtener más información: https://developer.mozilla.org/en-US/docs/CSS/background-clip
fuente
Solo para poner todo en un solo lugar.
El problema se produce cuando se tiene una celda con posición relativa dentro de una tabla con bordes colapsados (como Boris indicó y completó el bug https://bugzilla.mozilla.org/show_bug.cgi?id=688556 )
Esto se puede resolver fácilmente usando CSS como lo indica user2342963 (Agregar background-clip: padding-box a la celda).
Puede ver el problema (con Firefox) y la solución aquí: 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>
fuente
Este es un error en Firefox y espero que lo solucionen pronto. Pero mientras tanto, pude solucionar este problema configurando mis
td
celdas enposition: static
. Con suerte, eso ayudará a alguien más.td { position: static; }
fuente
::before
o::after
en el mismotd
,position: static
arruina estos estilos.background-clip: padding-box
Es más seguro.Otra posible solución es corregir los errores de colspan en el marcado de su tabla.
Aparentemente, los errores de colspan pueden causar los mismos efectos con bordes ocultos cuando se usa border-collapse: collapse;
Me dirigieron a la solución correcta a través de http://www.codingforums.com/html-and-css/46049-border-collapse-hiding-some-outside-borders.html .
En mi tabla había escrito <th colspan = "9"> cuando solo había 8 columnas.
Eso provocó un error (borde derecho oculto) en
pero renderizado con bordes derechos en
fuente
<thead>
que quería</thead>
. ¡Arreglar ese error tipográfico solucionó el problema del borde!La mejor manera de resolver este problema es hacer algo como esto.
Tenga en cuenta la posición: propiedad relativa en los elementos "thead" y "tbody", esos son importantes. También lo son las propiedades border-collapse y background-clip. Funciona con background-color en todas las filas y en filas alternas.
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; } } } } }
fuente
Añadiendo otra solución para este (antiguo) problema: esto me pasó hoy, porque tengo una tabla algo complicada con varios tbody. El único problema era que tenía una etiqueta tbody abierta que no estaba cerrada. Eliminé esa etiqueta y reaparecieron los bordes, sin necesidad de cambiar nada en mi CSS. Para aclarar, mi estructura era algo así como:
<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>
fuente