CSS: Wie erstelle ich eine Lücke zwischen Zeilen in einer Tabelle?

94

Das bedeutet, dass die resultierende Tabelle weniger so aussieht:

[=== ROW ===]
[=== ROW ===]
[=== ROW ===]
[=== ROW ===]

... und mehr davon:

[=== ROW ===]

[=== ROW ===]

[=== ROW ===]

[=== ROW ===]

Ich habe versucht hinzuzufügen

margin-bottom:1em;

zu td und tr bekam aber nichts. Irgendwelche Ideen?

MGOwen
quelle
2
Warum nicht Cellspacing und Cellpadding?
Adatapost
1
Der Zellenabstand gibt auch den Abstand zwischen den Spalten an.
Rahul
4
Cellspacing und Cellpadding sind kein gültiges (X) HTML. Sie sollten sie nicht verwenden.
Freiksenet
8
@freiksenet: Du liegst falsch. Sie sind absolut gültig für striktes HTML4 ( w3.org/TR/html401/struct/tables.html#h-11.2.1 ), XHTML1 ( w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ) und sogar XHTML1 .1 ( w3.org/MarkUp/DTD/xhtml-table-1.mod ).
Mercator
1
Mögliches Duplikat des Leerzeichens zwischen zwei Zeilen in einer Tabelle?
ThisClark

Antworten:

212

Alles was du brauchst:

table {
    border-collapse: separate;
    border-spacing: 0 1em;
}

Dies setzt voraus, dass Sie eine vertikale Lücke von 1em und keine horizontale Lücke wünschen. Wenn Sie dies tun, sollten Sie sich wahrscheinlich auch mit der Steuerung Ihrer Zeilenhöhe befassen.

Seltsam, dass einige der Antworten, die die Leute gaben, einen Grenzkollaps beinhalten: Kollaps, dessen Wirkung genau das Gegenteil von dem ist, wonach die Frage gefragt hat.

John Haugeland
quelle
Oh, richtig, ich habe versucht, eine bestimmte Spalte mit einem größeren Abstand zu versehen, also habe ich nicht daran gedacht, sie auf den Tisch anzuwenden
Jonathan.
4
Mit dieser Lösung können Sie den Abstand nicht selektiv auf bestimmte Zeilen anwenden.
Flimm
15
Die Frage hat das nicht verlangt.
John Haugeland
Dies ist eine gute Idee, aber um die obere Lücke in der ersten Reihe zu füllen, musste ich zu einer Problemumgehung kommen, die nicht Standard ist, aber funktioniert. Das geben thead, tbody {position: relative; top: -{border-spacing-value} }.
Farzad YZ
3
Kann ich sagen, dass ich dich liebe? Oh mein Gott. Sie haben gerade meine $$
gespeichert
93
table {
    border-collapse: collapse;
}

td {
    padding-top: .5em;
    padding-bottom: .5em;
}

Die Zellen reagieren auf nichts, es sei denn, Sie legen zuerst den Randkollaps fest. Sie können TR-Elementen auch Ränder hinzufügen, sobald dies festgelegt ist (unter anderem).

Wenn dies für das Layout gilt, würde ich DIVs und aktuellere Layouttechniken verwenden. Wenn es sich jedoch um tabellarische Daten handelt, sollten Sie sich selbst ausschalten. Ich verwende immer noch Tabellen in meinen Webanwendungen für Daten.

Ryan Florence
quelle
Hast du es getestet? Es scheint, dass td's Polsterung mit oder ohne Zusammenbruch haben können. Rahmen funktionieren mit Zusammenbruch, aber nicht im IE.
Kobi
Das hat funktioniert. Ärgerlich, dass Ränder nicht funktionieren, aber in diesem Fall spielt es keine Rolle. Vielen Dank.
MGOwen
30
Dies ist ein wirklich schlechter Ansatz. Sie ändern das Feld der Zellen, um die Zellen zu positionieren, anstatt nur die Zellen zu positionieren, indem Sie die Zellen zusammenführen, weil Sie möchten, dass sie getrennt sind. In der Sekunde, in der die Zellen Hintergründe benötigen, sind Sie fertig. Der richtige Ansatz ist die Grenztrennung, nicht der Grenzkollaps. Verwenden Sie die Grenztrennung, um die Grenztrennung zu definieren.
John Haugeland
1
Es ist fast das allererste Teil von CSS2, das implementiert wurde, da in Browsern bereits Tabellenlücken für die HTML-Version implementiert waren, die jeder für ein pixelgenaues Layout verwendete. Ja, ich bin sicher. :)
John Haugeland
1
Es ist eine dieser seltsamen Ecken von CSS, von denen niemand außer den Leuten, die die Spezifikation gelesen haben, etwas weiß. (Es gibt eine überraschend große Anzahl von ihnen. Ebenso sollte float grundsätzlich nie so verwendet werden, wie es in der Praxis verwendet wird.)
John Haugeland
7

