uniapp瀑布流布局写法

2023-09-19 09:24:18

首先我们要清楚瀑布流是什么?

瀑布流布局(Waterfall Flow Layout),也称为瀑布流式布局,是一种常见的网页或移动应用布局方式,特点是元素以不规则的方式排列,就像瀑布中的流水一样,每个元素的高度可以不同。

主要特点和优点包括:

  1. 不规则的排列:瀑布流布局允许元素以不同的高度和宽度排列,因此适用于展示不同尺寸和形状的内容,如图片、卡片、商品等。

  2. 动态加载:可以通过滚动加载或异步加载来动态添加新的元素,以实现无限滚动效果,提高用户体验。

  3. 最大化利用空间:瀑布流布局可以更好地利用可用空间,因为元素会根据其实际高度自动填充空白区域,减少了页面空白和浪费。

  4. 适应性:适用于不同屏幕大小和设备类型,可以实现响应式布局,适应各种屏幕分辨率。

  5. 视觉吸引力:瀑布流布局在设计上常常呈现出视觉上的吸引力,因为元素的不规则排列可以创造出有趣的视觉效果。

mode="widthFix"什么意思?

当你设置一个图片的 mode 属性为 "widthFix" 时,图片的宽度将会被拉伸或缩小以适应容器的宽度,同时保持图片的原始宽高比例。这意味着图片的高度会根据宽度自动调整,以确保图片不会变形,并且整个图片都能在容器内显示,而不会超出容器或留有空白。

存html和css生成,javascript中仅仅只是用于渲染的假数据。

用于渲染的假数据

      itemList: [
        {
          imageSrc: 'https://pic.imgdb.cn/item/65084fd3204c2e34d3a96817.jpg',
          title: '我是标题1',
          content: '我是内容1',
        },
        {
          imageSrc: 'https://pic.imgdb.cn/item/650850d7204c2e34d3a984ca.jpg',
          title: '我是标题2',
          content: '我是内容2',
        },
        {
          imageSrc: 'https://pic.imgdb.cn/item/64eee7e1661c6c8e54a86a07.jpg',
          title: '我是标题3',
          content: '我是内容3',
        },
        {
          imageSrc: 'https://pic.imgdb.cn/item/65085109204c2e34d3a9933c.jpg',
          title: '我是标题4',
          content: '我是内容4',
        },
        {
          imageSrc: 'https://pic.imgdb.cn/item/65084fd3204c2e34d3a96817.jpg',
          title: '我是标题5',
          content: '我是内容5',
        },
      ],

css样式部分

.content {
  padding: 30rpx;
  box-sizing: border-box;
  column-count: 2;
}
image {
  width: 100%;
  border-radius: 6rpx;
}
.title {
  margin-left: 15rpx;
  margin-right: 15rpx;
  font-size: 30rpx;
}
.con {
  margin: 15rpx;
  margin-top: 20rpx;
  display: flex;
  font-size: 26rpx;
  align-items: center;
  justify-content: space-between;
}
.list {
  break-inside: avoid;
  width: 330rpx;
  border: 1px solid #f4f4f4;
}

对于css每一部分的介绍

  1. .content

    • padding: 30rpx;:设置容器 .content 的内边距为 30rpx,这会在容器内部的内容和容器的边缘之间添加空间。
    • box-sizing: border-box;:指定了盒子模型为 border-box,这意味着内边距和边框的宽度不会增加容器的总宽度,以便更好地控制盒子的尺寸。
    • column-count: 2;:将容器 .content 分成两列,实现多列布局效果。
  2. image

    • width: 100%;:将所有图片的宽度设置为父容器宽度的100%,使图片自适应容器宽度。
    • border-radius: 6rpx;:设置图片的圆角半径为6rpx,使图片的边角变得圆滑。
  3. .title

    • margin-left: 15rpx;margin-right: 15rpx;:设置标题文本的左右外边距为15rpx,这会在标题文本的左右两侧添加空白间距。
    • font-size: 30rpx;:设置标题文本的字体大小为30rpx。
  4. .con

    • margin: 15rpx;:设置内容区块的上下外边距为15rpx,以及左右外边距的默认值,创建上下间距。
    • margin-top: 20rpx;:增加内容区块的上外边距,以增加上方的间距。
    • display: flex;:将内容区块设置为弹性布局,以便内部元素可以灵活布局。
    • font-size: 26rpx;:设置内容文本的字体大小为26rpx。
    • align-items: center;:设置内容区块内元素的纵向对齐方式为居中对齐。
    • justify-content: space-between;:设置内容区块内元素的横向对齐方式为两侧对齐,左右两侧留有空白空间。
  5. .list

    • break-inside: avoid;:避免在列表项之间分页中断,以确保每个列表项在同一页内显示完整。
    • width: 330rpx;:设置列表项的宽度为330rpx。
    • border: 1px solid #f4f4f4;:给列表项添加1像素宽的实线边框,边框颜色为 #f4f4f4,用于界定列表项的边界。

