我的主要目标是尝试根据特殊性重新排序 CSS 样式块。我之前曾帮助过SO https://stackoverflow.com/questions/10636340/order-css-based-on-selector-specificity我成功地实现了这个功能。See gist https://gist.github.com/2774085.
这是一个例子:
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);
上面的代码一直运行良好,直到我遇到这个 CSS:
html, body, body div{
background: transparent;
}
body {
background-color: #D96F02;
}
这被重新排序为:
body { // 1 point
background-color: #D96F02;
}
html, body, body div{ // 4 points
background: transparent;
}
然而,这不是浏览器应用 CSS 的方式。
我认为我的特异性函数可能忽略了 CSS 顺序的重要性,而不是基于选择器特异性的排序?这是真的?
Update
我认为我应该做的是在我的比较函数中,我应该总是添加一个额外的点10
因为特异性不仅仅基于选择器,它还基于选择器的顺序。所以像这样:
$compare = function($a, $b) use ($specificity) {
return ($specificity($a) + 10) - $specificity($b)
};
这看起来怎么样?在这种情况下我如何确定要给出的分数!?