Appliquer le style uniquement au premier niveau des balises td


136

Existe-t-il un moyen d'appliquer un style de classe à un seul niveau de balises td?

<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>

Réponses:


221

Existe-t-il un moyen d'appliquer un style de classe à un seul niveau de balises td?

Oui * :

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

Mais! Le >sélecteur «direct-child» ne fonctionne pas dans IE6. Si vous avez besoin de prendre en charge ce navigateur (ce que vous faites probablement, hélas), tout ce que vous pouvez faire est de sélectionner l'élément interne séparément et de dé-définir le style:

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

* Notez que le premier exemple fait référence à un tbodyélément introuvable dans votre HTML. Cela aurait dû être dans votre HTML, mais les navigateurs acceptent généralement de le laisser de côté ... ils l'ajoutent simplement dans les coulisses.


1
Je frémis de me souvenir d'un monde où nous avons dû déboguer pour IE6. Ce message a ramené des frissons ..
webfish

35

que diriez-vous d'utiliser la pseudo-classe CSS: first-child:

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

16
Cela ne fonctionnera pas. Cela sélectionne tous les tdenfants dans l'arborescence des enfants .MyClassdont sont les premiers de leur élément contenant, et ainsi styliseront également l'intérieur td.
Lazlo

1
comment cela a-t-il autant de votes positifs? :first-childn'aura certainement pas l'effet recherché par OP.
plong0

8

Ce style:

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

Donne moi:

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

Cependant, utiliser une classe est probablement la bonne approche ici.


Utiliser une classe sur chaque élément td peut être un peu redondant, vous utiliseriez probablement une classe sur l'élément table contenant, puis vous devrez toujours exclure les seconds niveaux de tables - c'est-à-dire que votre premier exemple est correct.
thomasrutter

6

Créez simplement un sélecteur pour les tables à l'intérieur d'une MyClass.

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

(Pour appliquer de manière générique à toutes les tables internes, vous pouvez également le faire table table td.)


3

Je voulais définir la largeur de la première colonne du tableau, et j'ai trouvé que cela fonctionnait (dans FF7) - la première colonne a une largeur de 50px:

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

où était mon balisage

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

3

Je pense que cela va fonctionner.

.Myclass tr td:first-child{ }

 or 

.Myclass td:first-child { }

Le premier sélectionne-t-il la première tdde chaque ligne et le second ne sélectionne que le premier tdde la page?
Joshua Pinter

@JoshuaPinter vous avez fondamentalement raison sur le premier. En général, td:first-childsélectionne tout tdélément qui est le premier élément sous son parent (quel que soit son parent). Le premier tr td:first-childajoute la condition que le tddoit également être imbriqué sous a tr(à n'importe quel niveau, pas nécessairement descendant direct). tr > td:first-childsélectionne a tdqui est le premier élément directement sous a tr. Cela :first-childn'a donc finalement rien à voir avec une solution à la question du PO et cette réponse est incorrecte.
plong0

2

Je suppose que tu pourrais essayer

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

Ou

body table tr td { color: red; }

où 'body' est un sélecteur pour le parent de votre table

Mais les cours sont probablement la bonne voie à suivre ici.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.