ウォーターフォールフローレイアウトを実装する3つの方法

ウォーターフォールフローレイアウトを実装する3つの方法

序文

今日、Xianyuを閲覧していたとき、各行の高さが同じではないことに気付きました。調べてみると、これはウォーターフォールフローレイアウトだということが分かりました。とても興味深いと感じたので、勉強してみることにし、インターネットでいくつかの解決策を見つけました。ウォーターフォールフローを実装する方法は3つほどあります。

1. JSはウォーターフォールフローを実現する

思考分析

  • 滝の流れのレイアウトは、幅が等しく高さが不等なのが特徴です。
  • 最後の行の隙間を最小限に抑えるには、2 行目から始めて、最初の行の最も短い画像の下に画像を配置する必要があります。
  • 親要素は相対配置に設定され、画像を含む要素は絶対配置に設定されます。次に、上と左の値を設定して各要素を配置します。

コードの実装

<!DOCTYPE html>
<html>
<ヘッド>
    <スタイル>
        。箱 {
            幅: 100%;
            位置:相対;
        }
        。アイテム {
            位置: 絶対;
        }
        .item画像{
            幅: 100%;
            高さ:100%;
        }
    </スタイル>
</head>
<本文>
<div class="box">
    <div class="item">
        <img src="banner.jpg" alt="" />
    </div>
    <div class="item">
        <img src="show.jpg" alt="" />
    </div>
    <div class="item">
        <img src="cloth.jpg" alt="" />
    </div>
    <div class="item">
        <img src="banner.jpg" alt="" />
    </div>
    <div class="item">
        <img src="show.jpg" alt="" />
    </div>
    <div class="item">
        <img src="cloth.jpg" alt="" />
    </div>
    <div class="item">
        <img src="banner.jpg" alt="" />
    </div>
    <div class="item">
        <img src="show.jpg" alt="" />
    </div>
    <div class="item">
        <img src="cloth.jpg" alt="" />
    </div>
    <div class="item">
        <img src="show.jpg" alt="" />
    </div>
    <div class="item">
        <img src="cloth.jpg" alt="" />
    </div>
    <div class="item">
        <img src="banner.jpg" alt="" />
    </div>
</div>
</本文>
<script src="jquery.min.js"></script>
<スクリプト>
    関数 waterFall() {
        // 1 画像の幅を決定します - スクロールバーの幅 var pageWidth = getClient().width-8;
        var columns = 3; //3 列 var itemWidth = parseInt(pageWidth/columns); //アイテムの幅を取得します $(".item").width(itemWidth); //アイテムの幅に設定します var arr = [];
        $(".box .item").each(function(i){
            var height = $(this).find("img").height();
            if (i < 列) {
                // 2 最初の行は$(this).css({
                    上:0,
                    左:(itemWidth) * i+20*i、
                });
                //行の高さを配列にプッシュします arr.push(height);
            } それ以外 {
                // その他の行 // 3 配列内の最小の高さとそのインデックスを検索します var minHeight = arr[0];
                var インデックス = 0;
                (var j = 0; j < arr.length; j++) の場合 {
                    (最小高さ>arr[j])の場合{
                        最小高さ = arr[j];
                        インデックス = j;
                    }
                }
                // 4 次の行の最初のボックスの位置を設定します // 上の値は最小の列の高さです $(this).css({
                    top:arr[index]+30, //距離を30に設定します left:$(".box .item").eq(index).css("left")
                });

                // 5 最小列の高さを変更する // 最小列の高さ = 現在の高さ + 接合された列の高さ arr[index] = arr[index] + height+30; // 距離を 30 に設定する}
        });
    }
    //clientWidthは互換性関数getClient() {
        戻る {
            幅: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth、
            高さ: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
        }
    }
    // ページサイズが変更されるとリアルタイムでトリガーされます window.onresize = function() {
        // ウォーターフォールのフローを再定義しますwaterFall();
    };
    // 初期化 window.onload = function(){
        //滝の流れを実現するwaterFall();
    }
</スクリプト>
</html>

効果は以下のとおりです

2. ウォーターフォールフローを実現するための列の複数行レイアウト

思考分析:

  • 列は、ウォーターフォール フローを実装するために主に 2 つのプロパティに依存します。
  • 1 つは、列をいくつに分割するかを表す列数属性です。
  • 1 つは列間の距離を設定する column-gap プロパティです。

コード実装:

<!DOCTYPE html>
<html>
<ヘッド>
    <スタイル>
        。箱 {
            マージン: 10px;
            列数: 3;
            列間隔: 10px;
        }
        。アイテム {
            下マージン: 10px;
        }
        .item画像{
            幅: 100%;
            高さ:100%;
        }
    </スタイル>
</head>
<本文>
<div class="box">
    <div class="item">
        <img src="banner.jpg" alt="" />
    </div>
    <div class="item">
        <img src="show.jpg" alt="" />
    </div>
    <div class="item">
        <img src="cloth.jpg" alt="" />
    </div>
    <div class="item">
        <img src="banner.jpg" alt="" />
    </div>
    <div class="item">
        <img src="show.jpg" alt="" />
    </div>
    <div class="item">
        <img src="cloth.jpg" alt="" />
    </div>
    <div class="item">
        <img src="banner.jpg" alt="" />
    </div>
    <div class="item">
        <img src="show.jpg" alt="" />
    </div>
    <div class="item">
        <img src="cloth.jpg" alt="" />
    </div>
    <div class="item">
        <img src="show.jpg" alt="" />
    </div>
    <div class="item">
        <img src="cloth.jpg" alt="" />
    </div>
    <div class="item">
        <img src="banner.jpg" alt="" />
    </div>
