Nuxt.jsでSassの変数を使えるようにして全ページで読み込むようにする
Nuxt.jsでSassの変数を使えるようにして全ページで読み込むようにする:
(Bulmaのサイトに載っているコードです。)
これで、
これで、Sassをつかえるようにし、コンパイルしてくれます。
アプリケーションを再起動しなくても、自動的にコンパイルしてくれます。
Sassファイルは
カスタマイズをせずに使う場合は、下記を
カスタマイズする場合は、カスタマイズ内容を書いたファイルの最後にBulmaを読み込みます。
(
vueファイルで使いたい変数を設定したファイルを
こうすることで、Sassファイルでもimportの記述なしで使うことができます。
こんな感じで
vueファイルで使いたい時にimportすれば使えるけれど、それでは毎回書かないといけないのでとてもめんどくさい。
そんな時は
これで、各ファイルで指定しなくても、全ページでそのスタイルを当てられます。
やりたいこと
- Nuxt.jsの環境でSassを使いたい
- CSSフレームワーク(Bulma)を導入したい
- 設定した変数をvueファイルで使いたい
- 共通スタイルcommon.cssみたいなファイルを全ページで読み込みたい
使うもの
- Bulma
- node-sass
- sass-loader
- nuxt-sass-resources-loader
作業内容
ターミナルでインストール
$ npm install sass-loader node-sass --save-dev $ npm install bulma --save $ npm install --save-dev nuxt-sass-resources-loader
Sassファイルを作成する
- 変数を設定するファイル
/assets/sass/variable.scss
// Import a Google Font @import url('https://fonts.googleapis.com/css?family=Nunito:400,700'); // Set your brand colors $purple: #8A4D76; $pink: #FA7C91; $brown: #757763; $beige-light: #D0D1CD; $beige-lighter: #EFF0EB; // Update Bulma's global variables $family-sans-serif: "Nunito", sans-serif; $grey-dark: $brown; $grey-light: $beige-light; $primary: $purple; $link: $pink; // Update some of Bulma's component variables $control-border-width: 2px; $input-background-color: $beige-lighter; $input-border-color: transparent; $input-shadow: none; // Import the rest of Bulma @import "~/node_modules/bulma";
- 共通スタイル
/assets/sass/common.scss
.title{ position: relative; padding: 0.5em; background: $main; color: white; ::before { position: absolute; content: ''; top: 100%; left: 0; border: none; border-bottom: solid 15px transparent; border-right: solid 20px $grey; } } .tooltip { position: relative; display: inline-block; margin: 1.5em 0; padding: 7px 10px; min-width: 120px; max-width: 100%; color: $text; font-size: $size-small; background: $info; &:before{ content: ""; position: absolute; top: 100%; left: 50%; margin-left: -15px; border: 15px solid transparent; border-top: 15px solid $info; } } .position_center{ position: absolute; top: 50%; left: 50%; transform : translate(-50%,-50%); }
nuxt.config.js
に追記する
nuxt.config.js
module.exports = { modules: [ ['nuxt-sass-resources-loader', [ '~/assets/sass/variable.scss', ]], ], css: [ { src: '~/assets/sass/common.scss', lang: 'scss' }, ], };
やりたいこと
の内容はできるようになりました。
ポイントを解説
Nuxt.jsの環境でSassを使いたい
$ npm install sass-loader node-sass --save-dev
アプリケーションを再起動しなくても、自動的にコンパイルしてくれます。
Sassファイルは
/assets/
の中に作成します。
CSSフレームワーク(Bulma)を導入したい
$ npm install bulma --save
nuxt.config.js
に追記します。nuxt.config.js
module.exports = { css: [ { src: '~/node_modules/bulma/bulma.sass', lang: 'sass' }, ], };
(
nuxt.config.js
には、カスタマイズ内容を書いたファイルを読み込みます。)@import "~/node_modules/bulma";
設定した変数をvueファイルで使いたい
$ npm install --save-dev nuxt-sass-resources-loader
nuxt.config.js
に追記します。nuxt.config.js
module.exports = { modules: [ ['nuxt-sass-resources-loader', [ '~/assets/sass/variable.scss', ]], ], };
vueファイルでのSassの書き方
menu.vue
<template> <ul> <li>メニュー1</li> <li>メニュー2</li> <li>メニュー3</li> <li>メニュー4</li> </ul> </template> <style lang="scss" scoped> ul, ol { padding: 0; position: relative; } ul li, ol li { color: $primary; border-left: solid 6px $primary; background: $grey-lighter; margin-bottom: 3px; line-height: 1.5; padding: 0.5em; list-style-type: none!important; } </style>
style
要素にlang
属性を設定するとSassが使えます。scoped
は、このファイル内のみにスタイルを適用したい時に使います。
共通スタイルcommon.cssみたいなファイルを全ページで読み込みたい
vueファイルで使いたい時にimportすれば使えるけれど、それでは毎回書かないといけないのでとてもめんどくさい。そんな時は
nuxt.config.js
に書きます。nuxt.config.js
module.exports = { css: [ { src: '~/assets/sass/common.scss', lang: 'scss' }, ], };
その他気をつけることなど
-
nuxt.config.js
の更新を反映するには、アプリケーションの再起動が必要です。 -
~
または@
を使うことで、ルートにアクセスできます(エイリアス-別名-)
コメント
コメントを投稿