Ваш вопрос отвечает на CSS3 selectors, W3C Recommendation:
9. Вычисление специфичности селектора
Специфичность селектора вычисляется как следует:
- подсчитать количество ID селекторов в селекторе (= а)
- подсчитать число классов селекторов, атрибуты селекторов и псевдо-классов в селекторе (= б)
- подсчитать количество селекторов типа и псевдо- элементы в селекторе (= C)
- игнорировать универсальный селектор
селекторов внутри отрицание псевдо-класса подсчитывают как и любые другие, но само отрицание не считается псевдо-классом.
Сочетание трех чисел a-b-c (в числовой системе с большой базой ) дает специфику.
С вашими примерами мы имеем:
1)p#largetext
имеет специфичность 1,0,1 (1 ид, 1 тип)
body p#largetex
имеет специфичность 1,0, 2 (1 идентификатор, 2 типа)
2)p.largetext ul li
имеет специфичность 0,1,3 (1 класса, 3 типа)
p ul li a
имеет спецификацию 0,0,4 (4 типа)
Для получения значения специфики вам необходимо объединить 3 числа.Так, например, 1, второй селектор более специфичен 102> 101 и, например, 2, первый селектор более специфичен 13> 4.
Мне нравится, как [эта статья] (https://www.smashingmagazine.com/2007/07/css-specificity-things-you-should-know/#how-to-measure-specificity) разрушает ее. – chinaowl
[Здесь] (https://specificity.keegan.st/) - калькулятор, который вы можете использовать, чтобы получить разницу в специфике между двумя разными селекторами. Кроме того, [здесь] (http://vanseodesign.com/css/css-specificity-inheritance-cascaade/) - отличный ресурс для изучения того, как специфика вычисляется движком CSS. – War10ck
В вашем первом примере приоритет будет иметь «тело». Я думаю, это потому, что это наиболее точно напечатано. Второй пример - недопустимый HTML. –