当前位置: 首页 > news >正文

css display:grid布局,实现任意行、列合并后展示,自适应大小屏幕

现有6X7列的一个布局,如下图所示图1
想要用户能组成任意矩形盒子,并展示内容,具体效果如下(仅为一个示例,其实可以任意组合矩形):
在这里插入图片描述
html代码:

<div class="grid-container"><div class="grid-item"  v-for="(v,k) in boxList" :key="k":style="getStyle(v)">{{v.num}}</div>
</div>

首先循环出42个格子,js代码

getData() {// 指定每行最大的元素数量const maxPerRow = 6;// 循环生成 42 个元素for (let i = 1; i <= 42; i++) {// 计算当前元素所在的行和列let row = Math.ceil(i / maxPerRow);let col = i % maxPerRow === 0 ? maxPerRow : i % maxPerRow;let data = {num: i,x: [row, col],merge: [0, 0],//[合并行数,合并列数]};// 添加对象到数组this.boxList.push(data);}
},

此时会生成如图1所示的42个格子,让用户去勾选格子合并,合并逻辑后端完成。
样式合并方法如下:

getStyle(v) {const styles = {};if (v.merge[0] > 0) {//合并列styles['grid-row'] = `${v.x[0]} / span ${v.merge[0]}`;}if (v.merge[1] > 0) {//合并行styles['grid-column'] = `${v.x[1]} / span ${v.merge[1]}`;}return styles;},

模拟后端数据返回方法如下:

getData() {// 指定每行最大的元素数量const maxPerRow = 6;// 循环生成 42 个元素for (let i = 1; i <= 42; i++) {// 计算当前元素所在的行和列let row = Math.ceil(i / maxPerRow);let col = i % maxPerRow === 0 ? maxPerRow : i % maxPerRow;let data = {num: i,x: [row, col],merge: [0, 0],//[合并行数,合并列数]};if(i == 3) {data.merge = [3, 2];}if(i == 5) {data.merge = [3, 2];}if([19,21,31,33,35].indexOf(i) > -1) {data.merge = [2, 2];}if([23,24].indexOf(i) > -1) {data.merge = [2, 0];}// 添加对象到数组if([4,6,9,10,11,12,15,16,17,18,20,22,25,26,27,28,29,30,32,34,36,37,38,39,40,41,42].indexOf(i) == -1) {this.boxList.push(data);}}
},

生成效果为:
在这里插入图片描述

相关文章:

  • VMR,支持30+种编程语言的SDK版本管理器,支持Windows/MacOS/Linux。
  • 手写实现call函数和应用场景
  • 刷题记录(240619)
  • JSON学习
  • .Net多线程Threading相关详解
  • 数据库大作业——音乐平台数据库管理系统
  • 爬虫的法律风险是什么?以及合法使用爬虫技术的建议。
  • 基于深度学习的光流预测
  • Elasticsearch搜索引擎(高级篇)
  • k8s快速上手实操
  • llama-factory微调chatglm3
  • MySQL数据库的列类型
  • 如何理解shell命令 cd $(dirname $0)
  • matlab 路面点云标线提取
  • 2024年应用科学、航天航空与核科学国际学术会议(ICASANS 2024)
  • ES6系列(二)变量的解构赋值
  • JavaScript对象详解
  • Java教程_软件开发基础
  • Linux快速复制或删除大量小文件
  • maya建模与骨骼动画快速实现人工鱼
  • Vue组件定义
  • Web Storage相关
  • 从零开始学习部署
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 记一次删除Git记录中的大文件的过程
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 区块链将重新定义世界
  • 如何合理的规划jvm性能调优
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 进程与线程(三)——进程/线程间通信
  • 数据可视化之下发图实践
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​比特币大跌的 2 个原因
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • (175)FPGA门控时钟技术
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (Git) gitignore基础使用
  • (办公)springboot配置aop处理请求.
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (三)SvelteKit教程:layout 文件
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)iOS字体
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .gitattributes 文件
  • .NET C# 使用 iText 生成PDF
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .net core使用EPPlus设置Excel的页眉和页脚