HTML+CSS+JS实现图片的瀑布流布局的示例代码

以下是HTML+CSS+JS实现图片瀑布流布局的攻略:

什么是图片瀑布流布局

图片瀑布流布局是一种网页排版方式,通过不规则的排列方式,在多个列上交错放置图片,看起来像瀑布一样流动。瀑布流布局时常用于展示图片等内容的的网站,比如国内的花瓣网。

实现步骤

1.编写HTML结构

首先,需要在HTML文件中编写好图片布局的基础结构,即一组div元素,每个div元素包含一张图片。

<div id="main">
    <div class="box">
        <img src="image1.jpg"/>
    </div>
    <div class="box">
        <img src="image2.jpg"/>
    </div>
    <div class="box">
        <img src="image3.jpg"/>
    </div>
    <div class="box">
        <img src="image4.jpg"/>
    </div>
    ...
</div>

2.编写CSS样式

接着,需要为图片布局编写CSS样式,其中包括每个box元素的样式(包含图片宽高),以及main容器的宽度等样式。

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

#main {
    width: 100%; /*容器宽度*/
}

.box {
    width: 23%; /*图片盒子宽度*/
    margin: 10px; /*盒子间距*/
    float: left; /*浮动*/
}

.box img {
    width: 100%; /*图片宽度*/
    height: auto; /*高度自适应*/
}

3.编写JS代码

最后,需要利用JS代码来实现图片瀑布流的布局效果。这里我们可以使用jQuery库来帮助我们实现。

$(window).on('load', function() {
    waterfall();
});

function waterfall() {
    var $boxArr = $('#main .box');
    var boxWidth = $boxArr.eq(0).outerWidth(); /*第一个图片盒子的宽度*/
    var windowWidth = $(window).width(); /*当前窗口宽度*/

    var cols = Math.floor(windowWidth / boxWidth); /*计算列数*/
    $('#main').width(boxWidth * cols); /*设置#main宽度*/

    var heightArr = [];
    $boxArr.each(function(index, value) {
        var boxHeight = $(this).outerHeight(); /*获取当前box盒子高度*/
        if (index < cols) { /*处理第一行*/
            heightArr[index] = boxHeight;
        } else { /*处理其它行*/
            var minHeight = Math.min.apply(null, heightArr);
            var minIndex = $.inArray(minHeight, heightArr);
            $(value).css({ /*设置图片盒子位置*/
                'position': 'absolute',
                'top': minHeight + 'px',
                'left': $boxArr.eq(minIndex).position().left + 'px'
            });
            heightArr[minIndex] += $(this).outerHeight(); /*更新列高*/
        }
    });
}

上述JS代码,先通过window的load事件来触发函数调用,运行waterfall()函数。在waterfall函数中,我们首先获取.box元素,并计算第一个.box元素的宽度,以及当前浏览器窗口的宽度。然后我们算出需要多少列,让main容器宽度恰好能够容纳cols列图片盒子。

接着我们通过一个“heightArr”数组来存储每列的高度。对于第一行的图片盒子,我们直接存到数组中。对于后面的所有图片盒子,我们需要先找到最小的height,然后把该盒子放到height值最小的那一列中,同时更新该列的高度。

示例1:美团外卖首页

下面我们就以美团外卖的首页为例,来演示如何实现图片瀑布流布局。

同样,我们也需要先编写html和css样式来搭建基础结构。但是美团的图片瀑布流布局略有不同,它是分为两栏的。我们可以通过一个类名.discern来为两栏图片区分开。下面我们来看一下HTML和CSS代码:

<div id="main">
    <div class="discern left">
        <img src="1.png" width="100%" alt="麻辣烫"/>
    </div>
    <div class="discern right">
        <img src="2.png" width="100%" alt="肉夹馍"/>
    </div>
    <div class="discern left">
        <img src="3.png" width="100%" alt="粉丝汤"/>
    </div>
    <div class="discern right">
        <img src="4.png" width="100%" alt="石锅拌饭"/>
    </div>
    ...
</div>
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

#main {
    width: 1200px;
    margin: 0 auto;
    overflow: hidden;
}

.discern {
    position: relative;
    float: left;
    width: 575px;
    margin: 0 12px 18px 0;
    overflow: hidden;
    border-radius: .2rem;
}

.discern img {
    display: block;
    width: 100%;
    border-radius: inherit;
}

最后,我们只需要按照上述JS攻略来写JS代码,并在windown.onload事件中调用函数,即可实现美团外卖的图片瀑布流布局效果。

示例2: 懒加载

很多网站上的图片都是很大的,为了加快网页的访问速度,通常都需要采用图片懒加载技术。下面我们来说一下如何在图片瀑布流布局中实现图片懒加载。

我们可以使用jQuery的lazyload插件来实现图片的懒加载。该插件的使用很简单,只需要在图片元素上添加data-src属性,并在JS文件中调用lazyload函数,即可实现懒加载。

下面是示例代码:

<div id="main">
    <div class="box">
        <img data-src="image1.jpg"/>
    </div>
    <div class="box">
        <img data-src="image2.jpg"/>
    </div>
    <div class="box">
        <img data-src="image3.jpg"/>
    </div>
    <div class="box">
        <img data-src="image4.jpg"/>
    </div>
    ...
