未分類

【保存版】Tailwind CSSのクラス名、1個ずつ丁寧に読み解いてみた〜フォームUI編〜

「このTailwindのクラス名、なんとなくコピペしているけど、実際に何をやっているのかよくわかっていない…」

私もそうでした。特にフォームのUI部分は、クラスが多くて読むだけでお腹いっぱいになってしまいます。

そこで今回は、実際に使ったフォームUIのTailwindクラスを、ひとつずつ丁寧に読み解いてみました。「なんとなく動いているコード」を「ちゃんと理解して書けるコード」に変えるきっかけになれば嬉しいです。


テキスト入力(<input type="text">)のクラスを読む

まずはテキスト入力欄のクラスから見ていきましょう。

"flex-1 rounded-md border border-zinc-700 bg-zinc-800 px-3 py-2"
クラス意味
flex-1親要素の残りの幅を全部占有する(横いっぱいに広がる)
rounded-md角を中程度に丸める
border1px の枠線をつける
border-zinc-700枠線の色をダークグレー(zinc-700)にする
bg-zinc-800背景色をさらに暗いグレー(zinc-800)にする
px-3左右の内側余白を 12px にする
py-2上下の内側余白を 8px にする

flex-1は「フレックスコンテナの中で残りのスペースを全部使う」という指定です。隣にボタンがある場合、ボタンのサイズは固定で、入力欄だけが残りのスペースいっぱいに広がるイメージです。

次にテキストスタイルです。

"text-sm text-zinc-100 placeholder-zinc-500"
クラス意味
text-sm文字サイズを小さめ(14px)にする
text-zinc-100文字色をほぼ白にする
placeholder-zinc-500プレースホルダーの色をグレーにする

ダークUIでは、入力テキストはほぼ白(zinc-100)にして、まだ何も入力していないときのガイドテキスト(プレースホルダー)は控えめなグレー(zinc-500)にするのがよく使われるパターンです。

最後にフォーカス時の見た目。

"focus:border-indigo-500 focus:outline-none"
クラス意味
focus:border-indigo-500フォーカス時(クリック時)に枠線をインディゴ色にする
focus:outline-noneフォーカス時のブラウザデフォルト枠を消す

focus:outline-noneは、ブラウザが自動でつける「青い輪っか」を消すためのものです。ただし、アクセシビリティの観点から、outlineを消す場合は代わりにfocus:border-indigo-500のような視覚的フィードバックを必ずセットで用意しましょう。このコードはその模範例になっています。


ラベル(<label>)のクラスを読む

"text-xs text-zinc-500 whitespace-nowrap"
クラス意味
text-xs文字サイズをさらに小さく(12px)にする
text-zinc-500文字色を中間グレーにする
whitespace-nowrapテキストが折り返さないようにする

whitespace-nowrapは、「重み」「件数」などの短いラベルが途中で改行されてしまうのを防ぎます。横並びのレイアウトで特に効いてくるクラスです。


数値入力(<input type="number">)のクラスを読む

"w-16 rounded-md border border-zinc-700 bg-zinc-800 px-2 py-2"
クラス意味
w-16横幅を固定 64px にする(数字1〜2桁が入るサイズ)
rounded-md角を丸める
border / border-zinc-700ダークグレーの枠線
bg-zinc-800暗いグレー背景
px-2 / py-2内側余白を 8px

テキスト入力との違いは、flex-1の代わりにw-16幅を固定している点です。数字は1〜2桁しか入らないので、広げる必要がないわけですね。

"text-sm text-zinc-100 text-center"

text-centerで数字を中央揃えにしているのも、数値入力ならではの細かい配慮です。

⚠️ バグメモfocuss:outline-nonesが2つ)はタイポです。正しくはfocus:outline-noneです。Tailwindのクラスは存在しないものは単純に無視されるので、エラーは出ませんが効いていません。こういうミスは気づきにくいので要注意です。


ボタン(<button>)のクラスを読む

"rounded-md bg-indigo-600 px-4 py-2 text-sm font-medium text-white"
クラス意味
rounded-md角を丸める
bg-indigo-600背景をインディゴ(青紫)にする
px-4左右の余白を 16px
py-2上下の余白を 8px
text-sm文字サイズを小さめに
font-mediumフォントの太さを中程度に(500)
text-white文字色を白に
"transition-colors hover:bg-indigo-500 disabled:opacity-50 disabled:cursor-not-allowed"
クラス意味
transition-colors色の変化にアニメーションをつける
hover:bg-indigo-500マウスを乗せたとき背景を少し明るいインディゴにする
disabled:opacity-50ボタンが無効のとき半透明にする
disabled:cursor-not-allowedボタンが無効のとき、マウスカーソルを「禁止」マークにする

disabled:系のクラスは、UIの状態をユーザーに伝えるうえでとても重要です。「なんかクリックできない?」ではなく「あ、これは今使えないんだ」とひと目でわかるようにする工夫です。


色の体系を理解する(zinc / indigo)

Tailwindにはzincindigoという2つのカラーパレットが登場します。

名前イメージ数字が大きいほど
zinc-xxxグレー系暗くなる
indigo-xxx青紫系暗くなる

グレーの流れをおさえておくと、コードを読むのがぐっと楽になります。

zinc-100(ほぼ白)→ zinc-500(中間グレー)→ zinc-700/800(ダーク)
  • テキスト色zinc-100(明るく読みやすい)
  • プレースホルダーzinc-500(控えめ)
  • 枠線・背景zinc-700 / zinc-800(ダークUI向け)

このように、数字の意味を知っておくだけで「この色は何のため?」がすぐわかるようになります。


まとめ

今回はフォームUIを例に、Tailwind CSSのクラスをひとつずつ読み解いてみました。私なりに整理したポイントはこんな感じです。

  • flex-1w-16 の使い分け(伸びる vs 固定)
  • focus:outline-none は視覚的フィードバックとセットで使う
  • disabled: 系クラスでUI状態をユーザーに伝える
  • zinc / indigoのカラー体系を数字で理解する

「なんとなくコピペしていたコード」が、少しでも「意図を持って書けるコード」に変わるきっかけになれば嬉しいです。