Selector Specificity

npm version Build Status Discord

Usage

Add Selector Specificity to your project:

bash npm install postcss @csstools/selector-specificity --save-dev

```js import parser from 'postcss-selector-parser'; import { selectorSpecificity } from '@csstools/selector-specificity';

const selectorAST = parser().astSync('#foo:has(> .foo)'); const specificity = selectorSpecificity(selectorAST);

console.log(specificity.a); // 1 console.log(specificity.b); // 1 console.log(specificity.c); // 0 ```

selectorSpecificity takes a single selector, not a list of selectors (not : a, b, c). To compare or otherwise manipulate lists of selectors you need to call selectorSpecificity on each part.

Comparing

The package exports a utility function to compare two specificities.

```js import { selectorSpecificity, compare } from '@csstools/selector-specificity';

const s1 = selectorSpecificity(ast1); const s2 = selectorSpecificity(ast2); compare(s1, s2); // -1 | 0 | 1 ```

Prior Art

For CSSTools we always use postcss-selector-parser and want to calculate specificity from this AST.