Ich habe einen Tisch wie diesen:
<table>
<tfoot>
<tr><td>footer</td></tr>
</tfoot>
<tbody>
<tr><td>Body 1</td></tr>
<tr><td>Body 1</td></tr>
<tr><td>Body 1</td></tr>
</tbody>
<tbody>
<tr><td>Body 2</td></tr>
<tr><td>Body 2</td></tr>
<tr><td>Body 2</td></tr>
</tbody>
<tbody>
<tr><td>Body 3</td></tr>
<tr><td>Body 3</td></tr>
<tr><td>Body 3</td></tr>
</tbody>
</table>
Ich möchte einen gewissen Abstand zwischen die einzelnen Elemente setzen, aber Polsterung und Rand haben keine Auswirkung. Irgendwelche Ideen?
Antworten:
Versuchen Sie dies, wenn es Ihnen nichts ausmacht, keine Grenzen zu haben.
quelle
transparent
als die Rahmenfarbe. Was @SteveAlmond gesagt hat.transparent
Rahmenfarbe die Hintergrundfarbe des Elements, die im Wesentlichen vom Körper des Elements zu unterscheiden ist. Sie müssten den Rand explizit so färben, wie er erscheinen soll (um ihn angeblich unsichtbar zu machen)So etwas funktioniert abhängig von den Anforderungen Ihres Browser-Supports:
quelle
display: table-row;
?Die Leute werden immer kontroverse Meinungen über die Verwendung leerer Tabellenelemente zum Layout einer Seite haben (wie aus der Abwertung dieser Antwort hervorgeht). Ich erkenne das, aber manchmal ist es einfacher, sie so zu verwenden, wenn Sie " schnell und schmutzig " arbeiten.
Ich habe in früheren Projekten leere Zeilen verwendet, um Gruppen von Tabellenzeilen zu platzieren. Ich habe den Spacer-Zeilen eine eigene CSS-Klasse zugewiesen und eine Höhe für diese Klasse definiert, die als oberer und unterer Rand für diese Gruppe von Tabellenzeilen fungiert.
Wenn Ihre Tabellenzellen keine Ränder haben, könnenSie auch eine Höhe für Ihre typische Zelle oder Zeile in Ihrem Stylesheet definieren, die alle Zeilen Ihrer Tabelle gleichmäßig verteilt.quelle
Ich hatte Probleme,
<tbody>
mit::before
Pseudo richtig mehrere Abstände einzuhalten<tr>
, da<td>
ich in einigen Browsern mit Rowspan enthalten war .Grundsätzlich, wenn Sie eine
<tbody>
solche Struktur haben:Und Sie folgen, wer rät, CSS auf
::before
Pseudo-Element wie dieses zu schreiben :Dies wirkt sich auf den Zeilenbereich aus und führt dazu, dass die Tabelle innerhalb des zweiten Bereichs "verliert",
<tr>
wie viele<td>
Zeilenbereiche im ersten vorhanden sind.Wenn also jemand auf diese Art von Problem stößt, besteht die Lösung darin,
::before
Pseudo folgendermaßen zu formatieren:Hier ist eine Geige
quelle
Hier ist eine weitere Möglichkeit, die sich auf Folgendes stützt: Erstes Kind, das nicht in allen Browsern verfügbar ist:
quelle
Einfach einstellen
display
alsblock
und es wird funktionieren.quelle
display:block
Unterbricht die Spaltenausrichtung zwischen zwei Elementen. Sie profitieren nicht mehr von der Tabellenlayout-EngineVon allen oben gegebenen Antworten behalten nur die Antworten von djenson47 die Trennung von Präsentation und Inhalt bei . Der Nachteil der kollabierten Grenze Modell Methode ist , dass Sie nicht mehr die Tabellen verwenden Grenze oder Cellspacing Attribute die einzelnen Zellen zu trennen. Sie könnten argumentieren, dass dies eine gute Sache ist und es einige Problemumgehungen gibt, aber es kann ein Schmerz sein. Also ich denke das erste Kind Methode die eleganteste ist.
Alternativ können Sie auch die Überlaufeigenschaft Ihrer TBODY-Klasse auf etwas anderes als "sichtbar" setzen. Mit dieser Methode können Sie auch ein Modell mit getrennten Rändern beibehalten:
quelle
Da das Auffüllen auf TDs angewendet werden kann, können Sie einen Trick mit dem + -Zeichen ausführen. Dann ist es möglich, den TDs des ersten TR eines Körpers eine obere Polsterung zu geben:
Ich habe "tbody + tbody" hinzugefügt, damit der erste tbody keine obere Polsterung hat. Es ist jedoch nicht erforderlich.
Soweit ich weiß gibt es keine Nachteile :), habe aber die älteren Browser nicht getestet.
quelle
Sie können
border-spacing
in einer Tabelle mit Tabellenzeilengruppen ein Leerzeichen zwischen diesen Gruppen hinzufügen. Ich glaube jedoch nicht, dass es eine Möglichkeit gibt, anzugeben, welche Gruppen voneinander beabstandet sind und welche nicht.CSS
quelle
NEUE ANTWORT
Sie können beliebig viele
<tbody>
Tags verwenden. Ich wusste bis jetzt nicht, dass W3C das in Ordnung war. Um nicht zu sagen, dass meine unten stehende Lösung nicht funktioniert (es funktioniert), aber um das zu tun, was Sie versuchen, weisen Sie Ihre<tbody>
Tag-Klassen zu und verweisen Sie dann<td>
über CSS wie folgt auf ihre einzelnen Tags:und dein HTML also:
Probieren Sie diesen Kerl aus :)
ALTE ANTWORT
Was auch immer Sie tun, fügen Sie KEINE leeren Zeilen ein ...
Sie sollten nicht mehr als 1 tbody-Element in Ihrer Tabelle haben. Sie können das Klassen- oder ID-Attribut in Ihren
<tr>
Elementen festlegen und die entsprechenden<td>
Tags auffüllen:Sie können den oberen und unteren sogar
<tr>
eine zusätzliche Klasse zuweisen, sodass sie nur die oberen bzw. unteren Polster ausführen:und in Ihrem HTML
<tr>
würde Ihr Tag so aussehen:Hoffe das hilft!
quelle
Die Antwort von djensen47 funktioniert hervorragend für neuere Browser. Wie bereits erwähnt, funktioniert IE7 jedoch nicht.
Meine Problemumgehung für dieses Problem zur Unterstützung der älteren Browser bestand darin, den Inhalt jeder Zelle in ein div zu packen. Fügen Sie dann dem Div einen Rand nach oben hinzu.
CSS
Die Höheneinstellung hält die Zellen mindestens 30 Pixel hoch, um zu verhindern, dass die im div verwendeten Zellenfarben um den Text herum kollabieren. Der Rand oben schafft den gewünschten Platz, indem die gesamte Reihe höher gemacht wird.
quelle
Kam darüber hinweg, als ich versuchte, es selbst zu lösen. Ich hatte Erfolg damit, ein
<br>
Tag direkt vor das schließende</tbody>
Tag zu setzen. Es ist eine rein visuelle Lösung, scheint aber auf den meisten von mir getesteten Browsern zu funktionieren.Sollte auch zugänglich sein.
quelle