Is An Attribute Selector For The Id Attribute Less Specific Than An Id Selector?
Solution 1:
An attribute selector will always be less specific than an ID selector; its specificity value does not change based on the attribute name. Selectors only maps specific attribute names to class selectors and ID selectors; an attribute selector is a generic concept and does not contain any such mappings.
The only way for a complex selector to have ID specificity is if it contains one or more ID selectors. Implementation limits aside, it is theoretically not possible to override even a single ID selector with any number of attribute selectors or any other type of simple selector.
Here is how your two selectors compare:
/* 1 attribute, 2 types -> specificity = 0-1-2 */htmldiv[id^="blue"] {
background-color: blue
}
/* 1 ID -> specificity = 1-0-0 */#blue4 {
background-color: red
}
Even the addition of html
doesn't help because it's just a type selector. Change it to :root
and you get a pseudo-class which is equally specific to an attribute selector, and thus still less specific than an ID.
Solution 2:
You may consider the not()
selector in order to append a random ID and you will then have a higher or the same specifity since the specifity of not()
is equal to the specifity of the selector inside it:
htmlbodydiv[id^="blue"]:not(#randomID) {
background-color: blue
}
#blue4 {
background-color: red
}
div {
height: 50px;
width: 50px
}
<divid="blue1"></div><divid="blue2"></div><divid="blue3"></div><divid="blue4"></div>
Post a Comment for "Is An Attribute Selector For The Id Attribute Less Specific Than An Id Selector?"