PostCSS plugin to unwrap nested rules like how Sass does it.
JavaScript
Clone or download
Latest commit 39f81c6 Aug 10, 2018
Permalink
Failed to load latest commit information.
.editorconfig Add .editorconfig Apr 13, 2017
.gitignore Add coverage test May 8, 2017
.npmignore Add coverage test May 8, 2017
.travis.yml Remove Node 4 from Travis Aug 10, 2018
CHANGELOG.md Release 3.0 version Dec 11, 2017
LICENSE Fix year in LICENSE Nov 13, 2014
README.md Fix doc typo Apr 7, 2018
index.js Clean up code Dec 11, 2017
index.test.js Update PostCSS Aug 10, 2018
package.json Update PostCSS Aug 10, 2018
yarn.lock Update PostCSS Aug 10, 2018

README.md

PostCSS Nested Build Status

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.

Sponsored by Evil Martians

Usage

postcss([ require('postcss-nested') ])

See PostCSS docs for examples for your environment.

Options

bubble

By default, plugin will unwrap only @media, @supports, @font-face and @document at-rules. You can add your custom at-rules to this list by bubble option:

postcss([ require('postcss-nested')({ bubble: ['phone'] }) ])

preserveEmpty

By default, plugin will strip out any empty selector generated by intermediate nesting levels. You can set preserveEmpty to true to preserve them.

.a {
    .b {
        color: black;
    }
}

Will be compiled to:

.a { }
.a .b {
    color: black;
}

This is especially useful if you want to export the empty classes with postcss-modules.