2024/12/01

【最強の横並びレイアウト】完全レスポンシブ&柔軟なコーディング方法

カード型の横並びレイアウトを美しく整え、画面サイズやコンテンツ量の変化にも柔軟に対応するための最強のコーディング方法をご紹介します。従来のFlexboxやGridを使っただけでは難しいケースにも対応可能です。さらにコードはシンプルで、レスポンシブ対応もばっちりです。

課題:従来のレイアウトでよくある問題

  • 画面幅が変わるとレイアウトが崩れる
  • カード内のテキスト量が異なると高さが揃わない
  • カードの数が動的に変化すると、意図しない折り返しが発生する

この悩み、全てGridとmatchHeight.jsの組み合わせで解決できます!

最強の横並びレイアウトの実装方法を手順を追って説明します。

Grid設定

まず、親要素に以下のCSSを適用します。

. row {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 16px; /* カード間の余白を指定 */
}

ポイント:

  • grid-template-columnsrepeat(auto-fill, minmax(300px, 1fr))を設定   – **minmax**の最小値(例: 300px)を指定することで、カードがそのサイズを保てなくなると自動で折り返されます。   – 最大値は1frとすることで、スペースを均等に分割します。
  • gapで簡単に余白を調整。

これだけでブラウザサイズの変化に応じてカードが折り返され、レスポンシブ対応はほぼ完成です。

カードアイテムが増減しても自動で折り返されるので、phpなどで動的にコンテンツが増減されるコンテンツにも最適です。

高さを揃えるmatchHeight.jsの活用

次に、カードの中のコンテンツの高さを揃えます。

01jQueryとmatchHeight.jsを読み込み

<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.matchHeight/0.7.2/jquery.matchHeight-min.js"></script>

02必要な要素に高さ揃えを適用します


    $(document).ready(function () {
        $('.card-title').matchHeight(); // タイトル部分の高さを揃える
        $('.card').matchHeight();       // カード全体の高さを揃える
    });

こうすることで以下のようなHTML構造の場合、カードタイトルやカード全体の高さが揃います。

<div class="row">
    <div class="card">
        <h3 class="card-title">タイトル1</h3>
        <p class="card-text">短い説明文。</p>
    </div>
    <div class="card">
        <h3 class="card-title">長いタイトルがここに入る可能性があります。</h3>
        <p class="card-text">こちらも長い説明文が入ります。</p>
    </div>
</div>

完成版はこちら(0.5×などを押して表示サイズを変えてみてください)

matchHeight.jsのオプション解説と実例

matchHeight.jsは、高さ揃えに関する多様なオプションを提供しており、要件に応じて柔軟に対応できます。ここでは、具体的なオプションの使い方を実例とともに詳しく解説します。


基本オプションとその効果

1. byRow(デフォルト:true)

  • 説明: デフォルトでは、同じ行内の要素だけを揃えます。
  • 使い方: 縦幅を揃えたい行単位で、異なる高さがあっても問題なく整えられます。

コード例:

$('.card').matchHeight({
    byRow: true // デフォルト設定で、行ごとに高さを揃える
});

実例: 画面幅によってカードが2列、3列と変化しても、それぞれの行ごとに高さを揃えます。


2. property(デフォルト: ‘height’)

  • 説明: 揃える対象のCSSプロパティを指定できます。
  • 主な用途: 他のプロパティ(例: min-height)で高さを揃えたい場合に使用。

コード例:

$('.card').matchHeight({
    property: 'min-height' // 最小高さを基準に揃える
});

実例: カード全体の高さではなく、特定のコンテンツ部分(例: テキスト部分)のmin-heightを揃えたい場合に便利です。


3. target(デフォルト: 自動判定)

  • 説明: 高さを揃える基準となる要素を手動で指定します。

コード例:

$('.card').matchHeight({
    target: $('.specific-card') // 特定のカードの高さに揃える
});

実例: 特定のカードを基準に他のカードの高さを調整できます。たとえば、最も重要なコンテンツを含むカードを基準にするとデザインの一貫性が保たれます。


4. remove

  • 説明: 一度適用した高さ揃えを解除します。

コード例:

$('.card').matchHeight('remove');

実例: 特定の画面サイズで高さ揃えを解除したい場合、レスポンシブな条件分岐と組み合わせて使用します。


高度な実装例

1. スクロール時に高さを再計算する

動的にコンテンツが追加される場合や、非同期処理で要素が変化する場合、高さをリアルタイムで再計算する仕組みを実装します。

コード例:

$(window).on('resize', function () {
    $('.card').matchHeight(); // リサイズ時に再計算
});

$(document).on('contentUpdated', function () {
    $('.card').matchHeight(); // コンテンツが更新されたときに再計算
});

2. ブラウザ幅に応じて高さ揃えを切り替える

レスポンシブ対応で、小さな画面では高さ揃えを解除し、広い画面では高さを揃えます。

コード例:

$(window).on('resize', function () {
    if ($(window).width() > 768) {
        $('.card').matchHeight(); // 大画面では高さ揃えを適用
    } else {
        $('.card').matchHeight('remove'); // 小画面では解除
    }
}).trigger('resize');

オプションを使いこなすポイント

  • 柔軟なデザイン: 必要な要素だけを揃えることで、カードの中で重要な部分を強調できます。
  • レスポンシブ対応: removeオプションを活用し、画面幅に応じて適用/解除を切り替えます。
  • パフォーマンス: リサイズやコンテンツ更新が頻繁な場合、イベントを最適化して不要な再計算を防ぎます。

注意点

  1. JavaScript依存:     matchHeight.jsはJavaScriptライブラリのため、JavaScriptが無効な環境では動作しません。    
  2. パフォーマンス:     非同期で要素が追加される場合は再計算が必要です。以下のように再初期化してください。     javascript     $(window).on('load', function () {         $('.card').matchHeight();     });    

WEBサイト・サービス制作依頼はこちら