👏

LaravelでTailwind CSSを使ってみた

2021/06/28に公開

laravel8ではbootstrapではなく tailwind cssが標準になったとのことで、使ってみました。
めちゃくちゃ良いですね、設定ファイルに設定して、それを全体共通で使用できるのがとても便利でした。

tailwind cssを使うまでの準備

tailwind cssが使えるようになるまでの準備をしていきます

Tailwind CSSをインストールする

npm install tailwindcss --save-dev 

もともと入っている方は入れる必要ないかと思いますが、僕の場合はインストールする必要がありました。

configファイルを作成する

tailwind cssの設定ファイルを作成します。

$ ./node_modules/.bin/tailwind init
Created Tailwind CSS config file: tailwind.config.js

出力されたファイル(tailwind.config.js)はこんな感じです

module.exports = {
  purge: [],
  darkMode: false, // or 'media' or 'class'
  theme: {
    extend: {},
  },
  variants: {
    extend: {},
  },
  plugins: [],
}

ここに、全体の共通のスタイルの設定とかを書いていくみたいです!!

app.scssでtailwind cssをインポート

// Tailwond CSS
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';

webpack.mix.jsを下記のように変更します

const mix = require('laravel-mix');
const tailwindcss = require('tailwindcss');

mix.js('resources/js/app.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css')
    .options({
        processCssUrls: false,
        postCss: [ tailwindcss('./tailwind.config.js') ],
    });

configファイルにプロジェクトで使用する「色」を設定してみた

tailwind.config.js にプロジェクトごとの設定をバシバシ書いていくと超便利になります

今回は色を試してみました。

module.exports = {
  purge: [],
  darkMode: false, // or 'media' or 'class'
  theme: {
    colors: {
      main: {
        light: '#D0FBF8',
        DEFAULT: '#15ebde'
      },
      gray: {
        light: '#999999',
        DEFAULT: '#999999'
      },
      black: {
        DEFAULT: '#555555'
      },
      orange: {
        DEFAULT: '#FF6347'
      }
    },
    extend: {

    },
  },
  variants: {
    extend: {},
  },
  plugins: [],
}

この設定をすることで、 「.bg-main」や「.bg-main-light」「.text-main」「.text-main-light」などのクラスが使えるようになります

色が本当に変わるのか確認してみます。

text-main というクラスをいれると、 文字色が #15ebde になるはずなのですが...

<div class="h-full flex justify-center items-center text-main">テストテキスト</div>

文字色が #15ebde になってます!すごい!

次に、 text-main-light を指定して、文字色が #D0FBF8 になるか確認してみます。

<div class="h-full flex justify-center items-center text-main-light">テストテキスト</div>

文字色が変わりましたねー。 #D0FBF8 になりました。
設定ファイルに使用する色を全部書いておいて、それに基づいてクラスが自動生成されるのはすごく良いですね。

ではバックグラウンドカラーも試してみます^^
bg-main というクラスを付与したら背景色が #15ebde になるはずです

<div class="h-full flex justify-center items-center bg-main">テストテキスト</div>

変わりましたね!

laravelだと _variable.scss に定数をいれたりしていましたが、 tailwind cssを使用するならこっちにまとめちゃってもいいかもしれないですね。

hoverなどのアクション時はどうすれば?

hoverなどのアクションを tailwind cssでは variants と呼んでるみたいです。

例として hoverのときに opacityを0.7にするというのを tailwind cssで実装してみたいと思います。

まずは設定ファイルで hover時に opacityを変更するのを許容する設定を書きます

module.exports = {
  theme: {
    variants: {
      opacity: ['hover'] // hover時のopacityを許可する
    }
  },
}

そしてクラスはこのように書きます hover:opacity-70
これだけでhover時に opacityが0.7になります。めっちゃかんたん〜!

pugとかのテンプレートエンジンを使うならvariantsの「:」を使えないので、「:」という装飾子が使えないので、それの代わりになるものを設定できるみたいです。

module.exports = {
  separator: '_',
  theme: {
    variants: {
      opacity: ['hover'] // hover時のopacityを許可する
    }
  },
}

こうすると、pugでは .hover_opacity-70 のように書くことができます。
これでpugなどのほかのテンプレートエンジンでも差し支えなく使用できますね。

tailwind cssを使用して自分なりのCSSクラスを作る(@apply)

@applyを使って、何回も出てくる同じ記述をまとめることもできます

<div class="hover_opacity-70 cursor-pointer no-underline">クリックできる要素</div>

これをcssでカスタムクラスを作るとこのようになります。

.clickable {
    @apply hover_opacity-70 cursor-pointer no-underline
}

↓作成したカスタムクラスを適用します

<div class="clickable">クリックできる要素</div>

僕はこのclickableを今後愛用しそうです(笑)
他にも僕がよく使いまわしてるなーって思う記述は, flex系(display: flex, align-items: center, justify-content: space-between) とか

こういうのは自分のクラスを使って一つにまとめるのは良いかなーと思います。

VSCodeでtailwind css使うなら拡張機能使わないと損だぜ!

tailwind cssのvscode拡張機能が優秀すぎました。なんでも補完してくれるんだもの。
自分でconfigファイルに設定したものも補完してくれるんですよ、すごすぎませんか。

VSCodeで拡張機能をいれる

vscodeのsetting.jsonに下記を記述します

 "tailwindCSS.includeLanguages": {
    "plaintext": "vue"
  },
  "tailwindCSS.emmetCompletions": true

補完してくれることを確認する

marginのpxも教えてくれるなんて...

スクショ取り忘れましたが、自分で指定した色とかも補完してくれます bg-main とか text-gray-light とかとか。最強すぎます。

終わりに

Tailwind CSS結構気に入ったのでしばらく愛用しそうです。
VSCodeの拡張機能もとても便利だし、設定がまとめられるのは嬉しいですね。

気になった方はすぐさま使ってみてください!

Discussion