css布局实战:动态详情九宫格

news2024/11/29 2:40:55

    上篇文件介绍了如何实现九宫格图片展示:css布局入门级实战之九宫格网格布局.不过存在一个问题:图片之间没有间距,用户体验欠佳;基于以上问题,本文进行优化.
    较之前实现样式做以下调整:四张图按照两行显示,每行显示三个.不足的显示空白.之前是两行两列显示.
    对应九宫格样式布局,这里优化一下display布局方式,采用grid的方式进行处理.
简单交代一下使用到的属性:

grid-template-columns:指定显示每列显示的长度,可以使用repeat函数进行简化书写;
grid-template-rows:指定每行显示的长度.
grid-gap:行与列之间的距离

    以下是简化的项目代码:

<template>
	<view>
		<view class="user_class">
			<u-avatar :src="userImg" size="30"></u-avatar>
			<text>{{userName}}</text>
		</view>
		<view class="content">
			<text>{{contentText}}</text>
		</view>
		<view class="img_class" :style="'height:'+imgClassHeight+'px;'">
			<view class="img_content" v-if="imgClassHeight != 5" :style="'height:'+imgClassHeight+'px;grid-template-columns:repeat(3,'+imgWidth+'px);grid-template-rows:auto;'">
				<image v-for="(dynaicImg,index) in contentImgArray" :key="index" :src="dynaicImg" mode="scaleToFill" :style="'height:'+imgHeight+'px;'+'width:'+imgWidth+'px'"></image>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				// 图片区域大小,根据图片数量动态变化
				imgClassHeight: 0,
				// 图片区域是否换行
				imgClassFlexWrap: '',
				// 图片宽度
				imgWidth: 400,
				// 图片高度
				imgHeight: 400,
				// 屏幕宽度大小
				screenWith: 0,
				contentImg:'',
				contentText:'',  
				userImg:'',  
				userName:'',
				contentImgArray:[],
				commentCount:0,
				createTime:'',
				zanCount:0,
				oneCommentInfoList:[],
				keyboardHeight:0,
				commentFocus: false,
				dynamicId:0,
				dynamicUserId:0,
				comment: '' // 文本框输入评论信息
			};
		},
	   async onLoad(event) {
		  await uni.request({
		       url: 'https://abc:8080/abc/findDynamicInfo', //仅为示例,并非真实接口地址。
		   	data:{
		   		dynamicId:1
		   	},
		       success: (response) => {
		         this.contentImg=response.data.data.contentImg,
		         this.contentText=response.data.data.contentText,  
		         this.userImg=response.data.data.userImg,  
		         this.userName=response.data.data.userName,
				 this.contentImgArray=response.data.data.contentImgArray,
		         this.commentCount=response.data.data.commentCount,
		         this.createTime=response.data.data.createTime,
		         this.zanCount=response.data.data.zanCount,
		         this.dynamicUserId=response.data.data.userId,
				 this.handleImg(response.data.data.contentImgArray.length)
		       }
		   });	
		},
		methods:{
			handleImg(dynamicImgLength){
				// 处理success中无法获取data中属性问题,success中this非vue实例
				let that = this
				// 获取屏幕宽度信息
				uni.getSystemInfo({
					success:function(res) {
						console.log("屏幕宽度:"+res.windowWidth); // 单位:px
						that.screenWith=res.windowWidth;
						console.log("screenWith:"+that.screenWith);
					}
				})
				// 模拟服务器获取的图片数量
				const imgSize=dynamicImgLength;
				// 宽高比:1:1.2
				const WidthHeightRtio=1.2;
				//设置图片区域大小
				if(imgSize == 0){ // 无图片时图片区域大小,默认不显示
					this.imgClassHeight=5;  
				}
				if(imgSize == 1){ // 1张,一行展示
					this.imgClassHeight=240;
					// 宽高比:1:1.2
					this.imgWidth=200;
					this.imgHeight=240
				}
				if(imgSize >= 2 && imgSize <=3){ // 2-3张,一行展示
					
					this.imgWidth=(this.screenWith-20)/imgSize;
					// 按照页面实际显示保持宽高比
					console.log("图片个数:"+imgSize+",每张图大小:"+(this.imgWidth));
					this.imgHeight=this.imgWidth * WidthHeightRtio
					console.log("imgHeight:"+this.imgHeight);
					this.imgClassHeight=this.imgHeight+2;  // 加间距
					console.log("imgClassHeight:"+this.imgClassHeight);
				}
				if(imgSize >= 4 && imgSize <=6){ // 4-6张两行
					// 左右padding为20rpx,所以屏幕宽度需要减去20px,1rpx=0.5px
					this.imgWidth=(this.screenWith-20)/3;  // 每张图片宽度
					console.log("图片个数:"+imgSize+",每张图	大小:"+(this.imgWidth));
					this.imgHeight=this.imgWidth*WidthHeightRtio;
					console.log("imgHeight:"+this.imgHeight);
					// this.imgClassFlexWrap='wrap';
					this.imgClassHeight=this.imgHeight * 2+2; // 加间距
					console.log("imgClassHeight:"+this.imgClassHeight);
				}
				if(imgSize >= 7 && imgSize <=9){ // 7-9张三行
					this.imgWidth=(this.screenWith-20)/3;  // 每张图片宽度
					this.imgHeight=this.imgWidth*WidthHeightRtio;
					this.imgClassFlexWrap='wrap';
					this.imgClassHeight=this.imgHeight * 3;
				}
			}
		}
	}
