Socket
Socket
Sign inDemoInstall

postcss-nesting

Package Overview
Dependencies
8
Maintainers
2
Versions
57
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    postcss-nesting

Nest rules inside each other in CSS


Version published
Weekly downloads
6.6M
decreased by-2.1%
Maintainers
2
Install size
243 kB
Created
Weekly downloads
 

Package description

What is postcss-nesting?

The postcss-nesting package is a PostCSS plugin that allows you to use nesting syntax in CSS, similar to what is offered by preprocessors like Sass and Less. It helps to write more readable and maintainable CSS by allowing styles to be nested within one another.

What are postcss-nesting's main functionalities?

Nesting Rules

Allows nesting of selectors within a parent selector, which will be expanded to the equivalent of 'a b { color: black; }'.

a {
  & b { color: black; }
}

Nesting Properties

Enables nesting of properties, which is useful for grouping font properties or other related properties together.

a {
  font: {
    weight: bold;
    size: 1em;
    family: serif;
  }
}

Nesting At-Rules

Supports nesting of at-rules like @media within a selector, which will be processed into the correct CSS syntax.

a {
  @media (min-width: 500px) {
    color: black;
  }
}

Other packages similar to postcss-nesting

Readme

Source

PostCSS Nesting PostCSS

NPM Version CSS Standard Status Discord

PostCSS Nesting lets you nest style rules inside each other, following the CSS Nesting specification. If you want nested rules the same way Sass works you might want to use PostCSS Nested instead.

a, b {
	color: red;

	/* "&" comes first */
	& c, & d {
		color: white;
	}

	/* "&" comes later, requiring "@nest" */
	@nest e & {
		color: yellow;
	}
}

/* becomes */

a, b {
	color: red;
}

a c, a d, b c, b d {
	color: white;
}

e a, e b {
	color: yellow;
}

Usage

Add PostCSS Nesting to your project:

npm install postcss-nesting --save-dev

Use PostCSS Nesting as a PostCSS plugin:

import postcss from 'postcss';
import postcssNesting from 'postcss-nesting';

postcss([
  postcssNesting(/* pluginOptions */)
]).process(YOUR_CSS /*, processOptions */);

PostCSS Nesting runs in all Node environments, with special instructions for:

NodeWebpackCreate React AppGulpGrunt

Deno

You can also use PostCSS Nesting on Deno:

import postcss from "https://deno.land/x/postcss/mod.js";
import postcssNesting from "https://cdn.jsdelivr.net/npm/postcss-nesting@10/mod.js";

await postcss([postcssNesting]).process(YOUR_CSS /*, processOptions */);

Options

noIsPseudoSelector

Specificity

Before :

#alpha,
.beta {
	&:hover {
		order: 1;
	}
}

After without the option :

postcssNesting()
:is(#alpha,.beta):hover {
	order: 1;
}

.beta:hover has specificity as if .beta where an id selector, matching the specification.

specificity: 1, 1, 0

After with the option :

postcssNesting({
	noIsPseudoSelector: true
})
#alpha:hover, .beta:hover {
	order: 1;
}

.beta:hover has specificity as if .beta where a class selector, conflicting with the specification.

specificity: 0, 2, 0

Complex selectors

Before :

.alpha > .beta {
	& + & {
		order: 2;
	}
}

After without the option :

postcssNesting()
:is(.alpha > .beta) + :is(.alpha > .beta) {
	order: 2;
}

After with the option :

postcssNesting({
	noIsPseudoSelector: true
})
.alpha > .beta + .alpha > .beta {
	order: 2;
}

this is a different selector than expected as .beta + .alpha matches .beta followed by .alpha.
avoid these cases when you disable :is()
writing the selector without nesting is advised here

/* without nesting */
.alpha > .beta + .beta {
	order: 2;
}

⚠️ Spec disclaimer

The CSS Nesting Module spec states on nesting that "Declarations occurring after a nested rule are invalid and ignored.". While we think it makes sense on browsers, enforcing this at the plugin level introduces several constraints that would interfere with PostCSS' plugin nature such as with @mixin

Keywords

FAQs

Last updated on 14 Sep 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc