Tailwind CSSについて

はじめに

Next.jsでアプリ開発する際、Tailwind CSSを初めて使いました。
通常のCSS設定※とは勝手が大きく異なっていたので、特徴や使ってみた感想をまとめました。

※CSSファイルにclassを用意してプロパティを書いていく方法

Tailwind CSSの特徴

特徴をざっくりと挙げていきます。
Tailwind CSSとは一体...?

クラスを組み合わせてデザインする

Tailwind CSSはユーティリティファーストなCSSフレームワークです。
よく使うCSS設定が、予めクラスとして用意されています(=ユーティリティークラス)。

これらのクラスを組み合わせることで、CSSを書かかずとも良い感じにデザインができます。

例:buttonタグをデザインする

クラスをたくさん設定してみました。
各クラスは以下のCSS設定を意味します。

  • box-border → box-sizing: border-box
  • py-2 px-4 → padding: 8px 16px
  • bg-blue-500 → background-color: #3B82F6
  • hover:bg-blue-700 → :hover時にbackground-color: #1D4ED8
  • text-white → color: #fff
  • font-bold → font-weight: bold
  • rounded → border-radius: 4px

下記のCSS設定と同じです。

CSSの記載が少ない

上で挙げた特徴により、基本的にCSSを書く必要が無くなります。

例:任意のpaddingを設定する

padding: 4pxp-1padding: 8pxp-2をクラス設定すればデザインできます。
padding: 6pxのように任意の値を設定したい場合、クラス名はそのまま、値だけ変更が可能です。

カスタマイズできる

カスタムクラスを作成することも可能です。
今回は弊社のコーポレートカラー(だと思われる)#00459cを使って、sat-blueクラスを作ってみます

例:sat-blueクラスを作成する

tailwind.config.ts(または.js)で、下記のように記載します。

sat-blueクラスを設定してみます。
今回はNext.jsアプリのBoxコンポーネントで使ってみました。

クラス名として認識されています!

レスポンシブ対応にはprefixを使う

Tailwind CSSはモバイルファースト(=最小画面)の考え方を採用しています。
最小画面を基準にデザインを設定し、prefixを使ってレスポンシブなデザイン設定していきます。

上記の場合、デフォルトではwidth: 8pxです。
prefixのブレークポイントごとにwidthが大きくなります。
以下は公式ページに掲載されているprefix対応表です。

prefix 最小幅 CSS
sm 40rem (640px) @media (width >= 40rem) { ... }
md 48rem (768px) @media (width >= 40rem) { ... }
lg 64rem (1024px) @media (width >= 40rem) { ... }
xl 80rem (1280px) @media (width >= 40rem) { ... }
2xl 96rem (1536px) @media (width >= 40rem) { ... }

メリットとデメリット

Tailwind CSSのメリットとデメリットをまとめました。

メリット:

  1. クラスを用意、管理する手間が減る
  2. デザインの一貫性が保たれる
  3. CSSファイルの記載量が減り、肥大化を防げる
  4. レスポンシブ対応が簡単に設定できる
    デメリット:
  5. HTMLのclassが長くなる
  6. クラスを覚える必要がある

使ってみた感想

個人的には「クラスを用意、管理する手間が減る」に最もメリットを感じました。

クラスを用意するとき、大体下記の流れになると思います。

  1. 同じ部品かどうか、まとまりを考える
  2. クラスを命名、設定する
  3. クラスにCSS設定していく

「クラス名が重複してないか、適切か、他と干渉してないか、壊れてないか」など、クラスを用意&管理するのには結構な労力がかかります。
とても大変…

また、Next.jsのようにコンポーネント指向でWebアプリを作る場合、コンポーネントとCSSファイルを行き来するのも割と大変です。

コンポーネントは再利用するものなので、使いまわせるCSS設定
=クラスをわざわざ用意する必要は無い
=コンポーネントに直接、CSS設定しよう!
という考え方なのかなと思いました。

また、使いまわす場所によってコンポーネントの役割は変わるので、クラスを命名するのも難しい気がします。

とは言え、デメリットに挙げた「HTMLのclassが長くなる」点は可読性が下がるので、何かいい案が無いものでしょうか…

おわりに

Tailwind CSSを使うことで、デザイン設定がとても樂になりました。
通常のCSS設定に慣れていたので、最初は拒絶反応が強かったです。
しかし、使っていく中でコンポーネント指向のアプリ開発と相性が良いいことに気が付きました。

ちなみにtailwindとは「追い風」という意味だそうです🌬️