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 样式书写规范(推荐)

    下面给您详细讲解 CSS 样式书写规范的完整攻略。 1. 命名规范 CSS 的命名规范要有意义,能够清晰体现该元素的特点或者功能。一般我们建议采用“中划线方式”,例如: /* 示例1 */ .news-content{ background-color: #fff; font-size: 16px; } /* 示例2 */ .left-nav{ float:…

    css 2023年6月9日
    00
  • 用ajax实现预览链接可以看到链接的内容

    要用ajax实现预览链接可以看到链接的内容,需要以下步骤: 1. 给链接加上预览功能的事件处理函数 在HTML页面中,通过给链接加上一个事件处理函数实现预览功能,例如: <a href="https://www.example.com" class="preview-link">预览链接</a>…

    css 2023年6月10日
    00
  • css中float left与float right的使用说明

    当我们在网页设计中需要对元素进行布局时,可以使用CSS中的浮动(float)属性。其中,float left和float right是两种常用的浮动方式。下面,将详细讲解这两种浮动的使用说明。 float left和float right的定义 先来看一下float left和float right的具体定义。 float left表示将元素向左浮动,让其脱…

    css 2023年6月10日
    00
  • 用CSS实现鼠标单击特效

    以下是“用CSS实现鼠标单击特效”的完整攻略。 一、实现思路 我们要实现的鼠标单击特效是,当用户鼠标单击某个元素时,该元素会产生一个水波纹扩散的效果。具体思路是: 给元素绑定一个点击事件,当元素被点击时触发该事件。 动态生成一个 div 元素,作为水波纹扩散效果的背景。 在该 div 元素上使用 CSS3 动画,产生水波纹扩散的效果。 当动画结束后,将该 d…

    css 2023年6月9日
    00
  • Bootstrap导航条的使用和理解3

    Bootstrap是一种流行的前端框架,可用于开发响应式网页。其中,导航条是Bootstrap的常用组件之一。本文将详细讲解Bootstrap导航条的使用和理解,帮助开发者更好地掌握Bootstrap的技术。 导航条的基本布局 Bootstrap的导航条由多个HTML元素组成,包括一个包含导航标签的<nav>元素、一个<ul>元素,以…

    css 2023年6月10日
    00
  • 通过css3的filter滤镜改变png图片的颜色的示例代码

    下面就是通过 CSS3 的 filter 滤镜改变 PNG 图片的颜色的完整攻略: 1. 确定要改变颜色的 PNG 图片 在网页中,我们常常需要使用 PNG 图片,并且有时候需要调整它们的颜色。这时候,我们可以通过 CSS3 的 filter 滤镜来实现。 首先,我们需要确定需要改变颜色的 PNG 图片。此处我们举一个例子: <img src=&quo…

    css 2023年6月9日
    00
  • CSS div布局需要注意的两点

    当我们使用 CSS 进行页面布局时, div 元素是最基础的组件之一。在使用 div 元素进行页面布局时,有一些细节是需要特别注意的,下面就来讲解一下 CSS div 布局需要注意的两点。 1. 容器元素要清除浮动 在布局中使用浮动效果是非常常见的,但在某些情况下,浮动可能导致容器无法自适应子元素高度的情况。若父容器出现了这样的情况,通常会导致布局错乱,无法…

    css 2023年6月10日
    00
  • 修改鼠标样式的CSS代码

    修改鼠标样式是通过修改CSS的cursor属性来实现的。下面是详细的攻略: 1. 了解CSS cursor属性 cursor属性用于设置鼠标移动到元素上时的鼠标样式。常用的样式包括箭头、手型、调整大小等等。常用的属性值包括: auto:浏览器自动决定鼠标样式 pointer:手型 default:箭头 text:I形的文本编辑光标 move:移动样式 not…

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