postcss-nested

PostCSS plugin to unwrap nested rules like how Sass does it.

  • Owner: postcss/postcss-nested
  • Platform:
  • License:: MIT License
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

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;
    }
}

.title {
  font-size: var(--font);

  @at-root html {
      --font: 16px
    }
  }
}

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;
}

.title {
  font-size: var(--font);
}
html {
  --font: 16px
}

Related plugins:

  • 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 ^&.

Alternatives:

Usage

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

See PostCSS docs for examples for your environment.

Options

bubble

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

postcss([ require('postcss-nested')({ bubble: ['phone'] }) ])
/* input */
a {
  color: white;
  @phone {
    color: black;
  }
}
/* output */
a {
  color: white;
}
@phone {
  a {
    color: black;
  }
}

unwrap

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

postcss([ require('postcss-nested')({ unwrap: ['phone'] }) ])
/* input */
a {
  color: white;
  @phone {
    color: black;
  }
}
/* output */
a {
  color: white;
}
@phone {
  color: black;
}

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.

Main metrics

Overview
Name With Ownerpostcss/postcss-nested
Primary LanguageJavaScript
Program languageJavaScript (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2014-11-07 23:14:54
Pushed At2024-12-17 07:09:01
Last Commit At
Release Count38
Last Release Name7.0.2 (Posted on 2024-11-01 17:15:16)
First Release Name0.1.0 (Posted on 2014-11-12 01:24:16)
用户参与
Stargazers Count1.2k
Watchers Count13
Fork Count66
Commits Count262
Has Issues Enabled
Issues Count118
Issue Open Count4
Pull Requests Count45
Pull Requests Open Count0
Pull Requests Close Count10
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private