HTML部分

循环自己获取到的数据,也就是itemList的数据,绑定一个下标循环渲染

<template>
  <view>
    <view class="content">
      <view class="list" v-for="(item, index) in itemList" :key="index">
        <image mode="widthFix" :src="item.imageSrc"></image>
        <view class="title">{{ item.title }}</view>
        <view class="con">{{ item.content }}</view>
      </view>
    </view>
  </view>
</template>

完整代码

<template>
  <view>
    <view class="content">
      <view class="list" v-for="(item, index) in itemList" :key="index">
        <image mode="widthFix" :src="item.imageSrc"></image>
        <view class="title">{{ item.title }}</view>
        <view class="con">{{ item.content }}</view>
      </view>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      itemList: [
        {
          imageSrc: 'https://pic.imgdb.cn/item/65084fd3204c2e34d3a96817.jpg',
          title: '我是标题1',
          content: '我是内容1',
        },
        {
          imageSrc: 'https://pic.imgdb.cn/item/650850d7204c2e34d3a984ca.jpg',
          title: '我是标题2',
          content: '我是内容2',
        },
        {
          imageSrc: 'https://pic.imgdb.cn/item/64eee7e1661c6c8e54a86a07.jpg',
          title: '我是标题3',
          content: '我是内容3',
        },
        {
          imageSrc: 'https://pic.imgdb.cn/item/65085109204c2e34d3a9933c.jpg',
          title: '我是标题4',
          content: '我是内容4',
        },
        {
          imageSrc: 'https://pic.imgdb.cn/item/65084fd3204c2e34d3a96817.jpg',
          title: '我是标题5',
          content: '我是内容5',
        },
      ],
    };
  },
  onUnload() {},
  methods: {},
};
</script>

<style scoped>
.content {
  padding: 30rpx;
  box-sizing: border-box;
  column-count: 2;
}
image {
  width: 100%;
  border-radius: 6rpx;
}
.title {
  margin-left: 15rpx;
  margin-right: 15rpx;
  font-size: 30rpx;
}
.con {
  margin: 15rpx;
  margin-top: 20rpx;
  display: flex;
  font-size: 26rpx;
  align-items: center;
  justify-content: space-between;
}
.list {
  break-inside: avoid;
  width: 330rpx;
  border: 1px solid #f4f4f4;
}
</style>

谢谢观看

更多推荐

9.基于粤嵌gec6818开发板小游戏2048的算法实现

2048源码:感兴趣的可以去了解一下2048优化算法:基于蒙特卡罗树搜索的_2048_游戏优化算法_刘子正#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/mman.h>#include<lin

leetcode刷题--链表

文章目录1.203移除的元素2.237删除链表中的节点3.19删除链表的倒数第N个节点4.430扁平化多级双向链表5.61旋转链表6.24两两交换链表中的节点7.206反转链表8.92反转链表II9.25K个一组翻转链表10.21合并两个有序链表11.23合并k个升序链表12.2两数相加13.445两数相加II题目分类

LLM - 大模型速递 InternLM-20B 快速入门

