カテゴリー: FrontEnd

Tailwind CSSの基礎とVue.jsへの導入

はじめに

よく使われるCSSフレームワークの一つであるBootstrapは、フロントエンド開発にRreactやVue.jsが用いられることが多くなった昨今では、あまり使用されなくなってきているようです。代わりに、Tailwind CSSの採用が増えてきているようなので、概要とBootstrapとの違いについてまとめてみようと思います。

Tailwind CSSとは

Tailwind CSSはUtility FirstをコンセプトとしたCSSフレームワークです。このコンセプトでは、コンポーネントではなく、utility classを用いてページをデザインしていきます。

utility class

utility classを用いた場合とコンポーネントを用いた場合で、どのような違いが有るか、コンポーネント側の例としてBootstrapと比較して説明します。

Bootstrapでボタンを表示する際は以下のようなコードになります。

<button class="btn btn-primary" type="button">Click Me!</button>

一方、Tailwind CSSを用いた場合だと、以下のようなコードになります。

<button class="bg-blue-500 text-white font-bold py-2 px-4 rounded">Click Me!</button>

このように、Bootstrapでは、btnというコンポーネントが定義されていて、それを適用しますが、Tailwind CSSでは、classを自分で組み合わせてボタンを作る必要があります。

Bootstrapとの比較

ここでは、柔軟性、コード量、学習コスト、ファイルサイズ、その他について、Bootstrap比較してみます。

柔軟性

デザインの柔軟性では、Tailwind CSSのほうが優れています。Bootstrapで標準で用意されているのは、塗りつぶしたボタンか、アウトラインのボタンのどちらかで、角丸の大きさの調整など、細かな調整にはひと手間かかります。

一方、Tailwind CSSでは、色、フォントの太さ、ホバー時の変化など、クラスを組み合わせることで好きなボタンを表現することができます。

コード量

コード量は、Bootstrapの方が少なくなります。utility classの説明で例にあげたように、Bootstrapでは、btnbtn-primaryを書くだけですが、

<button class="btn btn-primary" type="button">Click Me!</button>

Tailwind CSSでは、たくさんのクラスを書く必要があります。

<button class="bg-blue-500 text-white font-bold py-2 px-4 rounded">Click Me!</button>

ただし、Tailwind CSSには@applyという書き方で、Tailwind CSSのクラスをまとめた独自のclassを定義することができるので、短い記述で済ませることもできます。

.btn-primary {
  @apply bg-blue-500 text-white font-bold py-2 px-4 rounded
}

学習コスト

学習コストは、体感ですがBootstrapのほうがclassの数が少ないので、Bootstrapのほうが少なくて済むと思います。

ファイルサイズ

Tailwind CSSはPurgeCSSに対応していて、公式曰く、だいたい10KBほどのサイズで済むそうなので、Tailwind CSSのほうが少なくなるでしょう。

その他

Tailwind CSSの特徴として、JavaScriptに依存していないという点があります。BootstrapはモーダルなどでBootstrapのJavaScriptに依存していて、それがReactやVue.jsと組み合わせた際にネックになるケースがあります。

反面、Tailwind CSS自体はモーダルなどのコンポーネントを提供していないので、他のフレームワークと組み合わせる必要があります。

なぜTailwind CSSが流行っているのか

Tailwind CSSが流行っている背景として、ReactやVue.jsなどのフレームワークを用いた開発が主流になっていることがあげられます。クラス名を考えるコストは高いですが、これらのフレームワークはCSSにスコープをもたせることができるため、機能にあったクラス名を考えるコストに対して、得られるメリットが少なくなってきています。

また、Tailwind CSSでは一つの要素に対して複数のクラスを付ける必要があるため、複数の画面で直接記述することは大変ですが、これらのフレームワークを使ってコンポーネント化してしまえば、一度の記述で済みます。よって、Tailwind CSSはこれらのフレームワークと合わせて使われるのが前提ではないでしょうか。

