Правила и специфика переопределения CSS
меня часто путают правила переопределения CSS: в общем, я понимаю, что более конкретные таблицы стилей переопределяют менее конкретные, и эта специфика определяется тем, сколько селекторов указано. Есть также !important ключевое слово, которое играет роль, также.
Итак, вот простой пример: у меня есть таблица с двумя ячейками таблицы. Сама таблица имеет правило CSS, которое применяется ко всем ячейкам в таблице. Однако вторая ячейка таблицы имеет свое собственное правило, которое следует переопределить общее правило таблицы:
<html>
<head>
<style type = "text/css">
table.rule1 tr td {
background-color: #ff0000;
}
td.rule2 {
background-color: #ffff00;
}
</style>
</head>
<body>
<table class = "rule1">
<tr>
<td>abc</td>
</tr>
<tr>
<td class = "rule2">abc</td>
</tr>
</table>
</body>
</html>
но... когда я открываю это в браузере, я вижу, что rule2 не переопределяет rule1. Хорошо - так что я думаю, мне нужно сделать rule2 более "конкретный", но я не могу определить какие-либо дополнительные селекторы, так как я просто хочу применить его к конкретной ячейке таблицы. Итак, я попытался поставить ! important ключевое слово, но это не сработало.
я могу переопределить rule2 если я оберну текстовый узел в <div>, например:
<td class = "rule2"><div>abc</div></td>
...а затем сделайте правило CSS более конкретным:
td.rule2 div {
background-color: #ffff00; !important
}
это работает, но это не совсем то, что я хочу. Во-первых, я хочу применить правило к ячейка таблицы, а не DIV. Это имеет значение, потому что вы все еще можете видеть цвет фона rule1 как граница вокруг div.
Итак, что мне нужно сделать, чтобы сказать CSS я хочу rule2 переопределить rule1 на td элемент?
3 ответа:
для придания второму правилу более высокой специфичности вы всегда можете использовать части первого правила. В этом случае я бы добавил
table.rule1 trиз правила один и добавьте его в правило два.table.rule1 tr td { background-color: #ff0000; } table.rule1 tr td.rule2 { background-color: #ffff00; }через некоторое время я считаю, что это становится естественным, но я знаю, что некоторые люди не согласны. Для этих людей я бы предложил заглянуть в меньше или Сасс.
специфичность рассчитывается на основе количества селекторов id, class и tag в вашем правиле. Id имеет самую высокую специфичность, затем класс, затем тег. Ваше первое правило теперь более специфично, чем второе, так как у них обоих есть селектор классов, но у Первого также есть два селектора тегов.
чтобы сделать второй переопределить первый, вы можете сделать более конкретным, добавив информацию о его родителях:
table.rule1 tr td.rule2 { background-color: #ffff00; }здесь хорошая статья для получения дополнительной информации о приоритете селектора.