1. @csstools/selector-specificity
Determine selector specificity with postcss-selector-parser
@csstools/selector-specificity
Package: @csstools/selector-specificity
Created by: csstools
Last modified: Sun, 31 Mar 2024 13:17:53 GMT
Version: 3.0.3
License: MIT-0
Downloads: 30,293,004
Repository: https://github.com/csstools/postcss-plugins

Install

npm install @csstools/selector-specificity
yarn add @csstools/selector-specificity

Selector Specificity

npm version
Build Status
Discord

Usage

Add Selector Specificity to your project:

 npm install @csstools/selector-specificity --save-dev
 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.

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

const s1 = selectorSpecificity(ast1);
const s2 = selectorSpecificity(ast2);
compare(s1, s2); // -1 | 0 | 1
  • if s1 < s2 then compare(s1, s2) returns a negative number (< 0)
  • if s1 > s2 then compare(s1, s2) returns a positive number (> 0)
  • if s1 === s2 then compare(s1, s2) returns zero (=== 0)

Prior Art

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

RELATED POST

10 Must-Know Windows Shortcuts That Will Save You Time

10 Must-Know Windows Shortcuts That Will Save You Time

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Navigating AWS Networking: Essential Hacks for Smooth Operation

Navigating AWS Networking: Essential Hacks for Smooth Operation

Achieving Stunning Visuals with Unity's Global Illumination

Achieving Stunning Visuals with Unity's Global Illumination

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code