Ordenar por especificidade de CSS
Meu objetivo principal é tentar reordenar um bloco de estilo CSS baseado na especificidade. Eu já tinha ajudado deASSIM e consegui produzir essa função.Veja a essência.
Aqui está um exemplo:
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);
O acima tem funcionado muito bem até me deparar com este CSS:
html, body, body div{
background: transparent;
}
body {
background-color: #D96F02;
}
Isso é reordenado nisso:
body { // 1 point
background-color: #D96F02;
}
html, body, body div{ // 4 points
background: transparent;
}
No entanto, não é assim que o navegador aplica o CSS.
Eu acho que minha função de especificidade pode estar faltando a importância da ordem de CSS, em vez de ordenar com base na especificidade do seletor? Isso é verdade?
AtualizarEu acho que o que devo fazer é na minha função de comparação, eu devo sempre adicionar um ponto extra de dizer10
porque a especificidade não é baseada apenas em seletores, é baseada na ordem do seletor também. Então, algo assim:
$compare = function($a, $b) use ($specificity) {
return ($specificity($a) + 10) - $specificity($b)
};
Como isso parece e como eu determino o número de pontos para dar neste caso?