CSS: Nur Ränder zwischen Tabellenspalten

73

Gibt es eine Möglichkeit, mithilfe von CSS Ränder in einer Tabelle nur zwischen Spalten anzuzeigen (nicht an den Außenkanten)?

dmr
quelle

Antworten:

110

Bearbeiten 2

Erasmus hat unten einen besseren Einzeiler


Nicht ohne knifflige CSS-Selektoren und zusätzliches Markup und dergleichen.

So etwas könnte funktionieren (mit CSS-Selektoren):

table {
    border:none;
    border-collapse: collapse;
}

table td {
    border-left: 1px solid #000;
    border-right: 1px solid #000;
}

table td:first-child {
    border-left: none;
}

table td:last-child {
    border-right: none;
}

Bearbeiten

Um den Kommentar von @ jeroen zu verdeutlichen, brauchen Sie nur Folgendes:

table { border: none; border-collapse: collapse; }
table td { border-left: 1px solid #000; }
table td:first-child { border-left: none; }
rossipedia
quelle
2
Hinweis: IE6-8 unterstützt nicht :last-child(und :first-childlaut quirksmode.org/css/contents.html
ScottS
7
Verwenden Sie einfach einen linken Rand, dann ist der nicht mehr erforderlich :last-child.
Jeroen
@jereon: Stimmt, habe es nicht wirklich durchdacht. Aber der grundlegende Punkt ist der gleiche.
Wikipedia
Mein Kommentar richtete sich hauptsächlich an Scott, um dem von ihm angesprochenen Problem entgegenzuwirken. Ich stimme der Idee Ihrer Antwort voll und ganz zu, Sie können sogar die erste Zeile loswerden, soweit es mich betrifft :-) +1
jeroen
Verwenden Sie selectivizr für ie8: letztes Kind
Neil
98

Ich weiß, dass dies eine alte Frage ist, aber es gibt eine einfache, einzeilige Lösung, die konsistent für Chrome, Firefox usw. sowie für IE8 und höher funktioniert (und größtenteils auch für IE7 - siehe http: //www.quirksmode.org/css/selectors/ für Details):

table td + td { border-left:2px solid red; }


Die Ausgabe ist ungefähr so:

Col1 | Col2 | Col3

Damit funktioniert dies, dass Sie einen Rahmen nur für Tabellenzellen definieren, die an eine andere Tabellenzelle angrenzen. Mit anderen Worten, Sie wenden das CSS auf alle Zellen in einer Reihe mit Ausnahme der ersten an.

Durch Anwenden eines linken Randes auf das zweite bis letzte Kind wird die Linie "zwischen" den Zellen angezeigt.

Erasmus
quelle
2
Dies verdient definitiv Beachtung, da es immer noch gültig und sehr einfach ist
ColdFrog
Wie würden Sie dies im Einklang mit dem HTML tun?
DAE
Ja, das ist definitiv die bessere Lösung 👍
rossipedia
3

Ränder auf Tischen sind immer etwas schuppig. Eine Möglichkeit wäre, jeder Tabellenzelle eine Rand-Rechts-Deklaration hinzuzufügen, mit Ausnahme derjenigen in der Spalte ganz rechts. Wenn Sie einen Tabellenabstand verwenden, funktioniert dies nicht sehr gut.

Eine andere Möglichkeit wäre, ein 1px hohes Hintergrundbild mit den darin enthaltenen Rändern zu verwenden. Dies funktioniert jedoch nur, wenn Sie die Breite jeder Zelle jederzeit garantieren können.

Eine andere Möglichkeit besteht darin, mit colgroup / col zu experimentieren. Dies hatte ziemlich schreckliche Unterstützung Cross-Browser beim letzten Mal, als ich es mir ansah, hätte sich aber seitdem verbessern können: http://www.webmasterworld.com/forum83/6826.htm

Hollsk
quelle
Dies ist ein ziemlich schrecklicher Rat - CSS bietet relativ jungen (IE8 +) eine einfache Möglichkeit, dies elegant zu erreichen.
Maverick
Denken Sie daran, dass diese Antwort (und die Frage) beide aus dem Jahr 2010 stammen, vor einem halben Jahrzehnt, als IE6 noch von vielen Entwicklern aktiv unterstützt wurde. Darüber hinaus waren die CSS-Methoden zum Erreichen von Tabellenrändern zu diesem Zeitpunkt für so gut wie jeden verfügbaren HTML-E-Mail-Renderer nicht möglich. Vielen Dank für die Nekromantie!
Hollsk
Haha, habe das nicht bemerkt, da die akzeptierte Antwort erst vor ein paar Wochen bearbeitet wurde :).
Maverick
2

Ich vereinfache das Problem möglicherweise, aber funktioniert td {border-right: 1px solid red;} für Ihre Tabelleneinrichtung?

DavidT
quelle
Nein, denn dann befindet sich rechts neben der Tabelle ein Rand. Ich möchte keinen Rand am rechten oder linken Rand der Tabelle, nur zwischen Spalten.
dmr
Wenn Sie eine Klasse auf Ihre letzte Spalte anwenden, können Sie die Border-Right-Deklaration aus der letzten entfernen. Es erfordert eine manuelle Anpassung, aber wenn es sich um eine statische Seite handelt, ist dies tatsächlich die beste Lösung.
Hollsk
2

Sie müssen ein border-rightauf den tds setzen und dann die letzten tds in einer Reihe anvisieren, auf die der Rand gesetzt werden soll none. Wege zum Ziel:

  1. Setzen Sie eine Klasse in den letzten tdjeder Zeile und verwenden Sie diese
  2. Wenn es sich um eine festgelegte Anzahl von Zellen handelt und nur auf neuere Brower abzielt, können 3 Zellen breit verwendet werden td + td + td
  3. Oder besser (mit neuen Browsern) td:last-child
ScottS
quelle
2

Ich habe dies in einem Stylesheet für drei Spalten verwendet, die durch vertikale Ränder getrennt sind, und es hat gut funktioniert:

#column-left {
     border-left: 1px solid #dddddd;
}
#column-center {
     /*no border needed/*
}
#column-right {
     border-right: 1px solid #dddddd;
}

Die linke Spalte erhält rechts einen Rand, die rechte Spalte einen linken Rand und die mittlere Spalte wird bereits von links und rechts gepflegt.

Wenn sich Ihre Spalten in einem div / wrapper / table / etc befinden ... vergessen Sie nicht, zusätzlichen Platz hinzuzufügen, um die Breite der Ränder anzupassen.

falsch sortiert
quelle
1

Im Inneren <td>verwendenstyle="border-left:1px solid #colour;"

Mohideen bin Mohammed
quelle
1
Ich denke, der Geist der Frage besteht darin, "CSS zum Gestalten der Tabelle zu verwenden", anstatt CSS an bestimmten Stellen zu platzieren.
Rup
0

Es gibt keine einfache Möglichkeit, dies zu tun, außer etwas wie class = "lastCell" auf dem letzten td in jedem tr zu tun und dann Ihr CSS so einzurichten:

#table td {
    border-right: 5px solid red
}

.lastCell {
    border-right: none;
}
SteveH
quelle
0

Nehmen Sie eine Tabelle mit dem Klassennamen column-bordered-tableund fügen Sie diese unter css hinzu. Dies funktioniert auch mit der bootstrapTabelle

.column-bordered-table thead td {
    border-left: 1px solid #c3c3c3;
    border-right: 1px solid #c3c3c3;
}

.column-bordered-table td {
    border-left: 1px solid #c3c3c3;
    border-right: 1px solid #c3c3c3;
}

.column-bordered-table tfoot tr {
    border-top: 1px solid #c3c3c3;
    border-bottom: 1px solid #c3c3c3;
}

siehe die Ausgabe unten
N: B Sie müssen die Backgorund-Farbe des Tabellenkopfs gemäß Ihren Anforderungen hinzufügen

Geben Sie hier die Bildbeschreibung ein

Soubhagya Kumar Barik
quelle