※Tailwind CSSのチートシート兼プレイグラウンドを作りました。よかったら見ていってください。
Tailwind CSSでレスポンシブデザインを実現するには、ブレイクポイント接頭辞を使う。この接頭辞が付いたクラス名は、接頭辞に対応するスクリーン幅の時にのみ適用される。
デフォルトでは、以下の5つの接頭辞が指定できる。
5つのブレイクポイント接頭辞
公式ドキュメントのレスポンシブデザインのページの冒頭に「ブレイクポイント接頭辞(’Breakpoint prefix’)」と書いてあったので、本記事ではそのまま表記した。
しかし、読み進めると「レスポンシブ修飾子」とも呼ぶようだ。後述の修飾子とひっくるめて理解できるので、後者の方が直感的でわかりやすいかもしれない。
接頭辞 | ブレイクポイント | 対応するCSS |
---|---|---|
sm |
640px |
@media (min-width: 640px) { ... } |
md |
768px |
@media (min-width: 768px) { ... } |
lg |
1024px |
@media (min-width: 1024px) { ... } |
xl |
1280px |
@media (min-width: 1280px) { ... } |
2xl |
1536px |
@media (min-width: 1536px) { ... } |
ブレイクポイントの指定は、class="w-16 md:w-32 lg:w-48"
のように行う。
これらの接頭辞は、覚えやすいようで意外に忘れる(歳のせいとは認めない)。頭文字がsmlx2なので、「スマイルx2😀😀」と覚えてみる。
また、それぞれの接頭辞、特にsm
がmin-width
というメディア特性で指定されている点には注意したい。「sm
というからには、小さいスクリーンぜんぶサポートしてくれるじゃろ」と誤解するケースが多い。とドキュメントに書いてあった。
すべての範囲で適用したいスタイルは、まず無印のクラス名で指定する。その上で、ブレイクポイント接頭辞を使って各スクリーンサイズに応じたスタイルを連ねていく。これが、Tailwind CSSでレスポンシブデザインを実現する際のセオリーである。
上記のコードでは、iframeに動的にHTMLを埋め込み、その中でCDNを利用してTailwind CSSを使っている。ただし、これはあくまでサンプル用のコードで、本番環境でのCDNの利用は推奨されない(重たいから)。
任意のビルドツールを使ってトランスパイルすべきである。
範囲を絞る修飾子
ブレイクポイント接頭辞は、そのままだとそれ以降のスクリーン幅すべてに適用される。適用範囲を絞りたい時は、max-*
という形の修飾子を使って、上限を定める。例えば768px-1280px
までの範囲で非表示にしたい場合は、sm:max-xl:none
のように記述する。
修飾子の種類は、以下の通り5つの接頭辞と対応している。
修飾子 | 対応するCSS |
---|---|
max-sm |
@media not all and (min-width: 640px) { ... } |
max-md |
@media not all and (min-width: 768px) { ... } |
max-lg |
@media not all and (min-width: 1024px) { ... } |
max-xl |
@media not all and (min-width: 1280px) { ... } |
max-2xl |
@media not all and (min-width: 1536px) { ... } |
@media not all and (min-width: XXpx)
は、「XXpx
以上ではない時」に適用、という意味である。
これらは単体でも使える。例えば640px
未満でテキストを青くする時などはmax-sm:text-blue-700
のように書く。
ブレイクポイントをカスタムする
ブレイクポイントをカスタムするには、tailwind.config.js
のtheme.screens
プロパティに定義を追加する。
接頭辞の上書き・追加
デフォルトの接頭辞を上書きしたり、追加したり場合は以下のように書く。
screens
に指定するオブジェクトは、キーと値のそれぞれが接頭辞とブレークポイントに対応する。上記ではデフォルトと同じ接頭辞名に違う値を指定しているが、接頭辞名自体を変更することもできる。
例えば、sm
をtablet
、xl
をlaptop
などに変更することができる。
注意したいのは、theme.screens
プロパティを上書きすると、既存の設定が丸ごと上書きされる点である。つまり記述していないデフォルトのlg
や2xl
は使えなくなる。
一部のブレイクポイントだけを変更したいときは、theme.screens
プロパティではなく、theme.extend.screens
プロパティに上書き用の定義を追加する。
extend
以外は同じなので、書き間違いに注意したい。
設定を上書き・追加するデモ
メディア特性をカスタムする
デフォルトでは、メディア特性にmin-width
が使われる。これを変更するオプションもある。
min-widthとmax-widthで範囲を絞る
以下のようにすると、min-width
ではなくmax-width
を使ったり、両者を併用して範囲を絞り込んだりできる。
1つの接頭辞に複数範囲を設定する
接頭辞名に配列を指定することで、1つの接頭辞に対して複数の範囲を設定できる。
この例では、768px-867px
の範囲でmd
接頭辞のクラスが適用される。868-949px
の範囲でsm
接頭辞の範囲に戻り、945px
から再びmd
接頭辞のクラスが適用される。
メディア特性を任意に指定する
接頭辞に対して、メディア特性を指定することもできる。これには、{'raw':任意のメディア特性}
という形式のオブジェクトを修飾子に指定する。
例えば以下のような具合である。
(orientation: landscape)
は横長、(orientation: portlait)
は縦長のスクリーンで適用される。単純なレスポンシブデザインを実現したいときに重宝する。
設定を上書き・追加するデモ2
とりあえず、レスポンシブ接頭辞(あるいは修飾子)と、これらメディアクエリ絡みの設定方法の2つを覚えておけば、Tailwind CSSでも問題なくレスポンシブデザインを組めるかと思う。