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日

相关文章

  • JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法

    下面是JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法的完整攻略。 1. HTML结构 先看一下要实现的页面结构,包含了一个按钮和一个弹框: <button id="showModal">打开弹框</button> <div id="mask"></div> <di…

    css 2023年6月10日
    00
  • jQuery选择器之子元素选择器详解

    当我们想要选中某个元素的子元素时,就可以使用子元素选择器。子元素选择器用于选择指定元素的子元素,语法格式如下: parent > child 其中,parent表示待选中的父元素,child表示待选中的子元素。 例如,下面的代码会选中id为parent的元素中所有h2标签的子元素: <div id="parent"> &…

    css 2023年6月9日
    00
  • 使用div+CSS将页脚始终控制在页面最下方的方法

    下面我将详细讲解使用div+CSS将页脚始终控制在页面最下方的方法。 方案1:使用绝对定位 首先,我们在HTML文件中创建一个div元素用于承载页脚,给它一个唯一的ID,例如: <div id="footer"></div> 接下来,我们需要使用CSS样式对这个div元素进行定位。使用绝对定位可以让元素相对于整个页…

    css 2023年6月10日
    00
  • table表格使用:nth-child()实现隔行变色与对齐

    本篇攻略将介绍如何使用CSS中的nth-child()伪类选择器对表格进行隔行变色与对齐。下面分为两步进行详细讲解。 第一步:隔行变色 第一步,我们将实现表格隔行变色的效果。首先,在HTML中编写一个表格,表格中包含内容及表头,如下所示: <table> <thead> <tr> <th>姓名</th&g…

    css 2023年6月9日
    00
  • 浅谈各种浏览器下的CSS Hack兼容性写法

    下面是针对“浅谈各种浏览器下的CSS Hack兼容性写法”的完整攻略: 1. 关于 CSS Hack 的概念 CSS Hack 是一种绕过浏览器 CSS 标准解析引擎限制的特定 CSS 代码技巧,用于解决浏览器兼容性问题。由于各种不同的浏览器标准解析引擎会因为对 CSS 的支持不同而产生解析偏差,因此 CSS Hack 的技巧也会有所不同。 2. 浅谈各种浏…

    css 2023年6月9日
    00
  • 在Dreamweaver中插入有颜色的直线(水平线)

    要在Dreamweaver中插入有颜色的直线(水平线),可以通过以下步骤实现: 创建一个新的HTML文档,并按照惯例,将其保存在本地计算机上。 在Dreamweaver的工具栏中,选中“插入”选项卡,并选择“水平线”选项。 在弹出的“水平线属性”对话框中,您可以设置水平线的基本属性,例如线条粗细、颜色、高度和对齐方式等。 要设置水平线的颜色,您需要单击“颜色…

    css 2023年6月9日
    00
  • css实现缕空遮罩层的示例代码

    下面是详细的CSS实现缕空遮罩层的示例代码攻略。 缕空遮罩层的概念 在很多网站中,我们经常看到页面上有一个遮罩层,这个遮罩层的作用是阻止用户对页面上的其他元素进行操作,同时,还要突出显示一部分元素,这就是缕空遮罩层。常见的应用场景包括图片预览、弹窗提示、页面信息展示等。 实现方法 实现缕空遮罩层的方法有很多种,这里介绍两种常见的方法。 方法一:使用伪元素 首…

    css 2023年6月10日
    00
  • CSS教程 CSS定位属性

    CSS教程: CSS定位属性 什么是CSS定位属性? CSS定位属性用于控制HTML元素在网页中的位置,包括相对定位、绝对定位和固定定位。定位属性能够让我们控制元素在网页上出现的位置、大小、层级关系以及叠放顺序等。 相对定位 相对定位是一种基于元素原来位置进行位置调整的定位方式,通过调整元素的上下左右边距来完成位置调整,相对定位不会对文档流产生任何影响。 下…

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