13
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Sass を Nuxt.js で使ってみよう(2019.07版)

Last updated at Posted at 2019-07-26

以前、同様の記事 を書いたのですが、必要のないパッケージをインストールしているなど微妙な感じになっていたので書き直しました。

Sass is 何?

公式によると

CSS with superpowers

Sass is the most mature, stable, and powerful professional grade CSS extension language in the world.

な CSS 拡張言語です!

ちなみに Sass は Syntactically Awesome StyleSheets の略らしく、翻訳すると

構造的にイケてるスタイルシート

だそうです!

nav
  ul
    margin: 0
    padding: 0
    list-style: none

  li
    display: inline-block

  a
    display: block
    padding: 6px 12px
    text-decoration: none

このように ruby ライクな記述ができ、プログラミング言語っぽく書けることで保守性や可読性が高まるという優れものです!

(もちろん CSS に慣れ親しんだ人向けに、既存の CSS がそのまま使える記法も用意されていますよ!)

:link: Sass 公式

Sass をインストール

前回は色々と試行錯誤しましたが、この 3 つをインストールすれば利用できます。

> npm install -D node-sass sass-loader @nuxtjs/style-resources

Vuetify を利用する場合は最新バージョンだとエラーになるので sass-loader@7.1.0 くらいに落とすとよいです

記法について

SASS 記法

冒頭に書いたとおり、Sass を利用した場合

<style lang="sass">
nav
  ul
    margin: 0
    padding: 0
    list-style: none

  li
    display: inline-block

  a
    display: block
    padding: 6px 12px
    text-decoration: none
</style>

のように書けます。

SCSS 記法

既存の CSS をそのまま使いたい、とか、 CSS の記法に抵抗がない人の場合は SCSS記法 というものもあります。

こちらを使えば、いつもの CSS をそのまま利用することが出来ます!

nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li { display: inline-block; }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}

コンパイル結果

上記どちらの記法を利用しても、 次のような CSS にコンパイルされます。

nav ul {
  margin: 0;
  padding: 0;
  list-style: none;
}
nav li {
  display: inline-block;
}
nav a {
  display: block;
  padding: 6px 12px;
  text-decoration: none;
}

便利ですね! :yum:

グローバルな CSS ( SCSS )の設定

Bulma をはじめとしたUIフレームワークを導入している場合、それらが提供しているスタイルをグローバルに利用したいケースがあります。

そういうときの設定方法です。

( Bulma をサンプルにしています)

グローバルなCSS

~/assets/main.scss
// Bulma の Elements をインポート
@import "~bulma/sass/elements/box";
@import "~bulma/sass/elements/button";
@import "~bulma/sass/elements/container";
@import "~bulma/sass/elements/content";
@import "~bulma/sass/elements/form";
@import "~bulma/sass/elements/icon";
@import "~bulma/sass/elements/image";
@import "~bulma/sass/elements/notification";
@import "~bulma/sass/elements/progress";
@import "~bulma/sass/elements/table";
@import "~bulma/sass/elements/tag";
@import "~bulma/sass/elements/title";
@import "~bulma/sass/elements/other";

このようにフレームワークの利用したいスタイルをインポートしたファイルを用意します。

あとは、 nuxt.config.js で設定するだけ。

nuxt.config.js
module.exports = {
  
  // 省略
    
  /*
  ** Global CSS
  */
  css: [
    '~/assets/main.scss'
  ],
  
  // 省略
}

Mixin や変数などをコンポーネントとして利用する

章立てのとおりですが、フレームワークが提供している Mixin や変数を利用したい場合は、 @nuxtjs/style-resources を利用して読み込みます。

~/assets/utilities.scss
@import "~bulma/sass/utilities/initial-variables";
@import "~bulma/sass/utilities/functions";
@import "~bulma/sass/utilities/derived-variables";
@import "~bulma/sass/utilities/animations";
@import "~bulma/sass/utilities/mixins";
@import "~bulma/sass/utilities/controls";

フレームワークが提供している変数などをインポートしたファイルを用意します。

あとは、 nuxt.config.js で設定するだけ。

nuxt.config.js
module.exports = {
  
  // 省略
    
  modules: [
    '@nuxtjs/style-resources'
  ],
  styleResources: {
    sass: ['~/assets/utilities.scss']
  },
  
  // 省略
}

また、この utilities.scss を、先程作成した main.scss にインポートすることで、グローバルに利用することができます。

~/assets/main.scss
@import "utilities";

まとめ

前回は力不足で、微妙な情報を提供してしまいましたが(それなりに View があり申し訳ない……)、今回の記事ではだいぶスッキリしています。

「スタイルもプログラミング言語っぽく書ければいいのに…」という方は是非ためしてみてください!

それでは素敵な Sass ライフをー :raised_hand:

13
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?