2009-03-05 17 views
104

¿Hay alguna forma de aplicar un estilo de Clase a solo UN nivel de etiquetas td?Aplicar estilo solo al primer nivel de las etiquetas 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> 

Respuesta

179

¿Hay alguna forma de aplicar un estilo de Clase a solo UN nivel de etiquetas td?

*:

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

Pero! El selector de hijo directo '>' no funciona en IE6. Si tiene que apoyar ese navegador (que es probable que sí, por desgracia), todo lo que puede hacer es seleccionar el elemento interior por separado y no-establecer el estilo:

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

* Tenga en cuenta que la primera ejemplo hace referencia a un elemento tbody no encontrado en su HTML. Es debería haber en su HTML, pero los navegadores generalmente están bien al dejarlo fuera ... simplemente lo agregan detrás de las escenas.

+0

Su primer fragmento (utilizando el selector secundario) no parece funcionar en Firefox 3.0.1. Obtengo un borde rojo alrededor de la parte 'ESTO NO DEBERÍA TENER NINGUNA'. –

+0

Esto tampoco funciona en Chrome – bstoney

+1

su segundo ejemplo es correcto, pero su primer ejemplo pondría bordes en todo. ".MyClass> tr> td" probablemente funcione (en buenos navegadores) – nickf

2

Creo que se puede tratar

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

O

body table tr td { color: red; } 

donde 'cuerpo' es un selector para padres

de su mesa, pero las clases son muy probablemente la manera correcta para ir aquí.

8

Este estilo:

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

me da:

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

Sin embargo, el uso de una clase es probablemente el enfoque aquí.

+0

Usar una clase en cada elemento de td puede ser un poco redundante, probablemente usaría una clase en el elemento de tabla que lo contiene, y aún tendría que excluir los segundos niveles de tablas, es decir, su primer ejemplo es correcto. – thomasrutter

6

Simplemente haga un selector para las tablas dentro de un MyClass.

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

(Para genéricamente se aplican a todas las tablas internas, también se puede hacer table table td.)

46

cómo sobre el uso del CSS: first-child pseudo-clase:

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

Eso no funcionará. Esto selecciona todos los hijos 'td' en el árbol de niños de' .MyClass', que son los primeros de su elemento contenedor, y por lo tanto también dará estilo al 'td' interno. – Lazlo

3

quería establecer el ancho de la primera columna de la tabla, y encontré esto funcionó (en FF7) - la primera columna es 50px de ancho:

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

donde mi margen de beneficio era

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

creo, va a trabajar.

.Myclass tr td:first-child{ } 

or 

.Myclass td:first-child { } 
+0

¿El primero selecciona el primer 'td' de cada fila y el segundo solo selecciona el primer' td' de la página? –

Cuestiones relacionadas