A page that shows how to use the CSS @media rule to switch layouts and styles based on screen size, orientation, and input devices, with simple examples of the most common media features.
画面サイズやデバイスの特性に合わせて、どの幅・向き・操作環境のときにどんなレイアウトやデザインを適用するかを、CSS の @media で切り替えるための書き方と代表的なメディア特性をまとめたページです。
CSSの @mediaは、画面サイズやデバイスの種類に応じてスタイルを適用するためのルールです。例えば、デスクトップ、タブレット、スマートフォンなど異なるデバイスに対して異なるデザインを提供する際に使用されます。@mediaは「メディアクエリ」と呼ばれ、指定した条件(例えば、画面の幅や高さ、解像度、向きなど)が満たされた場合に、その中のスタイルが適用されます。
簡単な例を挙げると
CSS
@media (max-width: 600px) {
body {
background-color: lightblue;
}
}
この例では、画面幅が600ピクセル以下の場合に、背景色をライトブルーに変更するスタイルが適用されます。@mediaを使うことで、レスポンシブデザイン(異なる画面サイズに適応するデザイン)を簡単に実現できます。
まずは、「どんな画面のときに」「どんなスタイルを当てるか」をセットで書ければOKです。
CSS
@media screen and (min-width: 768px) {
/* 画面幅が 768px 以上のときに適用するスタイル */
.container {
max-width: 960px;
margin: 0 auto;
}
}
この例では、
screen(min-width: 768px).container { ... }といった感じで、「メディアの種類」と「条件」と「そのときのスタイル」をまとめて書きます。よく使うのは screen と幅の条件(min-width / max-width)です。
@mediaに指定できる条件(メディアクエリ)は、デバイスの特性に基づいて多くの種類があります。
ある程度慣れてきたら、「条件を組み合わせる」「幅の範囲をしぼる」といった書き方も覚えておくと便利です。
複数の条件をすべて満たしたときだけスタイルを当てたい場合は、and を使います。
CSS
@media (min-width: 600px) and (orientation: landscape) {
/* 画面幅が 600px 以上 かつ 横向きのとき */
.main {
display: flex;
}
}
この例では、「幅が600px以上」と「横向き」の両方を満たしたときだけ、.main を横並びレイアウトにしています。
カンマで区切ると、「どれか1つでも条件を満たしたら適用する」という意味になります。OR 条件のイメージです。
CSS
@media print, (min-width: 1024px) {
/* 印刷時 または 幅が 1024px 以上のとき */
.sidebar {
display: none;
}
}
この例では、印刷するときや画面が十分広いときにサイドバーを隠しています。
not を付けると、「その条件ではない場合」という意味になります。使う場面は多くありませんが、考え方として知っておくと便利です。
CSS
@media not all and (max-width: 600px) {
/* 600px 以下では ない 画面にだけ適用される */
.wide-only {
border: 2px solid red;
}
}
「あえてこの条件以外に当てたい」といった場面で使えますが、少し読みづらくなるので、まずは and やカンマ区切りを優先して使うのがおすすめです。
CSS Media Queries Level 4 では、大小記号を使って「幅が〇〜〇のあいだ」という書き方もできます。モダンブラウザ向けの書き方ですが、とても読みやすくなります。
CSS
@media (600px <= width < 1024px) {
/* 幅が 600px 以上 1024px 未満のとき */
.content {
max-width: 720px;
margin: 0 auto;
}
}
従来の書き方だと、同じ条件は次のように書く必要がありました。
CSS
@media (min-width: 600px) and (max-width: 1023px) {
/* 同じく「600px 以上 1024px 未満」のイメージ */
.content {
max-width: 720px;
margin: 0 auto;
}
}
どちらも書き方としては正しいので、まずは従来の min-width / max-width に慣れてから、余裕が出てきたら範囲構文も試してみる、という順番で覚えるとスムーズです。
実際のレイアウトでは、次のような書き方を覚えておくと便利です。
まずはスマホ向けのスタイルを通常のCSSとして書き、画面が広くなったらレイアウトを変える書き方です。
CSS
/* 基本(スマホ向け) */
.main {
padding: 16px;
}
/* 768px 以上(タブレット・PC向け) */
@media (min-width: 768px) {
.main {
padding: 32px;
max-width: 960px;
margin: 0 auto;
}
}
まずPC向けのデザインがあり、あとから画面の狭い端末向けに調整したいときなどに使います。
CSS
/* 基本(PC向け) */
.nav {
display: flex;
}
/* 600px 以下(スマホ向け) */
@media (max-width: 600px) {
.nav {
display: block;
}
}
widthmin-widthmax-widthheightmin-heightmax-heightaspect-ratiomin-aspect-ratiomax-aspect-ratiodevice-widthwidth / min-width を使います)min-device-widthmin-width を使うのが一般的です)max-device-widthmax-width を使うのが一般的です)device-heightheight / min-height などを使います)min-device-heightmax-device-heightresolutionmin-resolutionmax-resolutionorientationdisplay-modefullscreen、standalone、minimal-ui、browser)colormin-colormax-colorcolor-indexmin-color-indexmax-color-indexmonochromemin-monochromemax-monochromescaninterlace または progressive)(※テレビ向けの古いメディア向けで、通常のWebサイトではほとんど使いません)gridhoverpointernone、coarse、fine)any-hoverany-pointerこれらの条件を組み合わせて、特定のデバイスや環境に適したスタイルを指定できます。
@media の orientation は、デバイスの画面の向きに応じて CSSを適用するためのメディアクエリの一つです。画面の向きには主に2つの種類があり、以下のように指定します。
orientation: portraitorientation: landscapeこのメディアクエリを使うことで、デバイスの向きに合わせてデザインやレイアウトを柔軟に変更することができます。
CSS
@media (orientation: portrait) {
/* 縦向きのスタイル */
body {
background-color: lightblue;
}
}
@media (orientation: landscape) {
/* 横向きのスタイル */
body {
background-color: lightgreen;
}
}
このようにして、デバイスの向きに応じて異なるスタイルを適用することができます。
.css)の中に書きます。HTMLファイルの中に直接書く場合は、<head> 内の <style> タグの中に記述します。@media (max-width: 600px) { ... } のように、画面幅が一定以下のときだけ適用されるスタイルを書くのが簡単です。最近は、スマホ向けを基本として min-width で広い画面向けのスタイルを足していく「モバイルファースト」もよく使われます。min-width(モバイルファースト)がよく使われます。既存のPCサイトをあとからスマホ対応したい場合は、max-width を使う方が分かりやすいこともあります。device-width は端末そのものの画面幅、width はブラウザの表示領域(ビューポート)の幅を指します。現在は width を使うのが基本で、device-width は古い指定方法として扱われています。@media の中カッコ { ... } の閉じ忘れや、(min-width: 768px) のような丸カッコの閉じ忘れがないか確認してください。また、ブラウザの幅が本当に条件を満たしているかもチェックしましょう。@media (max-width: ...) の中で、意図せず強い指定(!important など)を使っていないか確認してください。順番的に、後ろに書かれているスタイルが優先されることもよくあります。@media で同じ要素にスタイルを当てている場合、条件が重なると「どれが最後に評価されるか」で結果が変わります。CSSファイルの記述順や、条件の範囲の重なりを見直してみてください。min-width と max-width を逆に書いていないか確認してください。また、ブラウザの開発ツールで「デバイスモード」がオンになっていると、スマホ向けのスタイルが適用されたままになることがあります。