TODO: SkipNavigation

[Nuxt.js] postcss-nesting を使用する方法

そろそろ脱 Sass(SCSS)をしていきたいなと思いまして PostCSS を積極的に使うようにしています。

もっとも使用頻度の高い『セレクタのネスト』から導入しようと調べたところ、postcss-nestedpostcss-nesting のふたつがありました。なにが異なるのか。

簡単にいうと postcss-nested は Sass の気分で書けるもの、postcss-nestingCSS Nesting Module に準拠した形のものです。

css
// postcss-nested
h1 {
  span {
    color: red;
  }
}

// postcss-nesting
h1 {
  // & が必要!
  & span {
    color: red;
  }
}

nesting selector として入れ子にする際に & が必要になります。

postcss-nested のほうがスマートに見えますけど近い将来には postcss-nesting の書き方が一般的になることを信じていまから馴染んでおきたいと思います。

使うための設定

設定といってもなにも難しいことはなく、nuxt.config.jsbuild.postcss.preset.features'nesting-rules': true と一行追加するだけです。

javascript
// nuxt.config.js
export default {
  // ...省略

  /*
   ** Build configuration
   */
  build: {
    /*
     ** You can extend webpack config here
     */
    extend(config, ctx) {},
    postcss: {
      preset: {
        features: {
          'nesting-rules': true
        }
      }
    }
  }
}

よくわかっていないこと

Nuxt.js では postcss/autoprefixer
CSS カスタムプロパティ はデフォルトで有効になっていますが、今回のように明示的に features に追加する必要があるものとの違いはなんでしょうか。Stage の違い?そもそも features がよくわかっていない。

お役立ち男

フロントエンド専門。フリーランスで10年以上活動しています。