</div>
$(function() {
    $("img").lazyload();
});

在以上示例代码中,我们可以看到每个图片元素上都添加了data-src属性,这是表示图片的真实地址。然后我们在JS文件中调用了lazyload函数,可以自动实现图片的懒加载。

此外,需要注意的是,在使用lazyload函数时,需要事先引入jQuery和lazyload插件。可以使用以下代码:

<head>
    <script src="jquery-3.6.0.min.js"></script>
    <script src="jquery.lazyload.min.js"></script>
</head>

总结

综上所述,实现图片瀑布流布局需要以下几步:

  1. 编写HTML结构,包含图片元素盒子。
  2. 编写CSS样式,包括容器宽度、图片盒子宽度、以及图片样式等。
  3. 编写JS代码,包括计算列数、设置宽度、设置图片位置、以及懒加载等。

相信通过上面的攻略,大家已经能够快速上手实现图片瀑布流布局了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:HTML+CSS+JS实现图片的瀑布流布局的示例代码 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • css弹性盒flex-grow、flex-shrink、flex-basis详解

    我们来详细讲解一下 CSS 弹性盒子模型中的 flex-grow、flex-shrink 和 flex-basis 属性。 弹性盒子模型介绍 CSS 弹性盒子模型(Flexbox)是一种基于浏览器的布局模式,使开发人员可以更加方便、灵活地设计和排列元素。通过指定容器中的弹性盒子的布局方式、方向、对齐方式、大小等属性,可以实现各种复杂的布局效果。 flex-g…

    css 2023年6月10日
    00
  • 书写css伪类时冒号后多个空格导致该规则失效

    当书写 CSS 伪类时,如果在冒号后面紧跟多个空格,这样的空格将会被视为无效字符,从而导致该规则失效,这是因为 CSS 语法不支持在伪类选择器中使用多个空格来隔开伪类选择器和样式规则。 解决该问题有两种解决方案: 1.删除多余空格 将书写伪类时冒号和伪类名后的空格删除,确保其后没有多余的空格,如下所示: /* 错误写法,冒号后多个空格 */ a:hover …

    css 2023年6月9日
    00
  • 萌新的HTML5 入门指南

    “萌新的HTML5 入门指南”完整攻略 HTML5 简介 HTML5 是超文本标记语言的第五个版本,是 Web 标准的一部分,主要应用于客户端 Web 应用程序的开发。相比于前几个版本,HTML5 增加了一些新特性,如语义化标签、表单控件、多媒体元素等。 HTML5基本结构 HTML5 的基本结构如下所示: <!DOCTYPE html> &lt…

    css 2023年6月11日
    00
  • 详解css透明度之rgba和opacity的区别及兼容

    下面就来详细讲解一下关于CSS透明度的两种常见方式: opacity 和 rgba。 一、opacity 和 rgba 的区别 1. opacity opacity 是 CSS3 中的一个属性,用来设置元素的不透明度,取值范围是 0 到 1,其中 0 表示完全透明,1 表示完全不透明。 div { opacity: 0.5; } 使用 opacity 可以实…

    css 2023年6月10日
    00
  • 简单但很实用的5个css属性

    下面是详细讲解“简单但很实用的5个CSS属性”的完整攻略: 1. 文字截断(text-overflow) 有时候,我们需要限制文字的长度,同时想要显示省略号 (…) 来表示截断。这个时候,可以使用 text-overflow 属性。 text-overflow: ellipsis; white-space: nowrap; overflow: hidde…

    css 2023年6月9日
    00
  • CSS教程:浮动元素对浏览器的支持

    CSS教程:浮动元素对浏览器的支持 什么是CSS浮动? CSS浮动是一种布局方式,用于在网页中排列元素。浮动元素可以向左或向右移动,直到它们遇到另一个元素或者浏览器窗口的边缘。 浮动元素对浏览器的支持 浮动元素得到了所有主流浏览器的支持,包括Chrome、Firefox、Safari、Edge、以及Internet Explorer。这意味着开发人员可以放心…

    css 2023年6月10日
    00
  • 洛克王国法老王怎么得_法老王在哪抓_法老王获得方法图文攻略

    洛克王国法老王怎么得 如果你正在玩《洛克王国》游戏,你可能会遇到获取法老王的任务。那么如何获得法老王呢?下面是详细的攻略: 法老王在哪抓 在游戏中,法老王位于“金字塔”地图中,需要先打败前面的几个BOSS才能到达。具体步骤如下: 进入游戏后选择“世界地图”,在地图中找到“金字塔”地图,点击。 进入“金字塔”地图后,需要先依次打败“骷髅兵”、“撒旦”以及“巨型…

    css 2023年6月10日
    00
  • 详解微信小程序canvas圆角矩形的绘制的方法

    详解微信小程序canvas圆角矩形的绘制的方法 前言 canvas是HTML5新增的一个组件,它可以让我们直接在浏览器中绘制出图形、文字和图片等元素。在微信小程序中,我们也可以使用canvas来进行绘制,从而实现一些炫酷的效果。 本篇攻略将详细讲解如何在微信小程序中使用canvas绘制圆角矩形。 步骤 步骤一:创建canvas 我们需要在wxml模板文件中创…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部