How are the points in CSS specificity calculated

后端 未结 7 1645
萌比男神i
萌比男神i 2020-11-21 05:18

Researching specificity I stumbled upon this blog - http://www.htmldog.com/guides/cssadvanced/specificity/

It states that specificity is a point-scoring system for

7条回答
  •  你的背包
    2020-11-21 05:52

    Pekka's answer is practically correct, and probably the best way to think about the issue.

    However, as many have already pointed out, the W3C CSS recommendation states that "Concatenating the three numbers a-b-c (in a number system with a large base) gives the specificity." So the geek in me just had to figure out just how large this base is.

    It turns out that the "very large base" employed (at least by the 4 most commonly-used browsers*) to implement this standard algorithm is 256 or 28.

    What this means is that a style specified with 0 ids and 256 class-names will over-ride a style specified with just 1 id. I tested this out with some fiddles:

    • 255 classes are not enough to override 1 id
    • ...but 256 classes are enough to override 1 id
    • ...and 256 tag-names are enough to override 1 class-name

    • ...but, alas 256 ids are not enough to override 1 inline style (Updated 2012/8/15 -- you'll have to use !important)

    So there is, effectively, a "point system," but it's not base 10. It's base 256. Here's how it works:

    (28)2 or 65536, times the number of ids in the selector
    + (28)1 or 256, times the number of class-names in the selector
    + (28)0 or 1, times the number of tag-names in the selector

    This isn't very practical for back-of-the-envelop exercises to communicate the concept.
    That's probably why articles on the topic have been using base 10.

    ***** [Opera uses 216 (see karlcow’s comment). Some other selector engines use infinity — effectively no points system (see Simon Sapin’s comment).]

    Update, July 2014:
    As Blazemonger pointed out earlier in the year, webkit browsers (chrome, safari) now appear to use a higher base than 256. Perhaps 216, like Opera? IE and Firefox still use 256.

提交回复
热议问题