普段はWebフロントやスマホアプリ開発をしていますが、基本的にBtoBが多いのでデザインが入ることは稀です。 なので、BootstrapなどのCSSフレームワークに頼りがちなのですが、ここ何年かだとTailwindの隆盛が目につきます。 実際に触ったこともあるので、どういうものかは理解できますが、改めてBootstrapなどと比べて「ここが違う」といったことをまとめた機会がなかったので調べてみました。
Bootstrap
やTailwind
についての記事を読むにあたって「CSSフレームワーク」と「UIライブラリ」という表現が散見されました。
明確な定義がされているわけではなさそうでしたが、どうも文脈的に以下のような使い分けで良さそうです。
主には「クラス名」単位でデザインを提供する。
例えばBootstrap
におけるbtn
クラスが「ボタンの一般的なデザイン」を提供している。
ポイントはJS
などを特に介していない単純なCSS
ファイルの塊であるということで、極端な話 「CDNからインポートして使えるかどうか」 がCSSフレームワークであるかどうかの指標といえる。
ほぼ「コンポーネント」を提供するライブラリと考えてよい。 ※なので厳密には「コンポーネントUIライブラリ」なのかも。
Bootstrap
の例でいうとreact-bootstrap
などは「Bootstrap
のデザインReact
が使えるコンポーネント単位」で提供してくれているので、UIライブラリといえる。
その性質上、基本的にはNodeJS
などがマストである。
言わずと知れたCSSフレームワーク。
かつてはjQuery
に依存していたが、v5
移行はそうでなくなった。
シェアも高く、長年この界隈で上位に居続けている。
公式:https://tailwindcss.com/ ユーティリティファーストを謳っており、CSSプロパティのショートハンドのようなクラスを提供する。 従って、基本的に個々のクラスがデザインを持っているわけではなく、それらを組み合わせてデザインを作っていく。
Bootstrap
とTailwind
の違いを理解するためには同じようなUIを書いてみるといいかなと思い、実装してみました。
以下のようなボタンをサンプルとします。
まずはBootstrap
で実装したコード。
<!-- header bodyなどは割愛-->
<div class="d-flex h-100">
<button class="btn btn-warning m-auto">
Click me
</button>
</div>
続いてTailwind
。
<!-- header bodyなどは割愛-->
<div class="bg-white h-full flex flex-col justify-center items-center">
<button type="button" class="bg-yellow-400 text-gray-800 rounded hover:bg-yellow-300 px-4 py-2 focus:outline-none">
Click me
</button>
</div>
Bootstrap
のbtn
にはボタンの丸みや色、枠線など諸々のプロパティがまとまっているTailwind
は上記のプロパティを持つクラスを組み合わせる従って、コードだけ見るとTailwind
の方が基本的には長くなる
Tailwind
側にも@apply
という機能があり、それを使えば同等の短さにできるただ、Bootstrap
の方がカスタマイズがしにくい
Bootstrap
っぽさ」はこれが原因Tailwind
の方が柔軟に対応できそうとはいえ現代でTailwind
を使うと、漏れなくNodeJS
が付いてくるので、デザイナの人によっては対応してもらえないかも
Tailwind
にせよBootstrap
にせよ、「モーダルの開閉」などの状態はJS
で管理する必要があります。
かつてはjQuery
が担っていて、今ではRedux
やRecoil
などの範疇です。
だた最近では、JS
レスを謳っているDaisyUI
というものがあるらしく、Tailwind
をラップしているようです。
今回はBootstrap
やTailwind
を比較して、それぞれの良し悪しを自分の中でまとめたものを記事にしました。
昨今ではデザイナでもゴリゴリJS
を触るし、プログラマでもCSS
のことを分かってないといけないと思うので、そう言う意味ではTailwind
が時代にマッチしているのかなと感じました。
如何せん流行り廃りの激しい分野なので、こまめに最新情報をチェックする必要があると思います。