Два класса CSS: какой из них выигрывает?
Разметка ниже выравнивает SAMPLE TEXT
влево.
Мне кажется, что он должен быть выровнен справа. Класс, который выравнивается справа, объявляется после выравнивания слева. И класс, который выравнивается справа, даже упоминается последним. Итак, почему класс, который выравнивается слева, выигрывает?
CSS
.table {
width: 100%;
}
.table td {
text-align: left;
}
.cell {
text-align: right;
}
HTML
<table class="table">
<tr>
<td class="cell">
SAMPLE TEXT
</td>
</tr>
</table>
См. мой пример jsFiddle.
Ответы
Ответ 1
Селектор .table td
имеет более высокий specificity. Правила специфики CSS - это странные... Идентификаторы весит больше, чем имена классов, которые весят больше, чем имена тегов.
Правила специфичности, в двух словах:
- Для каждого имени тега добавьте 1.
- Для каждого имени класса добавьте 10.
- Для каждого идентификатора добавьте 100.
Более высокие значения всегда будут переопределять нижние. В случае галстука последнее загруженное правило выигрывает.
Ответ 2
Я настоятельно рекомендую прочитать фактическую спецификацию CSS по специфике.
Существует четыре уровня:
- встроенные стили,
!important
(a)
- Идентификаторы (b)
- классы, псевдоклассы, селектора атрибутов (c)
- псевдоэлементы (d)
Для каждого селектора добавьте в него соответствующую категорию букв:
#foo.bar baz -> a=0, b=1, c=1, d=1
#fizz#buzz -> a=0, b=2, c=0, d=0
a
trumps b
trumps c
trumps d
.
Если есть ничья, выигрывает вторая:
#foo #bar baz
#fizz #buzz baz <-- same specificity, this one wins
Ответ 3
стили text-align
на .table td
победят text-align
, примененные cell
.table td специфичность (1-1):
(селектор 10 x 1) + (1 x 1 элемент селектора)
. Специфичность соты равна (1-0):
(селектор 10 x 1)
для .cell
, чтобы выиграть, он должен иметь определенность выше других. Он также может быть равен другим, но он должен быть объявлен после других уровней того же уровня.
подробнее о наследовании и специфике
Ответ 4
Если вы делаете
.table {
width: 100%;
}
.table td {
text-align: left;
color: Yellow;
background-color: Red;
}
td.cell {
text-align: right;
}
он будет выравниваться вправо http://jsfiddle.net/VTrEE/4/