【Tailwind和訳】CUSTOMIZATION/Breakpoints
この記事について
この記事は、CUSTOMIZATION/Breakpointsの記事を和訳したものです。
記事内で使用する画像は、公式ドキュメント内の画像を引用して使用させていただいております。
Breakpoints
プロジェクトのデフォルトブレークポイントをカスタマイズする。
基本的なカスタマイズ
プロジェクトのブレイクポイントは、tailwind.config.js
ファイルのtheme.screens
セクションで定義します。キーはスクリーン名(md:text-center
のように、Tailwind が生成するレスポンシブ・ユーティリティー・バリエーションのプレフィックスとして使用されます)で、値はブレークポイントが開始されるべきmin-width
です。
デフォルトのブレイクポイントは、一般的なデバイスの解像度からヒントを得ています。
module.exports = {
theme: {
screens: {
'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) { ... }
}
}
}
スクリーンの数は自由に設定でき、名前もプロジェクトに合わせて好きなように付けられます。
例えば、サイズの代わりにデバイス名を使うこともできます。
module.exports = {
theme: {
screens: {
'tablet': '640px',
// => @media (min-width: 640px) { ... }
'laptop': '1024px',
// => @media (min-width: 1024px) { ... }
'desktop': '1280px',
// => @media (min-width: 1280px) { ... }
},
}
}
これらのスクリーンネームはユーティリティーに反映されますので、text-center
のユーティリティーは以下のようになります。
.text-center {
text-align: center;
}
@media (min-width: 640px) {
.tablet\:text-center {
text-align: center;
}
}
@media (min-width: 1024px) {
.laptop\:text-center {
text-align: center;
}
}
@media (min-width: 1280px) {
.desktop\:text-center {
text-align: center;
}
}
デフォルトのブレイクポイントを拡張する
より大きなブレイクポイントを追加する最も簡単な方法は、extend
キーを使うことです。
module.exports = {
theme: {
extend: {
screens: {
'3xl': '1600px',
},
},
},
variants: {},
plugins: [],
}
小さなブレークポイントを追加したい場合、extend
を使用することはできません。なぜなら、小さなブレークポイントはブレークポイントリストの最後に追加されるからです。
代わりに、screens
キー全体をオーバーライドして、デフォルトのブレイクポイントを再指定します。
const defaultTheme = require('tailwindcss/defaultTheme')
module.exports = {
theme: {
screens: {
'xs': '475px',
...defaultTheme.screens,
},
},
variants: {},
plugins: [],
}
Max-width breakpoints
min-width
ではなくmax-width
のブレイクポイントで作業したい場合は、max
キーを持つオブジェクトとして画面を指定することができます。
module.exports = {
theme: {
screens: {
'2xl': {'max': '1535px'},
// => @media (max-width: 1535px) { ... }
'xl': {'max': '1279px'},
// => @media (max-width: 1279px) { ... }
'lg': {'max': '1023px'},
// => @media (max-width: 1023px) { ... }
'md': {'max': '767px'},
// => @media (max-width: 767px) { ... }
'sm': {'max': '639px'},
// => @media (max-width: 639px) { ... }
}
}
}
必ずmin-width
のブレイクポイントとは逆の順序でリストアップし、期待通りにお互いをオーバーライドするようにしてください。
例えば、必要に応じてmin-width
とmax-width
の両方を定義したブレイクポイントを作成することもできます。
module.exports = {
theme: {
screens: {
'sm': {'min': '640px', 'max': '767px'},
'md': {'min': '768px', 'max': '1023px'},
'lg': {'min': '1024px', 'max': '1279px'},
'xl': {'min': '1280px', 'max': '1535px'},
'2xl': {'min': '1536px'},
},
}
}
マルチレンジのブレークポイント
1 つのブレークポイント定義を複数の範囲に適用できると便利な場合があります。
例えば、サイドバーがあり、ブレイクポイントをビューポート全体ではなく、コンテンツエリアの幅に基づいて設定したいとします。サイドバーが表示されてコンテンツエリアが縮小したときに、ブレークポイントの 1 つが小さいブレークポイントにフォールバックすることで、これをシミュレートできます。
module.exports = {
theme: {
screens: {
'sm': '500px',
'md': [
// Sidebar appears at 768px, so revert to `sm:` styles between 768px
// and 868px, after which the main content area is wide enough again to
// apply the `md:` styles.
{'min': '668px', 'max': '767px'},
{'min': '868px'}
],
'lg': '1100px',
'xl': '1400px',
}
}
}
カスタムメディアクエリ
ブレークポイントに対して完全にカスタムなメディアクエリを提供する必要がある場合は、raw
キーを持つオブジェクトを使って行うことができます。
module.exports = {
theme: {
extend: {
screens: {
'portrait': {'raw': '(orientation: portrait)'},
// => @media (orientation: portrait) { ... }
}
}
}
}
プリント用のスタイリング
raw
オプションは、印刷用に特別に異なるスタイルを適用する必要がある場合に特に便利です。
必要なのは、theme.extend.screens
の下にprint
スクリーンを追加することだけです。
module.exports = {
theme: {
extend: {
screens: {
'print': {'raw': 'print'},
// => @media print { ... }
}
}
}
}
そして、print:text-black
のようなクラスを使って、作業中のページを誰かが印刷しようとしたときにだけ適用されるスタイルを指定することができます。
<div class="text-gray-700 print:text-black">
<!-- ... -->
</div>
Discussion