What is postcss-nested?
The postcss-nested npm package allows developers to use nested syntax in CSS, similar to what is possible in preprocessors like SASS and LESS. It processes CSS files and unwraps nested rules following the CSS Nesting specification. This makes the CSS more readable and maintainable by organizing styles in a hierarchical manner.
What are postcss-nested's main functionalities?
Nesting Rules
This feature allows you to nest hover and other pseudo-class selectors inside the main selector block, making the CSS structure more intuitive and easier to manage.
a {
color: red;
&:hover {
color: green;
}
}
Nesting Properties
Enables grouping of properties under a common namespace, which can be particularly useful for font, margin, and padding definitions, leading to a cleaner and more organized style definition.
a {
font: {
weight: bold;
size: 14px;
family: Arial, sans-serif;
}
}
Nesting At-Rules
Supports nesting of at-rules like @media, allowing for more streamlined and readable media query definitions within the relevant selector context.
@media (min-width: 768px) {
body {
background: lightblue;
a {
color: navy;
}
}
}
Other packages similar to postcss-nested
sass
Sass is a mature, stable, and powerful professional grade CSS extension language. It provides similar nesting functionalities but with a broader feature set for styling. Compared to postcss-nested, Sass offers more features like variables, mixins, and functions for more dynamic styling.
less
Less is a backward-compatible language extension for CSS. It also supports nesting, along with variables, mixins, and functions, similar to Sass. Less and postcss-nested offer comparable nesting capabilities, but Less includes additional features that extend CSS more comprehensively.
stylus
Stylus is an expressive, dynamic, and robust CSS preprocessor that supports nested selectors, variables, mixins, and arithmetic operations. It provides a more flexible syntax compared to postcss-nested, allowing for both a concise and expressive way to write CSS.
PostCSS Nested
PostCSS plugin to unwrap nested rules like how Sass does it.
.phone {
&_title {
width: 500px;
@media (max-width: 500px) {
width: auto;
}
body.is_dark & {
color: white;
}
}
img {
display: block;
}
}
will be processed to:
.phone_title {
width: 500px;
}
@media (max-width: 500px) {
.phone_title {
width: auto;
}
}
body.is_dark .phone_title {
color: white;
}
.phone img {
display: block;
}
Use postcss-current-selector after this plugin if you want to use current selector in properties or variables values.
Use postcss-nested-ancestors before this plugin if you want to reference any ancestor element directly in your selectors with ^&
.
See also postcss-nesting, which implements Tab Atkin's proposed syntax (requires the &
and introduces @nest
).
There is also postcss-nested-props for nested properties like font-size
.
Usage
postcss([ require('postcss-nested') ])
See PostCSS docs for examples for your environment.
Options
bubble
By default, plugin will unwrap only @media
, @supports
and @document
at-rules. You can add your custom at-rules to this list by bubble
option:
postcss([ require('postcss-nested')({ bubble: ['phone'] }) ]