Większość odpowiedzi wskazuje, że jest to problem specyficzności, ale są one niepoprawne lub niepełne w wyjaśnianiu reguł specyficzności.
Zasadniczo w twoim przypadku .rightColoumn *
jest "bardziej konkretny" niż td
i dlatego reguła wygrywa, nawet jeśli przychodzi wcześniej.
The CSS 2.1 rules are located here. Zasady te są następujące:
- liczba 1, jeśli deklaracja jest z to „styl” przypisywać raczej niż z reguły z selektorem, 0 w przeciwnym przypadku (= a) (W HTML, wartości „styl” atrybutu elementu są Reguły arkusza stylów Te reguły nie mają selektorów, więc a = 1, b = 0, c = 0, i d = 0.)
- policz liczbę atrybutów ID w selektorze (= b)
- policz ilość liczba innych atrybutów i pseudoklas w selektorze (= c)
- policzyć liczbę nazw elementów i pseudoelementów w selektorze (= d)
Łączenie czterech liczb a-b-c-d (w systemie liczbowym o dużej podstawie) nadaje specyfikację.
Więc w twoim przypadku masz dwie zasady:
.rightColumn * {} /* a = 0, b = 0; c = 1, d = 0 : Specificity = 0010*/
td {} /* a = 0, b = 0, c = 0, d = 1 : Specificity = 0001 */
0001 jest niższa niż 0010, a więc pierwsza zasada wygrywa.
Istnieją dwa sposoby, aby rozwiązać ten problem:
- Zastosowanie
!important
zarabiania reguła bardziej „ważne”. Unikałbym tego, ponieważ jest to mylące, gdy masz wiele reguł rozłożonych na kilka plików.
- Użyj selektora o większej specyficzności dla td, który chcesz zmodyfikować. Możesz dodać do niego nazwę klasy lub identyfikator, co pozwoli ci zastąpić regułę z połączonego pliku CSS.
Przykład:
<style>
.rightColomn * { padding: 0; } /* 0010 */
td#myUnpaddedTable { padding: 10px; } /* 0101 */
td.anUnpaddedTable { padding: 10px; } /* 0011 */
</style>
EDIT: Stałe zasady specyficzności względem *. Komentarz Davida zachęcił mnie do ponownego przeczytania specyfikacji, która pokazuje, że selektor * nie wnosi nic do wyniku specyficzności.
! Ważne jest, aby css jak DoEvents jest do VB6. :) – BobRodes