HTML+CSS+JS实现图片的瀑布流布局

本文介绍如何实现瀑布流布局,通过HTML和CSS建立基础布局,然后使用JavaScript进行后续布局调整,确保图片按照瀑布样式排列。示例包括百度和淘宝的图片搜索布局,通过设置固定宽度和动态高度实现图片的自适应展示。
摘要由CSDN通过智能技术生成


前言

瀑布流布局简而言之就是类似瀑布流的布局嘛,这么一讲大家可能还是不是了解的很明白,来来来,那现在我给大家上一个常见的实例:


在这里插入图相信大家在百度上搜索图片时的时候,网页图片的布局就是这样子的吧,什么?你还是不清楚瀑布流,那咱就再我看一个那没关系,淘宝大家应该再熟悉不过了吧片描述

相信大家在百度上搜索图片时的时候,网页图片的布局就是这样子的吧,什么?你还是不清楚瀑布流,那咱就再我看一个那没关系,淘宝大家应该再熟悉不过了吧!



在这里插入图片描述
我们可以发现图中每个商品框的高度不同的,因此导致我们的商品图片的高度布局都不在一个高度上。在百度搜索图片的时候我们发现每张图片的宽度都是不一样的那为什么所用图片的宽度它能刚刚好的占满一行呢?

这就是我今天今天教大家的布局方式——waterfall 布局,那该怎么实现呢?那我们就不多说啦,直接上干货!


一、总体效果

  • 瀑布流的搭建完的效果如下:在这里插入图片描述

二、HTML+CSS简单布局

  • 首先大家在网上搜索一些图片或者用一下自己喜欢的图片均可,用html搭建好框架网页的框架将图片存放好,我们这里使用的了20张图为例。
  • 其次使用html+css实现一个简单的布局,这有个关键的步骤:我们对比上面百度和淘宝页面的瀑布流布局就不难发现,要实现瀑布流所有图片都得有个相同的高度或者高度。因此我们这就给所用照片设置一个固定的宽度,但不限定的图片的高度保证每图片都按其原始比例完整展示出来。

HTML,CSS代码如下:

  • css代码
*{
   
          margin: 0;
          padding: 0;
      }
      #container{
   
          position: relative;
      }
      .box{
   
          float: left;/* 给每个存放照片box设置为浮动元素,让所有的图片浮动到网页的第一行*/
          padding: 5px;
      }
      .box-img{
   
          width: 150px;
          padding: 5px;
          border: 1px solid #ccc;
          box-shadow: 0 0 5px #ccc;
          border-radius: 5px;
      }
      .box-img img {
   
          width: 100%;
          height: auto;
      }


  • html代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>js 瀑布流</title>
 <link rel="stylesheet" href="./index.css">
</head>
<body>
  <div id="container">
    <div class="box">
      <div class="box-img">
        <img src="./img/1.jpg" alt="">
      </div>
    </div>
    <div class="box">
      <div class="box-img">
        <img src="./img/2.jpg" alt="">
      </div<
  • 39
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
要使用CSS grid和Vue.js实现瀑布流,可以按照以下步骤进行: 1. 在Vue组件中,使用v-for指令遍历数据,并将每个数据项渲染为一个包含图片的div。 2. 在CSS中,使用grid布局来创建网格布局。可以使用grid-template-columns属性来定义列的宽度,并使用grid-auto-rows属性来定义每个网格的高度。 3. 为了实现瀑布流布局,可以使用grid-auto-flow属性,并将其设置为dense。这将允许网格填充空白位置,从而创建更紧凑的布局。 4. 在Vue组件中,可以使用计算属性来计算每个图片div的高度。这可以通过使用一个方法来获取每个图片的实际高度,并返回一个包含所有高度的数组。 5. 最后,在CSS中,使用grid-row-end属性来设置每个图片div的结束行。可以使用一个循环来为每个图片div设置正确的结束行。 以下是一个简单的示例代码: ```html <template> <div class="grid-container"> <div v-for="(item, index) in itemList" :key="index" class="grid-item" :style="{ 'grid-row-end': gridRowEnds[index] }"> <img :src="item.src" @load="setImageHeight(index)" /> </div> </div> </template> <script> export default { data() { return { itemList: [ { src: 'image1.jpg' }, { src: 'image2.jpg' }, { src: 'image3.jpg' }, { src: 'image4.jpg' }, { src: 'image5.jpg' }, ], imageHeights: [], }; }, computed: { gridRowEnds() { const gridRowEnds = []; let currentRow = 1; let rowHeights = [0, 0]; for (let i = 0; i < this.itemList.length; i++) { const imageHeight = this.imageHeights[i]; const shortestIndex = rowHeights[0] < rowHeights[1] ? 0 : 1; gridRowEnds[i] = `row-end ${currentRow + imageHeight}px`; rowHeights[shortestIndex] += imageHeight; if (rowHeights[0] === rowHeights[1]) { currentRow += imageHeight; rowHeights = [0, 0]; } } return gridRowEnds; }, }, methods: { setImageHeight(index) { const image = this.$el.querySelectorAll('.grid-item img')[index]; if (image) { this.imageHeights[index] = image.offsetHeight; } }, }, }; </script> <style> .grid-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); grid-auto-rows: 10px; grid-auto-flow: dense; } .grid-item { margin: 10px; overflow: hidden; } </style> ``` 这个示例代码假设所有图片都有相同的宽度,但高度可能不同。在计算属性中,我们使用一个循环来为每个图片div设置正确的结束行。我们还使用一个方法来获取每个图片的实际高度,并将其存储在一个数组中。最后,在CSS中,我们使用了grid布局来创建网格布局,并使用grid-row-end属性来设置每个图片div的结束行。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值