2009-03-05 13 views
104

Esiste un modo per applicare uno stile di classe a un solo livello di tag td?Applicare lo stile solo al primo livello dei tag 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> 

risposta

179

C'è un modo per applicare uno stile di classe a un solo livello di tag td?

*:

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

Ma! Il selettore di figlio diretto ">" non funziona in IE6. Se è necessario supportare che il browser (che probabilmente si fa, ahimè), tutto quello che puoi fare è selezionare l'elemento interno separatamente e ONU-impostare lo stile:

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

* Nota che la prima esempio fa riferimento a un elemento tbody non trovato nel codice HTML. Lo dovrebbe essere nel tuo codice HTML, ma i browser sono generalmente ok a lasciarlo fuori ... lo aggiungono semplicemente dietro le quinte.

+0

Il tuo primo snippet (utilizzando il selettore di figlio) non sembra funzionare in Firefox 3.0.1. Prendo un bordo rosso intorno alla parte "QUESTO NON DEVE AVERE NESSUNO". –

+0

Questo non funziona in Chrome o – bstoney

+1

il tuo secondo esempio è corretto, ma il tuo primo esempio metterebbe i bordi su tutto. ".MyClass> tr> td" probabilmente funzionerebbe (nei buoni browser) – nickf

2

Credo che si potrebbe provare

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

O

body table tr td { color: red; } 

in cui 'corpo' è un selettore per il genitore della vostra tabella

Ma le classi sono molto probabilmente il modo giusto per andare qui.

8

Questo stile:

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

mi da:

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

Tuttavia, utilizzando una classe è probabilmente l'approccio giusto qui.

+0

Utilizzare una classe su ogni singolo elemento td potrebbe essere un po 'ridondante, probabilmente dovresti usare una classe sull'elemento della tabella contenente, e quindi dovresti ancora escludere i secondi livelli di tabelle - cioè il tuo primo esempio è corretto. – thomasrutter

6

Basta fare un selettore per le tabelle all'interno di una MyClass.

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

(genericamente si applicano a tutti i tavoli interni, si potrebbe anche fare table table td.)

46

come circa usando il CSS: first-child pseudo-classe:

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

Non funzionerà. Questo seleziona tutti i figli 'td' nell'albero dei bambini di' .MyClass' che sono i primi del loro elemento di contenimento, e quindi modelleranno anche il 'td' interno. – Lazlo

3

volevo imposta la larghezza della prima colonna della tabella e ho trovato funzionato (in FF7) - la prima colonna è larga 50px:

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

dove il mio margine di profitto è stato

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

credo, funzionerà.

.Myclass tr td:first-child{ } 

or 

.Myclass td:first-child { } 
+0

Il primo seleziona il primo 'td' di ogni riga e il secondo seleziona solo il primo' td' della pagina? –

Problemi correlati