Выберите элементы со случайно сгенерированными идентификаторами с помощью CSS
у меня есть эта разметка, где ID не известен заранее:
#product-20625055 { background-color: #FC0; }
#product-66980342 { background-color: #0CF; }
#product-54722210 { background-color: #F0C; }
<div class="product" id="product-20625055">Product 1</div>
<div class="product" id="product-66980342">Product 2</div>
<div class="product" id="product-54722210">Product 3</div>
мне нужно изменить цвет фона всех дивов. Это самый конкретный селектор, который я мог придумать, но он не работает:
div.product[id^="product-"] { background-color: transparent; }
можно ли это сделать без идентификаторов жесткого кодирования, используя !important
и изменение разметки HTML?
11 ответов
вместо того, чтобы прибегать к !important
, вы можете рассмотреть возможность использования :not()
псевдо-класс для увеличения специфичности вашего селектора, например:
div.product:not(#specificity-hack) { background-color: transparent; }
это соответствует тем же элементам, что и ваш исходный селектор (при условии, что specificity-hack
не является возможным идентификатором для продукта div, что кажется вероятным здесь), но так как селекторы внутри :not()
включены в расчет специфичности, это считается более конкретным, чем правила, которые вы пытаетесь переопределение.
(главная причина не использовать !important
Если вы можете избежать его это привыкание-единственный способ переопределить !important
правило с другое !important
правило, поэтому чем больше вы его используете, тем больше он вам понадобится. В конце концов, половина ваших правил CSS будет отмечена !important
, и вы в основном вернулись к тому, с чего начали, за исключением того, что теперь ваши таблицы стилей раздуты множеством !important
маркеры и вы также эффективно лишил себя возможности пользоваться !important
переопределить обычные стили в редких случаях, когда это действительно законно полезно, и теперь есть прибегнуть к специфичности хаков, как показано выше. Мораль рассказа:!important
является мощным, но легко злоупотреблять-не используйте его, если вы действительно не должны!)
Я думаю, что это один из тех случаев, когда !important
может быть лучшим вариантом.
#product-20625055 {
background-color: #FC0;
}
#product-66980342 {
background-color: #0CF;
}
#product-54722210 {
background-color: #F0C;
}
div[id^="product-"].product {
background-color: transparent !important;
}
<div class="product" id="product-20625055">Product 1</div>
<div class="product" id="product-66980342">Product 2</div>
<div class="product" id="product-54722210">Product 3</div>
все три id
селекторы, которые используются в вашем фрагменте, имеют спецификацию 100, тогда как селектор, который вы используете для попытки переопределения (div.product[id^="product-"]
) имеет спецификацию только 021 (потому что он имеет один селектор классов, один селектор атрибутов и один селектор типов элементов).
вы не можете переопределить id
селектор, если вы не используете другой id
селектор как часть полного селектора (добавление id
селектор в любом месте будет достаточно) (или) использования !important
(или) используйте встроенные стили. Потому что если id
селектор добавлен, первая цифра всегда будет 0 и поэтому будет менее специфичной, чем id
селекторы.
так как вы не можете hardcode id
каждого элемента (поскольку он случайный), единственным вариантом было бы добавить id
родительскому элементу, а затем использовать его как часть селектора, как я упоминал в своем комментарии. The id
может быть добавлен к общему родителю (или), если нет родителя, то к body
.
#product-20625055 {
background-color: #FC0;
}
#product-66980342 {
background-color: #0CF;
}
#product-54722210 {
background-color: #F0C;
}
#id div.product[id^="product-"] {
background-color: transparent;
}
<div id='id'>
<div class="product" id="product-20625055">Product 1</div>
<div class="product" id="product-66980342">Product 2</div>
<div class="product" id="product-54722210">Product 3</div>
</div>
возможно, вы могли бы выбрать div по классу (потому что все они имеют то же самое) и добавить !important
.product {
background: transparent!important;
}
прямо от https://developer.mozilla.org/en/docs/Web/CSS/Specificity#The_!important_exception
когда !важное правило используется для объявления стиля, это объявление переопределяет любые другие объявления.
можно использовать !important
для переопределения любого css
<div class="product" id="product-20625055">Product 1</div>
<div class="product" id="product-66980342">Product 2</div>
<div class="product" id="product-54722210">Product 3</div>
#product-20625055 { background-color: #FC0; }
#product-66980342 { background-color: #0CF; }
#product-54722210 { background-color: #F0C; }
.product {background-color: transparent !important;}
селектор атрибута [id....] необходимо изменить, чтобы сделать соответствие значения префикса ([ id^= "продукт"]), также так как ID будет принимать предпочтение вам нужно !важно после применения прозрачного bgcolor. См. ниже для примера html.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
<!--
#product-20625055 { background-color: #FC0; }
#product-66980342 { background-color: #0CF; }
#product-54722210 { background-color: #F0C; }
div.product[id^="product"] {
background-color: transparent!important;
}
-->
</style>
</head>
<body>
<div class="product" id="product-20625055">Product 1</div>
<div class="product" id="product-66980342">Product 2</div>
<div class="product" id="product-54722210">Product 3</div>
</body>
</html>
используйте css !важная особенность это полезно в ситуациях, как вы в настоящее время. Но causious при ее использовании не используйте его excesively в CSS-файлы. Он используется в css для переопределения правил. Всякий раз, когда вы ставите его после любого правила css, что !важно будет убедиться, что использовать это правило над любым другим правилом, определенным в любом месте в любых CSS-файлов, которые вы используете.
#product-20625055 { background-color: #FC0 !important ; }
#product-66980342 { background-color: #0CF !important ; }
#product-54722210 { background-color: #F0C !important ; }
просто добавьте в свой body
или другой элемент, который обертывает ваш products
некоторые ID и
#product-20625055 {
background-color: blue;
}
#wrapper .product[id^="product-"] {
background-color: red;
}
<div id="wrapper">
<div class="product" id="product-20625055">Product 1</div>
</div>
селектор div.product[id*="product-"]
работает! если вам нужно переписать уже существующее свойство, вы должны использовать !important
:
#product-20625055 { background-color: #FC0; }
#product-66980342 { background-color: #0CF; }
#product-54722210 { background-color: #F0C; }
div.product[id*="product-"] {
background-color: green!important;
}
вы можете использовать этот
: nth-child (number) {объявления css;} Пример:
div.product:nth-child(1){
background-color:white;
}
div.product:nth-child(2){
background-color:blue;
}
div.product:nth-child(3){
background-color:yellow;
}
вы можете переопределить селектор ID, используя этот код [id / ="product"] или div.продукт: не (#продукт) селектор:
#product-20625055 { background-color: #FC0; }
#product-66980342 { background-color: #0CF; }
#product-54722210 { background-color: #F0C; }
/* You Can Use This Selector */
[id|="product"] {
background-color: transparent !important;
}
/* Or This Selector */
div.product:not(#product) { background-color: transparent; }
<div class="product" id="product-20625055">Product 1</div>
<div class="product" id="product-66980342">Product 2</div>
<div id="product-54722210" class="product">Product 3</div>
другая практика состоит в том, чтобы иметь классы, а не идентификаторы в вашем css, поэтому их можно легко переопределить.
.product-20625055 { background-color: #FC0; }
.product-66980342 { background-color: #0CF; }
.product-54722210 { background-color: #F0C; }
.product { background-color:transparent; }
<div class="product product-20625055" id="product-20625055">Product 1</div>
<div class="product product-66980342" id="product-66980342">Product 2</div>
<div id="product-54722210" class="product product-54722210">Product 3</div>