Wenn keine der anderen Antworten zufriedenstellend ist, können Sie jederzeit eine leere Zeile erstellen und diese mit CSS entsprechend formatieren, um transparent zu sein.

Flimm
quelle
Warum das Downvote? Die anderen Antworten sind problematisch: Für die Antwort von rpflo müssen Sie den Randkollaps verwenden und die Auffüllung der Zellen erweitern, damit die Zellen größer erscheinen, anstatt einen Abstand zwischen ihnen zu schaffen. Mit der Antwort von John Haugeland können Sie den Abstand nicht selektiv auf bestimmte Zeilen anwenden. Ich könnte weitermachen, aber diese Antwort ist eine Option, die für meinen Anwendungsfall funktioniert hat, als keine der anderen Antworten dies tat.
Flimm
2
Der herabgestufte Ansatz des anonymen Benutzers, die Höhe einzelner Zeilen mit CSS anzugeben, ist dem Hinzufügen von Dummy-Inhalten zur Tabelle weit überlegen, da Sie möglicherweise einzelne Zeilen steuern müssen, worum es bei dieser Frage nicht ging.
John Haugeland
Gefälschte Zeilen verwirren auch Tools, die erwarten, dass Tabellenzeilen Tabellenzeilen sind (wie wichtige Eingabehilfen für Behinderte und allgemeine Plugins zum Exportieren / Sortieren / Neuformatieren / usw.). Es gibt viele Gründe, Stile zu verwenden, um das Styling zu steuern, anstatt in der Regel gefälschte Inhalte einzuschieben. Weitere Informationen finden Sie unter Semantic Markup.
MGOwen
@MGOwen Können Sie die Eingabehilfen nennen, die in diesem Szenario fehlschlagen würden, und wie sie fehlschlagen würden? Ich bin jetzt skeptisch gegenüber Ratschlägen zur Barrierefreiheit, in denen keine Einzelheiten erwähnt werden. Es gibt viele schlechte Ratschläge zur Barrierefreiheit, die eigentlich niemandem helfen (z. B. war die Beratung zu Dokumententwürfen für HTML 5 falsch , Barrierefreiheitstools nicht arbeiten so, wie die Leute sagen, dass sie arbeiten).
Flimm
4

Wenn Sie keine Ränder haben oder Ränder haben und den Abstand innerhalb der Zellen möchten, können Sie paddingoder verwenden line-height. Soweit ich weiß, hat der Rand keinen Einfluss auf Zellen und Zeilen.
Eine CSS-Eigenschaft für den Abstand von Zellen ist border-spacing, funktioniert jedoch nicht in IE6 / 7 (Sie können sie also abhängig von Ihrer Menge verwenden).

Wenn alles andere fehlschlägt, können Sie das alte cellspacingAttribut in Ihrem Markup verwenden - dies gibt Ihnen jedoch auch einen Abstand zwischen den Spalten. Einige CSS-Resets empfehlen, dass Sie es trotzdem einstellen, um browserübergreifende Unterstützung zu erhalten:

/ * Tabellen müssen noch cellspacing="0"im Markup * /

Kobi
quelle
2

Dies ist der Weg (ich dachte, es ist unmöglich):

Geben Sie der Tabelle zunächst nur den vertikalen Randabstand (z. B. 5 Pixel) und setzen Sie den horizontalen Randabstand auf 0. Dann sollten Sie jeder Zeilenzelle den richtigen Rand geben. Zum Beispiel sollte die Zelle ganz rechts in jeder Zeile oben, unten und rechts einen Rand haben. Die Zellen ganz links sollten oben, unten und links einen Rand haben. Und die anderen Zellen zwischen diesen beiden sollten nur oben und unten einen Rand haben. Wie dieses Beispiel:

<table style="border-spacing:0 5px; color:black">
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
</table>
Arash Esmaeili
quelle
1

Meiner Meinung nach ist es am einfachsten, Ihrem Tag Polster hinzuzufügen.

td {
 padding: 10px 0
}

Hoffe das wird dir helfen! Jubeln!

Huy Le
quelle
Dies schafft zusätzlichen Platz innerhalb der Tabellenzeile. Wenn die Tabellenzeilen Farben haben, die nicht gut aussehen.
Kokodoko
1

Sie können einfach padding-topund padding-bottomauf einem tdElement verwenden.

Einheit kann alles aus dieser Liste:

Geben Sie hier die Bildbeschreibung ein

Demo-Code:

td
{
  padding-top: 10px;
  padding-bottom: 10px;
}
<table>
  <tr>
    <th>Firstname</th>
    <th>Lastname</th>
  </tr>
  <tr>
    <td>Peter</td>
    <td>Griffin</td>
  </tr>
  <tr>
    <td>Lois</td>
    <td>Griffin</td>
  </tr>
</table>

Abrar Jahin
quelle
0

Das Auffüllen im TD funktioniert, wenn der Raum dieselbe Hintergrundfarbe wie der td haben soll

In meinem Fall war ein Leerraum zwischen der Kopfzeile und dem, was darüber lag, erforderlich

