ホームページ > ウェブフロントエンド > CSSチュートリアル > メディアクエリとの戦いはやめましょう!代わりに CSS コンテナ クエリを使用する

メディアクエリとの戦いはやめましょう!代わりに CSS コンテナ クエリを使用する

DDD
リリース: 2024-11-21 09:16:11
オリジナル
1042 人が閲覧しました

Stop Fighting with Media Queries! Use CSS Container Queries Instead

メインコンテンツでは完璧に見えるのに、サイドバーでは壊れてしまうコンポーネントを構築したことがありますか? ?

メディア クエリは問題の半分しか解決しません。メディア クエリは、コンポーネントが実際に存在する場所ではなく、画面サイズを考慮します。そこでコンテナ クエリが登場します。

メディアクエリの何が問題になっているのでしょうか?

このカード コンポーネントを構築したとしましょう:

@media (min-width: 768px) {
  .card {
    display: flex;
    gap: 2rem;
  }
}
ログイン後にコピー

モバイルでもデスクトップでも見栄えがします!あなたのチームメイトがそれを狭いサイドバーに入れるまでは。これで、「デスクトップ」レイアウトが 300 ピクセルのスペースに収まろうとしています。ああ。

CSS スキルを向上させたいですか? 「JavaScript を置き換えた最新の CSS テクニック」を参照して、純粋な CSS が複雑な JavaScript コードをどのように置き換えるかを確認してください。

コンテナクエリ: より良い方法

コンテナ クエリでは、「画面の幅はどのくらいですか?」を尋ねる代わりに、「コンテナの幅はどのくらいですか?」と尋ねます。仕組みは次のとおりです:

/* Step 1: Mark the container */
.card-wrapper {
  container-type: inline-size;
}

/* Step 2: Style based on container width */
@container (min-width: 400px) {
  .card {
    display: flex;
    gap: 2rem;
  }
}
ログイン後にコピー

これで、カードは画面ではなくコンテナに適応します。どこにでも置いておけば、すぐに使えます!

実際の例: スマート プロダクト カード

これは、あらゆるスペースに適応する製品カードです:

<div>





<pre class="brush:php;toolbar:false">.product-wrapper {
  container-type: inline-size;
}

/* Mobile-first: Stack everything */
.product {
  display: grid;
  gap: 1rem;
  padding: 1rem;
  background: white;
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}

/* Medium container: Side-by-side layout */
@container (min-width: 400px) {
  .product {
    grid-template-columns: 200px 1fr;
  }
}

/* Large container: More sophisticated layout */
@container (min-width: 600px) {
  .product .content {
    display: grid;
    grid-template-columns: 1fr auto;
    align-items: start;
  }

  .product .desc {
    grid-column: 1 / -1;
  }
}
ログイン後にコピー

ブラウザのサポート?

朗報です!コンテナ クエリは、最新のすべてのブラウザで機能します。古いブラウザの場合、モバイル レイアウトがフォールバックになります:

/* Default mobile layout */
.product { display: grid; }

/* Enhance for modern browsers */
@supports (container-type: inline-size) {
  /* Container query styles */
}
ログイン後にコピー

UI の詳細を確認したいですか? 「ユーザーが密かに判断する 12 のフロントエンドのマイクロインタラクション」 では、Web サイトに洗練された印象を与える微妙なインタラクションを明らかにします。

簡単なヒント

  1. コンテナクエリをあまり深く入れ子にしないでください - 乱雑になります
  2. 幅のみが必要な場合は、size の代わりに inline-size を使用してください
  3. さまざまなサイズのコンテナでコンポーネントをテストします

自分で試してみてください!

  1. 複数の場所に存在するコンポーネントを選択してください
  2. container-type: inline-size をラッパーに追加します
  3. メディア クエリをコンテナ クエリに置き換えます
  4. 自動的に適応するのを見てください!

もっと詳しく知りたいですか?

  • MDN ガイド
  • 使用できますか - コンテナ クエリ

コンテナ クエリを使用して何か素晴らしいものを構築したら、コメントをドロップしてください。 ?

以上がメディアクエリとの戦いはやめましょう!代わりに CSS コンテナ クエリを使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート