1) #divID input[type='text']
{
height:30px;
}
2) #divID .ClassName
{
height:40px;
}
For a text box in a div, I have the above styles defined. 2 is more specific than 1, but the rendered height is 30px. How does it work?
2 is not more specific than 1. 1 is actually more specific.
CSS selectors are divided into three levels (for the purposes of this discussion; there are actually more because of the
styleattribute and!important).The ID selector
#is at the highest level.Classes and attributes
.ClassName,[type=text],[id=x]are on the second level as are pseudo-classes.Elements and pseudo elements are on the lowest level.
Ties on one level move to the next level. Both rulesets are tied for the ID and the class/attribute level (
.ClassNameand[type=text]are tied).The first ruleset has an element as part of the selector, but the other has none. Thus, the first ruleset wins on the lowest level.
http://css-tricks.com/specifics-on-css-specificity/
http://www.w3.org/TR/CSS21/cascade.html#specificity