Zamów według specyfiki CSS

Moim głównym celem jest próba zmiany kolejności bloków w stylu CSS na podstawie specyficzności. Wcześniej pomagałemWIĘC i udało mi się wyprodukować tę funkcję.Zobacz sedno.

Oto przykład:

function specificity($selector){
// https://gist.github.com/2774085
}

$compare = function($a, $b) use ($specificity) {
    return $specificity($a) - $specificity($b)
};

$array = css_array();

uksort($array, $compare);

Powyższe działa świetnie, dopóki nie natknąłem się na ten CSS:

html, body, body div{
    background: transparent;
}
body {
    background-color: #D96F02;
}

Zostanie to zmienione w następujący sposób:

body { // 1 point
    background-color: #D96F02;
}
html, body, body div{ // 4 points
    background: transparent;
}

Jednak w ten sposób przeglądarka nie stosuje CSS.

Myślę, że mojej funkcji specyficzności może brakować znaczenia kolejności CSS, a nie porządkowania na podstawie specyficzności selektora? Czy to prawda?

Aktualizacja

Myślę, że to, co powinienem zrobić, to funkcja porównania, zawsze powinienem dodać dodatkowe punkty do powiedzenia10 ponieważ specyficzność nie opiera się tylko na selektorach, ale również na kolejności selektora. Więc coś takiego:

 $compare = function($a, $b) use ($specificity) {
        return ($specificity($a) + 10) - $specificity($b)
    };

Jak to wygląda i jak mogę określić liczbę punktów, które należy w tym przypadku dać !?

questionAnswers(1)

yourAnswerToTheQuestion