目录一.引言二.模型简介1.模型特性2.模型评测三.模型尝试1.模型参数2.generate与chat3.模型微调四.总结一.引言一早醒来国产开源大模型又添一员猛将,书生-浦语大模型InternLM-20B大模型发布并开源,这里字面翻译是实习生大模型,比较有意思。该模型由上海人工智能实验室与商汤科技联合香港中文大学和复

【第57篇】DEiT:通过注意力训练数据高效的图像transformer &蒸馏

摘要最近,纯基于注意力的神经网络被证明可以解决图像理解任务,如图像分类。这些高性能的是使用大型基础设施预先训练数以亿计的图像,从而限制了它们的采用。本文仅通过在Imagenet上训练,产生有竞争力的无卷积transformer。我们用一台电脑在不到3天的时间里训练它们。所提出的参考视觉transformer(86M参数

时序预测 | MATLAB实现NGO-LSTM北方苍鹰算法优化长短期记忆网络时间序列预测

时序预测|MATLAB实现NGO-LSTM北方苍鹰算法优化长短期记忆网络时间序列预测目录时序预测|MATLAB实现NGO-LSTM北方苍鹰算法优化长短期记忆网络时间序列预测预测效果基本介绍程序设计参考资料预测效果基本介绍MATLAB实现NGO-LSTM北方苍鹰算法优化长短期记忆网络时间序列预测(完整源码和数据)1.da

项目:TCP在线云词典

一.要求1.搭建的框架环境中实现并发,实现多个用户同时查询的功能。2.服务器分别保存每个用户的使用记录,客户端可以查询日志的功能。3.基本的查询单词的功能。4.密码验证的功能,实现登录验证账号和密码是否正确。二.流程和框架框架客户端服务器三.思路1.首先你要准备好单词文件,用于英语单词的查询。dict.txt2.该项目

【C++】泛型算法(四)使用顺序性容器

一、顺序性容器顺序性容器用来维护一组有序、类型相同的元素。主要是:vector和list。1.vectorvector是用一块连续的内存存放数据;vector进行随机访问,效率比较高(适合数列);vector对于插入和删除操作效率较低:这是由于vector内的每个元素都被存储在距离起始点固定的偏移位置,当进行插入操作时

C++ - 异常介绍和使用

前言我们在日常编写代码的时候,难免会出现编写错误带来程序的奔溃,或者是用户在使用我们编写的程序时候,使用错误所带来程序的奔溃。在C++当中可以对你觉得可能发生错误的地方在运行之前进行判断,发生错误可以给出提示。C语言传统的处理错误的方式在了解C++当中处理错误的异常之前,我们先来了解一下C语言当中处理错误的方式。终止程

前端面试的话术集锦第 20 篇博文——高频考点(输入 URL 到页面渲染的整个流程)

这是记录前端面试的话术集锦第二十篇博文——高频考点(输入URL到页面渲染的整个流程),我会不断更新该博文。❗❗❗借用这道经典面试题,将之前学习到的浏览器以及网络几章节的知识联系起来。首先是DNS查询,如果这一步做了智能DNS解析的话,会提供访问速度最快的IP地址回来。1.DNSDNS的作用就是通过域名查询到具体的IP。

【Vue】安装并使用vue-cli搭建SPA项目

目录一、Vue-cli安装1.1什么是Vue-cli1.2安装Vue-cli1.3使用Vue-cli构建项目二、SPA项目2.1导入、运行SPA项目2.2vue项目结构说明2.3.什么是*.vue文件2.4基于SPA项目完成路由2.5基于SPA项目完成嵌套路由一、Vue-cli安装1.1什么是Vue-cliVueCLI

换台电脑python使用uiautomator2操作逍遥模拟器

前几天写了一篇文章python使用uiautomator2操作雷电模拟器_小小爬虾的博客-CSDN博客今天用另外一个环境和模拟器再次测试。环境如下:win7sp164位;Python3.8.10;逍遥模拟器9.0.6;android版本9;逍遥模拟器自带adb版本1.0.41一、首先将手机(模拟器)进入开发者模式。多次

热文推荐