webcordingカテゴリーの共通アイキャッチ画像

@media クエリと clamp() 関数

@media クエリと clamp() 関数は、どちらもレスポンシブデザインに役立つツールですが、用途や使いどころが異なります。

メディアクエリ (@media クエリ)

メディアクエリは、特定のブレークポイントに基づいて、レイアウト全体を変更できます。これには、カラム数の変更、ナビゲーションメニューの表示方法、要素の表示/非表示などが含まれます。

メリット

  1. 複雑なレイアウト変更:
    • メディアクエリは、特定のブレークポイントに基づいて、レイアウト全体を変更できます。カラム数の変更、ナビゲーションメニューの表示方法、要素の表示/非表示などが含まれます。
  2. 特定のデバイス向けの最適化:
    • 画面の幅、解像度、デバイスの向きなどに応じたスタイルの変更が可能で、特定のデバイスに合わせたデザインを提供できます。
  3. 条件に応じたスタイル適用:
    • スタイルの適用条件を詳細に指定できるため、特定の画面幅や解像度に対して異なるデザインを提供することができます。
  4. 複数条件の組み合わせ:
    • メディアクエリでは、画面の幅だけでなく、解像度、向き、光量などの条件を組み合わせてスタイルを適用できるため、柔軟なデザイン調整が可能です。

使いどころ

  • 画面の幅が一定以下になったら、ナビゲーションをハンバーガーメニューに変えるなど、レイアウトを根本的に大幅に変更する場合。
  • モバイル、タブレット、デスクトップなど異なるデバイスごとに異なるスタイルを適用する場合。
  • 例えば、高解像度ディスプレイでより高品質な画像を表示する場合や、ダークモード対応のデザインを提供する場合など。

@media (max-width: 768px) {
    /* モバイル向けのスタイル */
    .container {
        flex-direction: column;
    }
}

@media (min-width: 1024px) and (orientation: landscape) {
    /* 横向きタブレット以上のデバイス向けのスタイル */
    .container {
        max-width: 1200px;
        margin: 0 auto;
    }
}

clamp() 関数

clamp() は、CSSで値の範囲を指定するために使用され、最小値、理想値、最大値の3つの値を設定できます。
これにより、ある程度のレスポンシブデザインが実現し、画面サイズに応じて値が動的に調整されます。

メリット

  1. シンプルなレスポンシブ対応
    • 単一のプロパティで最小値、理想値、最大値を指定でき、メディアクエリを使わずに簡単にレスポンシブな調整が可能です。
  2. 連続的な変化
    • 画面サイズに応じてプロパティがスムーズに変化し、特定のブレークポイントに縛られない柔軟なデザインが可能です。
  3. コードの簡略化
    • clamp() を使用することで、複数のメディアクエリを使わずに、1行のコードでサイズを調整できます。

使いどころ

画面サイズに応じてフォントサイズやマージン、パディングを滑らかに変えたい場合や、ある程度の範囲でプロパティの値が変動してもよい場合、理想的な値が一定の範囲内で変化する場合など。

h1 {
    font-size: clamp(1.5rem, 2vw + 1rem, 3rem);
}

.container {
    padding: clamp(10px, 5vw, 50px);
}

使い分けのポイント

  • 複雑なレイアウト変更
    • メディアクエリが必要です。特定のブレークポイントでデザインを大幅に変更する場合にはメディアクエリを使用します。
  • 単一のプロパティの調整
    • clamp() が便利です。連続的に変化するサイズ調整が必要で、メディアクエリを使わずに済ませたい場合に有効です。

併用の例

場合によっては、メディアクエリと clamp() を併用することもあります。

@media (max-width: 768px) {
    h1 {
        font-size: clamp(1rem, 2.5vw + 0.5rem, 2rem);
    }
}

@media (min-width: 769px) {
    h1 {
        font-size: clamp(1.5rem, 2vw + 1rem, 3rem);
    }
}

ここでは、特定のブレークポイントでフォントサイズの範囲が異なるように設定しています。メディアクエリを使用してブレークポイントを設定し、clamp() を使用してその範囲内でサイズが変化するようにしています。

PAGE TOP