Geben Sie einer HTML-Tabellenzeile einen Rahmen, <tr>

84

Ist es möglich, eine Tabellenzeile auf einmal zu begrenzen <tr>, anstatt einzelnen Zellen einen Rand zu geben, <td>wie z.

<table cellpadding="0" cellspacing="0" width="100%" style="border: 1px;" rules="none">
    <tbody>
        <tr>
            <th style="width: 96px;">Column 1</th>
            <th style="width: 96px;">Column 2</th>
            <th style="width: 96px;">Column 3</th>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>

        <tr>
            <td style="border-left: thin solid; border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid; border-right: thin solid;">&nbsp;</td>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>

Dies gibt einen Rand um das Gegebene <tr>, erfordert jedoch einen Rand um einzelne Zellen.

Können wir <tr>nur auf einmal eine Grenze setzen ?

→ jsFiddle

Sehr klein
quelle

Antworten:

117

Sie können borderEigenschaften für ein trElement festlegen , aber gemäß der CSS 2.1-Spezifikation haben solche Eigenschaften keine Auswirkung auf das Modell mit getrennten Rändern, das in Browsern normalerweise die Standardeinstellung ist. Ref.: 17.6.1 Das Modell der getrennten Grenzen . (Der Anfangswert ist nach CSS 2.1, und einige Browser auch nach Standardwert für . Der Nettoeffekt ist sowieso , dass Sie Grenze auf fast allen Browsern , wenn Sie explizit spezifi getrennt werden .)border-collapseseparatetablecollapse

Daher müssen Sie kollabierende Ränder verwenden. Beispiel:

<style>
table { border-collapse: collapse; }
tr:nth-child(3) { border: solid thin; }
</style>
Jukka K. Korpela
quelle
1
@Robert Siemer Es stimmt zwar, dass dies einen Rahmen um Zeilen setzt, aber es erfordert auch "Border-Collapse: Collapse". Auf diese Weise können Spalten mit der Eigenschaft cellpadding nicht voneinander getrennt werden. Die in der folgenden Antwort von csmckelvey verwendete Gliederungseigenschaft bietet eine bessere Kontrolle über das Erscheinungsbild der Tabelle und erreicht genau das gleiche Ziel. Dies sollte nicht die akzeptierte Antwort sein, da dies die Funktionalität zur Erreichung des Ziels unnötig einschränkt.
me_
65

Absolut! Benutz einfach

<tr style="outline: thin solid">

auf welcher Reihe auch immer du magst. Hier ist eine Geige .

Wie bereits erwähnt, können Sie dies natürlich über eine ID, eine Klasse oder auf andere Weise tun, wenn Sie dies wünschen.

Takendarkk
quelle
2
<tr> sollte ein Container sein, kein Element, daher ist die Formatierung seines Kindes durch seinen Stil semantisch nicht korrekt, selbst wenn es funktioniert.
Itay Gal
Google Chrome und Internet Explorer zeigen einen Rahmen um einen, <tr>aber Mozilla Fire Fox zeigt keinen Rand an.
Winzig
Versuchen Sie es mit outlineanstelle von border. Das sollte die Kompatibilität beheben. Ich habe nur Chrome atm, daher kann ich es nicht testen.
Takendarkk
4
Umriss ist keine Grenze.
Jukka K. Korpela
2
Perfekt verständlich. Auf dieser Seite geht es darum, den Leuten die besten Antworten zu geben, nicht meinem Repräsentanten :)
Takendarkk
15

Ja. Ich habe meine Antwort DEMO aktualisiert

table td {
    border-top: thin solid; 
    border-bottom: thin solid;
}

table td:first-child {
     border-left: thin solid;
}

table td:last-child {
     border-right: thin solid;
}

Wenn Sie nur eine stylen möchten, <tr>können Sie dies mit einer Klasse tun: Second DEMO

Itay Gal
quelle
Es sieht so aus, als würde Internet Explorer nicht mögen last-child(es scheint nicht zu unterstützen).
Winzig
@Tiny Welche IE-Version möchten Sie unterstützen? Version 9+ unterstützt das erste und das letzte Kind.
Itay Gal
Es ist Internet Explorer 8, aber keine große Sorge :)
Winzig
Sie stylen nicht <tr>, sondern <td>.
Robert Siemer
5

Nutzen Sie CSS-Klassen:

tr.border{
    outline: thin solid;
}

und benutze es wie:

<tr class="border">...</tr>
Fanie Reynders
quelle
1

Linke Zelle:

style="border-style:solid;border-width: 1px 0px 1px 1px;"

mittlere Zelle (n):

style="border-style:solid;border-width: 1px 0px 1px 0px;"

rechte Zelle:

style="border-style:solid;border-width: 1px 1px 1px 0px;"
Jürgen
quelle
1

Sie können die Box-Shadow-Eigenschaft für ein tr-Element als Ersatz für einen Rahmen verwenden. Als Plus gilt jede Randradius-Eigenschaft für dasselbe Element auch für den Feldschatten.

box-shadow: 0px 0px 0px 1px rgb(0, 0, 0);
Richard Bonneau
quelle
0

<table cellpadding="0" cellspacing="0" width="100%" style="border: 1px;" rules="none">
    <tbody>
        <tr>
            <th style="width: 96px;">Column 1</th>
            <th style="width: 96px;">Column 2</th>
            <th style="width: 96px;">Column 3</th>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>

        <tr>
            <td style="border-left: thin solid; border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid; border-right: thin solid;">&nbsp;</td>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>

Malik
quelle
Könnten Sie Ihrer Antwort einen Kommentar hinzufügen und erklären, was Sie geändert haben?
Franiis
-2

Nachdem ich lange damit gekämpft habe, bin ich zu dem Schluss gekommen, dass die spektakulär einfache Antwort darin besteht, die Tabelle nur mit leeren Zellen zu füllen, um jede Zeile der Tabelle auf die gleiche Anzahl von Zellen aufzufüllen (wobei natürlich Colspan berücksichtigt wird). Mit computergeneriertem HTML ist dies sehr einfach zu arrangieren und vermeidet das Kämpfen mit komplexen Problemumgehungen. Abbildung folgt:

<h3>Table borders belong to cells, and aren't present if there is no cell</h3>
<table style="border:1px solid red; width:100%; border-collapse:collapse;">
    <tr style="border-top:1px solid darkblue;">
        <th>Col 1<th>Col 2<th>Col 3
    <tr style="border-top:1px solid darkblue;">
        <td>Col 1 only
    <tr style="border-top:1px solid darkblue;">
        <td colspan=2>Col 1 2 only
    <tr style="border-top:1px solid darkblue;">
        <td>1<td>2<td>3

</table>


<h3>Simple solution, artificially insert empty cells</h3>

<table style="border:1px solid red; width:100%; border-collapse:collapse;">
    <tr style="border-top:1px solid darkblue;">
        <th>Col 1<th>Col 2<th>Col 3
    <tr style="border-top:1px solid darkblue;">
        <td>Col 1 only<td><td>
    <tr style="border-top:1px solid darkblue;">
        <td colspan=2>Col 1 2 only<td>
    <tr style="border-top:1px solid darkblue;">
        <td>1<td>2<td>3

</table>
David Crowe
quelle