勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

CSSフレームワークであるTailwind CSSの特徴とBootstrapとの違いについて

  CSS

あるサイトをWappalyzerで調査していた際にUIフレームワークがTailwind CSSになっていた。Bootstrapだとよく見るけどTailwind CSSというのは初めて見たので何なのか調べてみるとCSSのフレームワークとのこと。以下に簡単な特徴、Bootstrapとの違い等をメモ。

 

公式サイト

公式サイト

https://tailwindcss.com/

CDN

https://tailwindcss.com/docs/installation/play-cdn

 

特徴について

CSSフレームワークになりBootstrapとの違いは以下の通り。

汎用classのみ用意されており組み合わせて使う必要あり

ここが大きな違いでBootstrapだとボタンやアラート等、部品ごとにClassが用意されていたがTailwind CSSは汎用Classのみ用意されており、それらを組み合わせて記述する必要がある。そのためある程度CSSの知識が必要になりそう。

メリットとしてBootstrapよりデザインにオリジナリティを出しやすい(Bootstrapは似たデザインになりがち)。

デメリットとしてはある程度CSSの知識が必要になりそうな点と、Bootstrapよりソースコードが長くなりそうな点。

例えばだけど公式サイトを参考にサンプルページを作成したところ、以下のようなソースコードとなりClass部分の記述がBootstrapに比べて多い。

<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Tailwind CSSのサンプル</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body>
    <div class="container">
        <form class="w-full mt-5">
            <div class="flex flex-wrap -mx-3 mb-6">
                <div class="w-full md:w-1/2 px-3 mb-6 md:mb-0">
                    <label class="block uppercase tracking-wide text-gray-700 text-xs font-bold mb-2" for="grid-first-name">
                        First Name
                    </label>
                    <input class="appearance-none block w-full bg-gray-200 text-gray-700 border border-red-500 rounded py-3 px-4 mb-3 leading-tight focus:outline-none focus:bg-white" id="grid-first-name" type="text" placeholder="Jane">
                    <p class="text-red-500 text-xs italic">Please fill out this field.</p>
                </div>
                <div class="w-full md:w-1/2 px-3">
                    <label class="block uppercase tracking-wide text-gray-700 text-xs font-bold mb-2" for="grid-last-name">
                        Last Name
                    </label>
                    <input class="appearance-none block w-full bg-gray-200 text-gray-700 border border-gray-200 rounded py-3 px-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500" id="grid-last-name" type="text" placeholder="Doe">
                </div>
            </div>
            <div class="flex flex-wrap -mx-3 mb-6">
                <div class="w-full px-3">
                    <label class="block uppercase tracking-wide text-gray-700 text-xs font-bold mb-2" for="grid-password">
                        Password
                    </label>
                    <input class="appearance-none block w-full bg-gray-200 text-gray-700 border border-gray-200 rounded py-3 px-4 mb-3 leading-tight focus:outline-none focus:bg-white focus:border-gray-500" id="grid-password" type="password" placeholder="******************">
                    <p class="text-gray-600 text-xs italic">Make it as long and as crazy as you'd like</p>
                </div>
            </div>
            <div class="flex flex-wrap -mx-3 mb-2">
                <div class="w-full md:w-1/3 px-3 mb-6 md:mb-0">
                    <label class="block uppercase tracking-wide text-gray-700 text-xs font-bold mb-2" for="grid-city">
                        City
                    </label>
                    <input class="appearance-none block w-full bg-gray-200 text-gray-700 border border-gray-200 rounded py-3 px-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500" id="grid-city" type="text" placeholder="Albuquerque">
                </div>
                <div class="w-full md:w-1/3 px-3 mb-6 md:mb-0">
                    <label class="block uppercase tracking-wide text-gray-700 text-xs font-bold mb-2" for="grid-state">
                        State
                    </label>
                    <div class="relative">
                        <select class="block appearance-none w-full bg-gray-200 border border-gray-200 text-gray-700 py-3 px-4 pr-8 rounded leading-tight focus:outline-none focus:bg-white focus:border-gray-500" id="grid-state">
                            <option>New Mexico</option>
                            <option>Missouri</option>
                            <option>Texas</option>
                        </select>
                        <div class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700">
                            <svg class="fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z"/></svg>
                        </div>
                    </div>
                </div>
                <div class="w-full md:w-1/3 px-3 mb-6 md:mb-0">
                    <label class="block uppercase tracking-wide text-gray-700 text-xs font-bold mb-2" for="grid-zip">
                        Zip
                    </label>
                    <input class="appearance-none block w-full bg-gray-200 text-gray-700 border border-gray-200 rounded py-3 px-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500" id="grid-zip" type="text" placeholder="90210">
                </div>
            </div>
        </form>
    </div>
</body>
</html>

JavaScript不要のため軽量

Bootstrapだと以下のようにJSファイルも読み込む必要があるが、Tailwind CSSは不要なため軽量。

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

 

所感

Tailwind CSSはデザインにオリジナリティが出しやすいもののCSSの知識が必要なため、フロント側の作業をする人に向いてるんじゃないかと思う。自分としてはあまりCSSの知識があるとは言えないので引き続きBootstrapを使用する形になりそう。

 - CSS

  関連記事

tableのtd内にあるcheckboxのクリック範囲を拡大させ、チェック時に親要素であるtdにCSSを割り当てる方法

tableのtd内にcheckboxを設置し、td部分をクリックすることでche ...

CSSのdisplayについて

よく使うdisplayだけれども、noneとblock以外で 初めて使うことがあ ...

要素の表示or非表示

今まで要素の表示or非表示をCSSで操作する際、 display:none; / ...

LINE風のふきだしデザイン

LINE風のふきだしデザインでページを作ってほしいと言われた。 CSSはあまり理 ...

videoタグで表示させた動画をjQuery&CSSでフローティングビデオ対応させる方法

Web上の動画をFloatingVideo対応したいという要望を受けた。ページ上 ...