Betrachten Sie den folgenden HTML-Code:
<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>
Beachten Sie, dass die letzte Zelle im Inline-Stil einen linken und einen rechten Rand hat. Sie (oder zumindest ich) würden erwarten, dass dies sichtbar ist. Im IE ist dies der Fall. In Firefox (6) ist dies jedoch nicht der Fall. Sie können dies lösen durch:
- Position relativ
div.datagrid table tbody
im CSS entfernen - Wechseln
div.datagrid table tbody
zudiv.datagrid table
im CSS - Entfernen des
background-color
Ontable.data td.priceCell
im CSS - Entfernen des
border-collapse
Ondiv.datagrid table
im CSS
Dies ist eine vereinfachte Version unseres Codes. Wir haben es auch gelöst (durch Auswahl von Option 2). Aber ich wundere mich über:
- Ist das ein Fehler in Firefox?
- Ist das ein Fehler im IE?
Und vor allem: Was ist der Grund, warum Firefox die Grenzen nicht anzeigt, wenn das CSS so ist, wie es ist?
border-collapse
Eigenschaft im obigen CSS von derdiv.datagrid table
in dietable.data
selbst verschoben habe , hat es in Ordnung funktioniert. Vielleicht gibt es hier noch jemanden, der erklären kann ... (Ich bin auf Firefox 5)Antworten:
Das sieht für mich wie ein Firefox-Fehler aus. Die Hintergründe malen über die Grenzen; Sie können es sehen, wenn Sie eine durchscheinende Hintergrundfarbe verwenden.
Ich habe https://bugzilla.mozilla.org/show_bug.cgi?id=688556 eingereicht
quelle
Ich bin gerade
background-clip: padding-box
auf dieses Problem gestoßen und habe eine reine CSS-Lösung gefunden: Fügen Sie einfach Ihrtd
Element hinzu.Weitere Informationen finden Sie in diesem Artikel: https://developer.mozilla.org/en-US/docs/CSS/background-clip
quelle
Nur um alles an einem Ort zu platzieren.
Das Problem tritt auf, wenn Sie eine Zelle mit einer relativen Position in einer Tabelle mit reduzierten Rändern haben (wie Boris angegeben und den Fehler https://bugzilla.mozilla.org/show_bug.cgi?id=688556 ausgefüllt hat ).
Dies kann einfach mit CSS gelöst werden, wie von user2342963 angegeben (Hinzufügen eines Hintergrundclips: Auffüllfeld zur Zelle).
Sie können das Problem (mit Firefox) und das Update hier sehen: 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>
quelle
Dies ist ein Fehler in Firefox und hoffentlich wird er bald behoben. In der Zwischenzeit konnte ich dieses Problem für mich beheben, indem ich meine
td
Zellen auf stellteposition: static
. Hoffentlich hilft das jemand anderem.td { position: static; }
quelle
::before
oder::after
auf demselben verwendentd
, werdenposition: static
diese Stile durcheinander gebracht.background-clip: padding-box
ist sicherer.Eine andere mögliche Lösung besteht darin, Colspan-Fehler in Ihrem Tabellen-Markup zu korrigieren.
Anscheinend können Colspan-Fehler bei Verwendung von Border-Collapse dieselben Effekte mit versteckten Rändern verursachen: Collapse;
Ich wurde über http://www.codingforums.com/html-and-css/46049-border-collapse-hiding-some-outside-borders.html zur richtigen Lösung geleitet .
In meine Tabelle hatte ich <th colspan = "9"> geschrieben, als es nur 8 Spalten gab.
Das verursachte einen Fehler (versteckter rechter Rand) in
aber mit rechten Rändern in gerendert
quelle
<thead>
wo ich es haben wollte</thead>
. Das Beheben dieses Tippfehlers hat das Randproblem behoben!Der beste Weg, um dieses Problem zu lösen, besteht darin, so etwas zu tun.
Beachten Sie die Position: relative Eigenschaft in den Elementen "thead" und "tbody", diese sind wichtig. Dies gilt auch für die Eigenschaften "Rahmenkollaps" und "Hintergrundclip". Funktioniert mit der Hintergrundfarbe für alle und abwechselnden Zeilen.
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; } } } } }
quelle
Hinzufügen einer weiteren Lösung für dieses (alte) Problem: Dies ist mir heute passiert, weil ich eine etwas komplizierte Tabelle mit mehreren Personen habe. Das einzige Problem war tatsächlich, dass ich ein geöffnetes tbody-Tag hatte, das nicht geschlossen war. Ich habe dieses Tag gelöscht und die Rahmen wurden wieder angezeigt, ohne dass etwas in meinem CSS geändert werden musste. Zur Verdeutlichung war meine Struktur ungefähr so:
<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>
quelle