</script>

<style lang="scss">
.user_class{
	padding-top: 30rpx;
	height: 60rpx;
	width: 100%;
	display: flex;
	justify-content: flex-start;
	align-items: center;
	padding-left: 20rpx;
	text{
		padding-left: 20rpx;
	}
}
.content{
	height: 150rpx;
	width: 100%;
	display: flex;
	justify-content: flex-start;
	align-items: center;
	padding-left: 20rpx;
}
.img_class{
	width: 100%;
	
	.img_content{
		padding-left: 20rpx;
		padding-right: 20rpx;
		display: grid;
		grid-gap: 2px;// 间距
	}
}
</style>

    最终实现效果截图:
在这里插入图片描述
    简单记录一下希望对有同样需求的同学有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

忆暖行动|“他一个人推着老式自行车在厚雪堆的道路上走,车上带着学生考试要用的司机”

忆暖行动|“他一个人推着老式自行车在厚雪堆的道路上走&#xff0c;车上带着学生考试要用的sj” 一头白发&#xff0c;满山青葱 在那斑驳的物件褶皱中&#xff0c;透过泛黄的相片&#xff0c;掩藏着岁月的冲刷和青葱的时光。曾经的青年早已经不复年轻&#xff0c;但是那份热爱…

从信息泄露到权限后台

声明&#xff1a;文中涉及到的技术和工具&#xff0c;仅供学习使用&#xff0c;禁止从事任何非法活动&#xff0c;如因此造成的直接或间接损失&#xff0c;均由使用者自行承担责任。 点点关注不迷路&#xff0c;每周不定时持续分享各种干货。 众亦信安&#xff0c;中意你啊&a…

1210. 穿过迷宫的最少移动次数

你还记得那条风靡全球的贪吃蛇吗&#xff1f; 我们在一个 n*n 的网格上构建了新的迷宫地图&#xff0c;蛇的长度为 2&#xff0c;也就是说它会占去两个单元格。蛇会从左上角&#xff08;(0, 0) 和 (0, 1)&#xff09;开始移动。我们用 0 表示空单元格&#xff0c;用 1 表示障碍…

题目 3166: 蓝桥杯2023年第十四届省赛真题-阶乘的和--不能完全通过,最好情况通过67.

原题链接&#xff1a; 题目 3166: 蓝桥杯2023年第十四届省赛真题-阶乘的和 https://www.dotcpp.com/oj/problem3166.html 致歉 害&#xff0c;首先深感抱歉&#xff0c;这道题还是没有找到很好的解决办法。目前最好情况就是67分。 这道题先这样跳过吧&#xff0c;当然以后还…

RabbitMQ 03 直连模式-可视化界面

这里先演示最简单的模型&#xff1a;直连模式。其结构图为&#xff1a; 一个生产者 -> 消息队列 -> 一个消费者 生产者只需要将数据丢进消息队列&#xff0c;而消费者只需要将数据从消息队列中取出&#xff0c;这样就实现了生产者和消费者的消息交互。 创建一个新的实验…

CLion开发工具 | 05 - 使用CLion开发ESP32

专栏介绍 一、准备工作 电脑上安装好ESP-IDF环境本文参考Jetbrains官方视频教程&#xff1a;在 Windows 上用 CLion 开发 ESP32 | CLion教程 | 嵌入式开发 | IDE 二、打开工程 复制一份新的helloworld工程。 使用CLion打开该工程。 选择信任该工程。 CLion打开后自动打开…

Linux 基础语法 -2

如果我们以后再Linux当中 写了一些命名&#xff0c;导致程序我们不能进行操作了&#xff0c;如这个死循环&#xff1a; 他就会一直输出 "hello Linux" &#xff0c;我们就使用 ctrl c 来终止因为程序或者指令异常&#xff0c;而导致我们无法进行指令输入&#xff…

2023/04/27~28 刷题记录

D - JoJos Incredible Adventures 大致题义&#xff1a; 有一串由 0,1 构成的字符串&#xff0c;每次循环右移一位&#xff0c;行编号从 0 一直到 n-1。求这些行里由 1 构成的最大矩形面积。 题解&#xff1a; 我们其实可以观察到一串连续的 1 经过右移后是会形成一对正三角和…

C# WebService的开发以及客户端调用