Durch Anwenden dieses Stils auf eine einzelne Zelle konnte ich die gewünschte Trennung erzielen. Es war nicht notwendig, es allen Zellen hinzuzufügen ... Wohl nicht die eleganteste, aber möglicherweise eleganter als Trennzeilen.

<td colspan="10"> 
    <div class="HeaderRow" 
         style="margin-top:10px;">
            <%# Eval("VendorName")%>
     </div>
</td>  
greg
quelle
-1

Wenn Sie sich an das Design mit Tabellen halten, ist es am besten, eine leere Zeile ohne Inhalt und mit der angegebenen Höhe zwischen den einzelnen Zeilen in der Tabelle anzugeben.

Sie können div verwenden, um diese Komplexität zu vermeiden. Geben Sie jedem Div einfach einen Spielraum.

rahul
quelle
1
Es gibt immer noch gute Gründe, Tabellen zu verwenden (z. B. Tabellendaten). Sie haben Recht, leere Zeilen sind sicherlich ein dummer Weg: P Aber es gibt eine Lösung, den Grenzzusammenbruch.
Ryan Florence
-1

Sie können auch einfach die Höhe für jede Zeile mithilfe von CSS ändern.

<head>
 <style>
 tr {
   height:40px;
 }
</style>
</head>

<body>
<table>

<tr> <td>One</td> <td>Two</td> </tr>
<tr> <td>Three</td> <td>Four</td> </tr>
<tr> <td>Five</td> <td>Six</td> </tr>

</table>
</body>

Sie können auch die Höhe des <td>Elements ändern. Es sollte das gleiche Ergebnis liefern.


quelle
-1

Erstellen Sie eine weitere <tr>direkt darunter und fügen Sie dem Inhalt von etwas Platz oder Höhe hinzu<td>

Geben Sie hier die Bildbeschreibung ein

Kasse zum Beispiel die Geige

https://jsfiddle.net/jd_dev777/wx63norf/9/

Jaydeep Chauhan
quelle
Dies wird als schlechte Praxis angesehen. Einer der Gründe ist, dass Tools (wie Leser für behinderte Benutzer) erwarten, dass Tabellenzeilen Tabellenzeilen sind, und Ihre "gefälschten" Zeilen, die mit den echten gemischt sind, exportieren / lesen / interpretieren. Siehe das erste Mal, dass diese Antwort 2014 oben gegeben wurde.
MGOwen
1
@ MGOwen danke für deinen Vorschlag. völlig einverstanden
Jaydeep Chauhan
-4

Fügen Sie tr die folgende Regel hinzu und es sollte funktionieren

float: left

Beispiel (Öffnen Sie es in IE9 offcourse :)): http://jsfiddle.net/zshmN/

BEARBEITEN: Dies ist keine legale oder korrekte Lösung, wie von vielen hervorgehoben, aber wenn Sie keine Option mehr haben und etwas benötigen, funktioniert dies in IE9.

Also alle, die Stimmen abgeben, teilen Sie uns bitte auch die richtige Lösung mit

Sandeep Choudhary
quelle
3
Dieser Ansatz verhindert das automatische Auskleiden von Spalten, wenn Zellen Daten mit unterschiedlichen Dimensionen enthalten - die Tabellenmarkierung ist im Wesentlichen sinnlos. In den Beispielen funktioniert es gut genug, aber es ist keine empfehlenswerte Technik. Ändern Sie den Text einer Zelle, um zu sehen, was ich meine.
Verism
Hey @verism, sorry, aber ich habe deinen Standpunkt nicht verstanden. Kannst du es etwas genauer erklären? Oder wenn Sie eine Geige bereitstellen können, bei der diese Methode fehlschlägt, da ich diese Methode ausgiebig verwendet habe und mich um Szenarien kümmern möchte, bei denen sie fehlschlägt.
Sandeep Choudhary
Es gibt keine klare Abgrenzung der Spalten. Dies bedeutet, dass die tabellarischen Daten ihre visuelle Struktur verlieren und schwerer zu lesen sind. jsfiddle.net/verism/zshmN/5
Verismus
@verism ya das ist ein Problem, aber wir können Spalten mit fester Breite definieren. Ich weiß, dass dies keine gute Lösung ist, aber ich habe keine andere Lösung gefunden, die auf IE9 funktioniert
Sandeep Choudhary
1
Floating-Tabellenzeilen sind gemäß der CSS-Spezifikation nicht zulässig. CSS2-Abschnitt 17 erfordert, dass Anzeige: Tabellenzeilenelemente in Anzeige angezeigt werden: Tabellenzeilengruppen-, Kopfzeilengruppen- oder Fußzeilengruppenelemente. Der Floating-Algorithmus gemäß Abschnitt 9 injiziert jedoch einen anonymen Blockelternteil. Dies bedeutet, dass die Tabellenzeile kein zulässiges übergeordnetes Layout mehr hat und der Browser rät, was zu tun ist. Das ist absolut falsch.
John Haugeland