</div>
</本文>

効果は以下のとおりです。

3. ウォーターフォールフローを実現するフレックスレイアウト

思考分析:

flex を使用してウォーターフォール フローを実現するには、最も外側の要素を display: flex、つまり水平配置に設定する必要があります。次に、列を折り返すために flex-flow: column wrap を設定します。子要素を収容するために画面の高さを埋めるために、height: 100vh を設定します。各列の幅は、calc 関数を使用して設定できます。例: width: calc(100%/3 - 20px)。左右の余白を除いて、均等幅の 3 つの列に分割します。

コード実装:

<!DOCTYPE html>
<html>
<ヘッド>
    <スタイル>
        。箱 {
          ディスプレイ: フレックス;  
          flex-flow:列折り返し;
          高さ:100vh;
        }
        。アイテム {
            マージン: 10px;
            幅: calc(100%/3 - 20px);
        }
        .item画像{
            幅: 100%;
            高さ:100%;
        }
    </スタイル>
</head>
<本文>
<div class="box">
    <div class="item">
        <img src="banner.jpg" alt="" />
    </div>
    <div class="item">
        <img src="show.jpg" alt="" />
    </div>
    <div class="item">
        <img src="cloth.jpg" alt="" />
    </div>
    <div class="item">
        <img src="banner.jpg" alt="" />
    </div>
    <div class="item">
        <img src="show.jpg" alt="" />
    </div>
    <div class="item">
        <img src="cloth.jpg" alt="" />
    </div>
    <div class="item">
        <img src="banner.jpg" alt="" />
    </div>
    <div class="item">
        <img src="show.jpg" alt="" />
    </div>
    <div class="item">
        <img src="cloth.jpg" alt="" />
    </div>
    <div class="item">
        <img src="show.jpg" alt="" />
    </div>
    <div class="item">
        <img src="cloth.jpg" alt="" />
    </div>
    <div class="item">
        <img src="banner.jpg" alt="" />
    </div>
</div>
</本文>

効果は以下のとおりです。

4. 3つの方法の比較

単純なページ表示であれば、column マルチカラムレイアウトや flex フレキシブルレイアウトが使えます。データを動的に追加したり、列の数を動的に設定したりする必要がある場合は、JS + jQuery を使用する必要があります。

以上がエディターが紹介したウォーターフォールフローレイアウトの実装方法3つです。皆様のお役に立てれば幸いです。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • JS を使用して Web ページのウォーターフォール レイアウトを実装する方法
  • ウォーターフォールフローレイアウト(無限読み込み)を実現する js
  • 1 行の JavaScript コードでウォーターフォール レイアウトを実装する方法
  • js ウォーターフォール フロー レイアウトの実装
  • JavaScript ベースのウォーターフォール フロー レイアウトの実装

<<:  MySQL 悲観的ロックと楽観的ロックの実装

>>:  スクロールバーを非表示にする HTML の簡単な実装

推薦する

CSS を使用して画像の下の空白を数ピクセル消去する方法の詳細な説明

最近、友人が私に質問をしました。ページをレイアウトすると、画像の下に 1 ~ 2 ピクセルの空白があ...

ウェブページ上でデスクトップ exe プログラムを呼び出す簡単な方法

この記事では主に、Web ページ上でデスクトップ exe プログラムを呼び出す方法を紹介します。 W...

この記事はVueのライフサイクルを理解するのに役立ちます

目次1. beforeCreate & created 2. マウント前とマウント済み3. ...

JavaScript オブジェクトの 3 つのプロパティ

目次1. 書き込み可能: 書き込み可能2. 列挙可能: 列挙可能3. 設定可能: 設定可能オブジェク...

CSS3 を使用してピカチュウのアニメーション壁紙を作成する例

文章さて、次はレンダリングを見せましょう。画像を見て初めて理解することに興味が湧くでしょう。そうでな...

Reactの簡単な紹介

目次1. CDNの紹介1.1 react (最初にインポート) 1.2 react-dom(後ほど紹...

Linux でプロセスを効果的に管理するための 8 つのコマンド

序文プロセス管理の役割:サーバーの健全性状態を判定する: プロセスの状態 (メモリ、CPU 占有率な...

CSSはラジオをクリックして2つの画像スタイルを切り替えますが、複数のラジオのうち1つだけをチェックできます。

クリックされたボタンには赤い画像スタイルを実装し、選択されていない他のボタンには灰色の画像スタイルを...

nginx+php実行リクエストの動作原理の詳細な説明

PHPの仕組みまず、よく耳にするcgi、php-cgi、fastcgi、php-fpmの関係を理解し...

Centos7 構成 fastdfs および nginx 分散ファイル ストレージ システムの実装プロセス分析

1. libfastcommon-1.0.43 をインストールします。インストール パッケージは h...

docker で mysql に接続できない場合の解決策

シナリオ: 仮想マシンの Docker コンテナに最新バージョンの MySQL をインストールした後...

Ubuntu 18.04 (コミュニティ エディション) に Docker CE をインストールする方法

古いバージョンをアンインストールする以前に古いバージョンをインストールしたことがある場合は、まずそれ...

Keras を使って SQL インジェクション攻撃を判断する (例の説明)

この記事では、ディープラーニングフレームワーク keras を使用して、SQL インジェクションの特...

Douyin ロゴを作成する手順の CSS3 分析

「Tik Tok」も大人気で、ユーザー数は7億人と言われています。今日は、注目を集めるためにTikT...

Mysql5.7.17 winx64.zip 解凍バージョンのインストールと設定のグラフィックチュートリアル

1. mysql-5.7.17-winx64.zip をダウンロードします。リンク: https:/...