Tailwind CSSでの書き方

一般的によく使うもので、Tailwind CSSではどう書くか見てみましょう。

Font Size

Font Sizeは13段階あります。

text-xs font-size: 0.75rem; line-height: 1rem;
text-sm font-size: 0.875rem; line-height: 1.25rem;
text-base font-size: 1rem; line-height: 1.5rem;
text-lg font-size: 1.125rem; line-height: 1.75rem;
text-xl font-size: 1.25rem; line-height: 1.75rem;
text-2xl font-size: 1.5rem; line-height: 2rem;
text-3xl font-size: 1.875rem; line-height: 2.25rem;
text-4xl font-size: 2.25rem; line-height: 2.5rem;
text-5xl font-size: 3rem; line-height: 1;
text-6xl font-size: 3.75rem; line-height: 1;
text-7xl font-size: 4.5rem; line-height: 1;
text-8xl font-size: 6rem; line-height: 1;
text-9xl font-size: 8rem; line-height: 1;

hover

hover:xxxx(xxxxは適用したいクラス)の形で書きます。

<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">Click Me!</button>

transition

hover状態になった際の変化の速度を変えるには、duration-xxx(xxxはミリ秒)を使います。

<button class="bg-blue-500 hover:bg-blue-700 duration-1000 text-white font-bold py-2 px-4 rounded">Click Me!</button>

grid

grid-cols-x(xは1行あたりのカラム数)を使います。

<div class="grid grid-cols-3 gap-4">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <!-- 5〜8は省略 -->
    <div>9</div>
</div>

上の例では、3×3マスで1〜9の数字が表示されます。

Responsive

xx:yyyy(xxは幅、yyyyは適用したいクラス)を使います。xxの部分はsmmdlgxl2xlの中から選びます。

<button class="bg-blue-500 md:bg-blue-700 text-white font-bold py-2 px-4 rounded">Click Me!</button>

設定ファイル

utility classに含まれていないカラーなど、独自の設定を追加することができます。

tailwind.config.jsに任意の設定を追加します。例えば、カラーにシアンを追加する場合は、以下のようになります。

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

設定ファイルの変更後には、ビルドを行います。

$ npx tailwind build ./from_pass -o ./to_pass

Purge CSSの設定

Purge CSSで使用していないクラスを削減するように設定します。

module.exports = {
  purge: [
    './src/**/*.html',
    './src/**/*.vue',
  ],
  // 省略
}

上記の場合、src/**/ディレクトリにある拡張子が.html.vueファイルを捜査して、使われていないクラスを削減してくれます。

更に細かい設定をすることができます。

// tailwind.config.js
module.exports = {
  purge: {
    content: [
        './src/**/*.html',
        './src/**/*.vue',
    ],
    safelist: [
      'bg-blue-500',
      'text-center',
    ]
  },
  // ...
}

上記のような設定だと、捜査対象は一緒ですが、bg-blue-500text-centerがコードの中で使われていなくても、ビルド対象に含めることができます。これにより、関数の中でクラスを組み立てるようなケースでも、クラスが正しく反映されるようになります。

Vue.jsと組み合わせる

Vue.jsのプロジェクトで使用するには、Tailwind CSSをインストールし、

$ npm install -D tailwindcss@latest postcss@latest autoprefixer@latest

設定ファイルを作成し、

$ npx tailwindcss init -p

main.jsで生成したcssファイル(./src/index.css)を読み込むようにする必要があります。

/* ./src/index.css */@tailwind base;
@tailwind components;
@tailwind utilities;
// src/main.js
import { createApp } from 'vue'
import App from './App.vue'
import './index.css'

createApp(App).mount('#app')

さいごに

Tailwind CSSの概要、Bootstrapとの比較、Vue.jsで使うための準備などについて紹介しました。

おすすめ書籍

Hiroki Ono

シェア
執筆者:
Hiroki Ono
タグ: VuejsCSS

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

3週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前