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

这篇具有很好参考价值的文章主要介绍了css布局实战:动态详情九宫格。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    上篇文件介绍了如何实现九宫格图片展示: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>

    最终实现效果截图:
css布局实战:动态详情九宫格
如果出现列之间间隔过大,调节间距不生效的现象,可以从script中尝试设置相同的行宽与列宽,修改行宽以及列宽修改间隔显示,可以替代grid-gap:

		grid-template-columns:repeat(3,83px);
		grid-template-rows:repeat(3,83px);

    简单记录一下希望对有同样需求的同学有所帮助!文章来源地址https://www.toymoban.com/news/detail-429291.html

到了这里,关于css布局实战:动态详情九宫格的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序九宫格布局,轮播图

    在微信小程序中,可以使用 view 标签来实现九宫格布局。具体步骤如下: 在wxml文件中,使用 lt;view 标签设置一个容器。例如: 使用CSS样式来设置 grid-container 类的样式,使其成为九宫格布局。例如: 在 view 标签中放置具体内容。例如,线上教育小程序的九宫格布局页面代码

    2024年01月16日
    浏览(59)
  • 如何注释 PDF?注释PDF文件方法详情介绍

    大多数使用 PDF 文档的用户都熟悉处理这种格式的文件时出现的困难。有些人仍然认为注释 PDF 的唯一方法是打印文档,使用笔或荧光笔然后扫描回来。 您可能需要向 PDF 添加注释、添加注释、覆盖一些文本或几何对象。经理、部门负责人在编辑公司内的合同、订单、发票或任

    2024年01月18日
    浏览(51)
  • 【pyqt5界面化开发-5】网格布局(九宫格)界面

    需要模块:QGridLayout 代码

    2024年02月11日
    浏览(39)
  • 九宫格布局小程序-模仿微信钱包界面设计-基础入门

    代码展示: 使用flex布局模型和wx:for属性仿微信“钱包”页面实现九宫格 项目创建完毕之后,在根目录中会生成文件夹pages用于存放页面文件。一般来说首页默认命名为index,表示小程序运行的第一个页面; 将app.json文件内pages属性中的“pages/logs/logs”删除,并删除上一行末尾

    2024年02月08日
    浏览(47)
  • [CSS] 图片九宫格

    2024年02月13日
    浏览(28)
  • 纯css实现九宫格图片

    本篇文章所分享的内容主要涉及到结构伪类选择器,不熟悉的小伙伴可以了解一下,在常用的css选择器中我也有分享相关内容。 话不多说,接下来我们直接上代码: 效果展示:   今日寄语:没有什么是不可能的,只是需要你去尝试!

    2024年02月14日
    浏览(29)
  • web前端——HTML+CSS实现九宫格

    web前端——HTML+CSS实现九宫格

    2024年02月05日
    浏览(44)
  • 【接上篇】二、Flask学习之CSS(下篇)

    上篇:二、Flask学习之CSS 3.8hover hover 是用来美化鼠标悬停的效果的,当鼠标停放在某个区域,就会执行对应的 hover 操作。可以操作本标签的内容,也可以操作本标签下某一个标签的内容 3.9after after 是用来在某个标签的最后添加某些东西: 3.10position fixed relative absolute fixed(固

    2024年01月24日
    浏览(31)
  • HTML .CSS实现商品详情(detail)

    一、知识点 1、无序列表ul/ul 2、float浮动 (1)why浮动的作用:排版布局 (2)原理:两个盒子,默认上下排列,给第二个盒子就会浮上去(跟第一个盒子同一水平线) (3)how怎么用: (4)clear:清除浮动 3、CSS精灵图 4、详情页面用到的CSS属性: (1)、border-radius:边框圆角半径 (2)、

    2024年02月11日
    浏览(44)
  • js实用方法记录-js动态加载css、js脚本文件

    附送一个加载iframe,h5打开app代码 方法调用: dynamicLoadJs(\\\'http://www.yimo.link/static/js/main.min.js\\\',function(){alert(\\\'加载成功\\\')}); 方法调用:  dynamicLoadCss(\\\'http://www.yimo.link/static/css/style.css\\\') 参考:动态加载js和css - 猿客 - 博客园 方法调用: dynamicLoadIframe(\\\'http://www.yimo.link\\\',function(){alert(\\\'加载

    2024年02月13日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包