Wenden Sie den Stil nur auf die erste Ebene der td-Tags an


136

Gibt es eine Möglichkeit, den Stil einer Klasse nur auf EINE Ebene von td-Tags anzuwenden?

<style>.MyClass td {border: solid 1px red;}</style>

<table class="MyClass">
  <tr>
    <td>
      THIS SHOULD HAVE RED BORDERS
    </td>
    <td>
      THIS SHOULD HAVE RED BORDERS
      <table><tr><td>THIS SHOULD NOT HAVE ANY</td></tr></table>
    </td>
  </tr>
</table>

Antworten:


221

Gibt es eine Möglichkeit, den Stil einer Klasse nur auf EINE Ebene von td-Tags anzuwenden?

Ja * :

.MyClass>tbody>tr>td { border: solid 1px red; }

Aber! Der ' >' Direct-Child-Selektor funktioniert in IE6 nicht. Wenn Sie diesen Browser unterstützen müssen (was Sie wahrscheinlich leider tun), können Sie das innere Element nur separat auswählen und den Stil deaktivieren:

.MyClass td { border: solid 1px red; }
.MyClass td td { border: none; }

* Beachten Sie, dass das erste Beispiel auf ein tbodyElement verweist, das in Ihrem HTML nicht gefunden wurde. Es sollte in Ihrem HTML-Code enthalten sein, aber Browser können es im Allgemeinen weglassen ... sie fügen es einfach hinter den Kulissen hinzu.


1
Ich schaudere, wenn ich mich an eine Welt erinnere, in der wir für IE6 debuggen mussten. Dieser Beitrag brachte Schüttelfrost zurück ..
Webfish

35

Wie wäre es mit der CSS: First-Child-Pseudoklasse:

.MyClass td:first-child { border: solid 1px red; }

16
Das wird nicht funktionieren. Dies wählt alle tdKinder im Kinderbaum aus, .MyClassderen erstes Element sie enthalten, und formatiert somit auch das Innere td.
Lazlo

1
Wie hat das so viele positive Stimmen? :first-childwird definitiv nicht den Effekt haben, den OP sucht.
plong0

8

Dieser Stil:

table tr td { border: 1px solid red; }
td table tr td { border: none; }

gibt mir:

diese http://img12.imageshack.us/img12/4477/borders.png

Die Verwendung einer Klasse ist hier jedoch wahrscheinlich der richtige Ansatz.


Die Verwendung einer Klasse für jedes einzelne td-Element ist möglicherweise etwas redundant. Sie würden wahrscheinlich eine Klasse für das enthaltene Tabellenelement verwenden und dann immer noch zweite Tabellenebenen ausschließen müssen - dh Ihr erstes Beispiel ist korrekt.
Thomasrutter

6

Erstellen Sie einfach eine Auswahl für Tabellen in einer MyClass.

.MyClass td {border: solid 1px red;}
.MyClass table td {border: none}

(Um generisch auf alle inneren Tabellen anzuwenden, können Sie dies auch tun table table td.)


3

Ich wollte die Breite der ersten Spalte der Tabelle festlegen und fand, dass dies funktioniert (in FF7) - die erste Spalte ist 50 Pixel breit:

#MyTable>thead>tr>th:first-child { width:50px;}

wo mein Markup war

<table id="MyTable">
 <thead>
  <tr>
   <th scope="col">Col1</th>
   <th scope="col">Col2</th>
  </tr>
 </thead>
 <tbody>
   ...
 </tbody>
</table>

3

Ich denke, es wird funktionieren.

.Myclass tr td:first-child{ }

 or 

.Myclass td:first-child { }

Wählt der erste den ersten tdjeder Zeile und der zweite nur den ersten tdder Seite aus?
Joshua Pinter

@JoshuaPinter Sie sind im Grunde richtig über die erste. td:first-childWählt im Allgemeinen jedes tdElement aus, das das erste Element unter seinem übergeordneten Element ist (unabhängig davon, was sein übergeordnetes Element ist). Der erste tr td:first-childfügt die Bedingung hinzu, dass der tdauch unter a verschachtelt sein muss tr(auf jeder Ebene, nicht unbedingt direkter Nachkomme). tr > td:first-childwählt a aus td, das das erste Element direkt unter a ist tr. Hat also letztendlich :first-childnichts mit einer Lösung der OP-Frage zu tun und diese Antwort ist falsch.
plong0

2

Ich denke du könntest es versuchen

table tr td { color: red; }
table tr td table tr td { color: black; }

Oder

body table tr td { color: red; }

Dabei ist 'body' ein Selektor für das übergeordnete Element Ihrer Tabelle

Aber der Unterricht ist höchstwahrscheinlich der richtige Weg, um hierher zu kommen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.