La mayoría de las respuestas son correctas al decir que se trata de un problema de especificidad, pero son incorrectas o incompletas al explicar las reglas de especificidad.
Básicamente en su caso .rightColoumn *
es "más específico" que td
y por lo que la regla gana a pesar de que viene antes.
The CSS 2.1 rules are located here. Estas reglas son:
- recuento de 1 si la declaración es de un 'estilo' de atributos en lugar de una regla con un selector, 0 en caso contrario (= a) (En HTML, los valores de atributo de "estilo" de un elemento son reglas de hoja de estilo. Estas reglas no tienen selectores, entonces a = 1, b = 0, c = 0 yd = 0)
- cuente el número de atributos de ID en el selector (= b)
- cuente el número de otros atributos y pseudo-clases en el selector (= c)
- cuente el número de nombres de elementos y pseudo-elementos en el selector (= d)
Concatenar los cuatro números a-b-c-d (en un sistema numérico con una base grande) da la especificidad.
Así que en su caso se tienen dos reglas:
.rightColumn * {} /* a = 0, b = 0; c = 1, d = 0 : Specificity = 0010*/
td {} /* a = 0, b = 0, c = 0, d = 1 : Specificity = 0001 */
0001 es inferior a 0010 y por lo tanto la primera regla gana.
Hay dos maneras de solucionar este problema:
- Uso
!important
hacer una regla más "importante". Evitaría hacer esto porque es confuso cuando tienes muchas reglas repartidas en varios archivos.
- Utilice un selector de mayor especificidad para la td que desea modificar. Puede agregarle un nombre de clase o una identificación y esto le permitirá reemplazar la regla del archivo CSS vinculado.
Ejemplo:
<style>
.rightColomn * { padding: 0; } /* 0010 */
td#myUnpaddedTable { padding: 10px; } /* 0101 */
td.anUnpaddedTable { padding: 10px; } /* 0011 */
</style>
Editar: fijas las reglas especificidad para *. El comentario de David me impulsó a volver a leer la especificación, lo que sí muestra que el * selector no contribuye en nada al puntaje de especificidad.
! Importante es css como DoEvents es para VB6. :) – BobRodes