目录 1、WebService简介 1.1 什么是XML&#xff1f; 1.2 什么是Soap&#xff1f; 1.3 什么是WSDL&#xff1f; 2、WebService与WebApi的区别与优缺点 2.1 WebService与WebApi的区别&#xff1a; 2.2 WebService的优缺点&#xff1a; 2.3 WebApi的优缺点&#xff1a; 3…

ShardingJDBC 数据库分片 流式处理+归并排序 优化原理刨析

1. 分库分表下的分页查询 业务数据达到一定数据量时&#xff0c;必定会引入数据库分片&#xff0c;但当对于分片的情况下&#xff0c;分页查询是如何做到的&#xff1f; 比如: 数据库db1&#xff0c;中有三个user表&#xff0c;user_0&#xff0c;user_1&#xff0c;user_2&a…

FreeRTOS 信号量(五) ------ 递归互斥信号量

文章目录 一、递归互斥信号量简介二、创建互斥信号量1. xSemaphoreCreateRecursiveMutex()2. xSemaphoreCreateRecursiveMutexStatic() 三、递归信号量创建过程分析四、释放递归互斥信号量五、获取递归互斥信号量六、递归互斥信号量使用示例 一、递归互斥信号量简介 递归互斥信…

Linux学习[8]文件权限深入2 默认权限umask SUID/SGID/SBIT file指令

文章目录 前言1. 默认权限umask1.1 默认权限含义1.2 查看默认权限1.3 默认权限在文件与目录的异同 2. 特殊权限2.1 SUID2.2 SGID2.3 SBIT2.4 SUID/SGID/SBIT 权限设置2.4.1 数字法2.4.2 符号法 3. file指令 前言 在linux学习6里面&#xff0c;通过ls -al命令列出文件的所有详细…

2023/4/30周报

目录 摘要 论文阅读 1、题目和现存问题 2、知识空间理论、GRU和自注意力机制 3、模型构建 4、实验准备 5、实验结果 深度学习 1、GRU 2、代码实例 3、GRU和GCN结合的可能性 总结 摘要 本周在论文阅读上&#xff0c;阅读了一篇基于自注意力机制和双向GRU神经网络的…

【MATLAB数据处理实用案例详解(17)】——利用概念神经网络实现柴油机故障诊断

目录 一、问题描述二、利用概念神经网络实现柴油机故障诊断原理三、算法步骤3.1 定义样本3.2 样本归一化3.3 创建网络模型3.4 测试3.5 显示结果 四、运行结果五、完整代码 一、问题描述 柴油机的结构较为复杂&#xff0c;工作状况非常恶劣&#xff0c;因此发生故障的可能性较大…

linux常用命令大全

作为开发者&#xff0c;Linux是我们必须掌握的操作系统之一。因此&#xff0c;在编写代码和部署应用程序时&#xff0c;熟练使用Linux命令非常重要。这些常用命令不得不会&#xff0c;掌握这些命令&#xff0c;工作上会事半功倍&#xff0c;大大提高工作效率。 一. 文件和目录…

python使用迭代法验证角谷猜想

def fun(n):print(n)while n ! 1:n 3 * n 1 if n % 2 else n / 2print(finished)for i in range(2,1000):fun(i) 1、了解了什么是"角谷猜想" 对于任意一个自然数n,若n为偶数,则将其除以2;若n为奇数,则将其乘以3,然后再加1。如此经过有限次运算后,总可以得到自然数…

【VQ-VAE-2论文精读】Generating Diverse High-Fidelity Images with VQ-VAE-2

【VQ-VAE-2论文精读】Generating Diverse High-Fidelity Images with VQ-VAE-2 0、前言Abstract1 Introduction2 Background2.1 Vector Quantized Variational AutoEncoder 3 Method3.1 Stage 1: Learning Hierarchical Latent Codes3.2 Stage 2: Learning Priors over Latent …

【STM32】知识补充 晶振的基本原理及其应用

【STM32】知识补充 晶振的基本原理及其应用 概述晶振的基本原理晶振的性能参数晶振的分类晶振的应用晶振器在 STM32 上的应用总结 概述 晶振作为现代电子技中的重要组件, 广泛应用于各种电子设备中, 起到稳定时钟信号的作用. 本文将为您解释晶振的基本原理及其在实际应用中的用…

第 02 章 OSPF实验

2.1 OSPF 回顾 2.1.1 实验目的 在 CCNA 中&#xff0c;我们学习到了 OSPF 是一个链路状态路由协议&#xff0c;和 RIP 以及 EIGRP 的最大 不同在于对于它们对于网络的认识以及根本的算法的不同。通过对 CCNA 中 OSPF 配置实验 的回顾&#xff0c;从中加强我们对 OSPF 的理解。…

带你学c带你飞-P7取值范围

比特位 CPU能读懂的最小单元——比特位&#xff0c;bit&#xff0c;b 字节 内存机构的最小寻址单元——字节&#xff0c;Byte&#xff0c;B 1Byte8bit 进制 怎么算 注意&#xff1a;int默认是signed类型&#xff0c;signed类型第一位是符号位 符号位 存放signed类型的存…