CSS中的栅格布局

CSS中的栅格布局

在写前端项目的时候,我之前一直习惯使用flex布局,flex布局写起来比较随心,几乎可以实现任意形式的页面布局。不过自从B占看到某位大佬的grid布局后,发现布局居然还可以这么玩,正好自己在写一个vue3的项目,需要写几个大屏展示方案,用栅格布局实现了一下,发现真香

看一下最后的实现效果,真实效果比这个好很多,因为有数据和地图,但这里主要记录怎么使用栅格布局,所以我只将精髓

image-20231027171054551

页面分上中下三部分,整体使用flex布局,排列方向是column。上面是标题,中间是数据看板,下面是展示的核心内容

上面也是用的flex布局,中间和下面都是grid布局

先看下完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>网格布局</title><style>.main-screen {display: flex;flex-direction: column;align-items: center;justify-content: center;}.header {width: 100%;height: 80px;background-color: #030829;display: flex;align-items: center;justify-content: space-between;}.time {color: #fff;margin-left: 20px;}.tip {color: #fff;margin-right: 20px;display: flex;justify-content: center;align-items: center;}.header-title {width: 30%;text-align: center;color: #FFFFff;background-size: 100% 100%;height: 80px;font-family: "微软雅黑" !important;}h2 {margin-top: 16px !important;font-size: 28px !important;}.content {width: 100%;background-color: #081832;padding-top: 10px;padding-bottom: 5px;height: 950px;display: flex;flex-direction: column;}.numeric {padding: 10px;display: grid;grid-template-columns: 1fr 1fr 1fr;gap: 30px;// background-color: #034c6a;height: 15%;width: 100%;}.chart {height: 85%;width: 100%;// border: 1px solid #fff;display: grid;grid-template-columns: repeat(10, 1fr);gap: 10px;padding: 10px;}.box {box-shadow: -10px 0px 15px #034c6a inset,0px -10px 15px #034c6a inset,10px 0px 15px #034c6a inset,0px 10px 15px #034c6a inset;border: 1px solid #034c6a;box-sizing: border-box;margin-top: 10px;position: relative;display: flex;justify-content: center;align-items: center;flex-direction: column;}.title {background-color: #034c6a;border-radius: 18px;position: absolute;height: 35px;width: 60%;top: -15px;color: #ffffff;font-weight: bold;font-size: 16px;left: 20%;line-height: 35px;text-align: center;}.top-left {grid-row: 1/4;grid-column: 1/3;}.bottom-left {grid-row: 4/7;grid-column: 1/3;}.middle-map-left {grid-row: 1/5;grid-column: 3/6;}.middle-map-right {grid-row: 1/5;grid-column: 6/9;}.middle-bottom-left {grid-row: 5/7;grid-column: 3/5;}.middle-bottom-bottom {grid-row: 5/7;grid-column: 5/7;}.middle-bottom-right {grid-row: 5/7;grid-column: 7/9;}.right-top {grid-row: 1/4;grid-column: 9/11;}.right-bottom {grid-row: 4/7;grid-column: 9/11;}.numeric-box {background-color: #034c6a;border-radius: 8px;height: 100%;display: flex;justify-content: space-around;align-items: center;}</style>
</head>
<body style="margin: 0; padding: 0;"><div class="main-screen"><div class="header"><div class="time">2023-10-27 16:59:59</div><div class="header-title"><h2><strong>无锡市今日数据看板</strong></h2></div><div class="tip"><span>提示:数据每小时更新</span></div></div><div class="content"><div class="numeric"><div class="numeric-box"></div><div class="numeric-box"></div><div class="numeric-box"></div></div><div class="chart"><div class="box top-left"><div class="title">江阴市</div></div><div class="box bottom-left"><div class="title">宜兴市</div></div><div class="box middle-map-left"><div class="title">今日地图</div></div><div class="box middle-map-right"><div class="title">当前地图</div></div><div class="box middle-bottom-left"><div class="title">滨湖区</div></div><div class="box middle-bottom-bottom"><div class="title">新吴区</div></div><div class="box middle-bottom-right"><div class="title">梁溪区</div></div><div class="box right-top"><div class="title">锡山区</div></div><div class="box right-bottom"><div class="title">惠山区</div></div></div></div></div>
</body>
</html>

先看中间的三个数据展示面板的网格布局,样式代码如下

    .numeric {padding: 10px;display: grid;grid-template-columns: 1fr 1fr 1fr;gap: 30px;// background-color: #034c6a;height: 15%;width: 100%;}.numeric-box {background-color: #034c6a;border-radius: 8px;height: 100%;display: flex;justify-content: space-around;align-items: center;}

主要看上面的numeric,这是一个很基础的网格布局,核心就是设置grid-template-columns,因为有3列,所以写三个1fr就行了,然后就是样式的美化,gap是样式之间的间隔

下面来看比较复杂的grid布局

下面那部分内容,我要展示7个小的方块,2个大一点的方块,大的方块要放在中间,为了布局好看点,我进行了如下的设计:

image-20231030081645560

每个方块,都有一个box属性,就是设置背景颜色和阴影的。其他的属性直接在图上标注了。

那现在的重点就是如何用栅格布局来设计这种响应式的大屏页面了,根据代码:

首先看容器的样式

    .chart {height: 85%;width: 100%;// border: 1px solid #fff;display: grid;grid-template-columns: repeat(10, 1fr);gap: 10px;padding: 10px;}

关键的代码就是设置了grid-template-columns: repeat(10, 1fr);意思是横向上重复10列,也就是有10个网格,这个10如何而来,自然是根据上面的设计,从B到K正好10格。

接下来看每个方块是怎么设置的

 	.top-left {grid-row: 1/4;grid-column: 1/3;}.bottom-left {grid-row: 4/7;grid-column: 1/3;}.middle-map-left {grid-row: 1/5;grid-column: 3/6;}.middle-map-right {grid-row: 1/5;grid-column: 6/9;}.middle-bottom-left {grid-row: 5/7;grid-column: 3/5;}.middle-bottom-bottom {grid-row: 5/7;grid-column: 5/7;}.middle-bottom-right {grid-row: 5/7;grid-column: 7/9;}.right-top {grid-row: 1/4;grid-column: 9/11;}.right-bottom {grid-row: 4/7;grid-column: 9/11;}

其实都是设置了2个属性

  • grid-row,这个属性表示的意思是,元素的行占位,比如1/4,其中1表达的意思是从第1行开始,4表达的意思是占3行,1+3=4,再比如5/7,5表示从第5行开始,占2行,5+2=7
  • grid-column和grid-row一样

所以关键就是设计好上面那个页面,然后根据这两个参数,就能完成一个响应式的grid部局了,比自己手写flex布局效果要好得多

还有一些细节,就是网格之间还会有间距,可以用gap来设置

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

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

相关文章

【大数据Hive】hive 表数据优化使用详解

目录 一、前言 二、hive 常用数据存储格式 2.1 文件格式-TextFile 2.1.1 操作演示 2.2 文件格式 - SequenceFile 2.2.1 操作演示 2.3 文件格式 -Parquet 2.3.1 Parquet简介 2.3.2 操作演示 2.4 文件格式-ORC 2.4.1 ORC介绍 2.4.2 操作演示 三、hive 存储数据压缩优…

在线主动学习算法评估策略:prequential evaluation procedure

在线主动学习算法评估策略&#xff1a;prequential evaluation procedure 在在线主动学习领域(Online Active Learning)&#xff0c;对在线主动学习算法的评估策略有多种方法&#xff0c;而现如今常用的方法是prequential evaluation procedure(出自论文《High density-focuse…

c++二叉树遍历

参考文献 数据结构c语言版&#xff0c;严蔚敏_吴伟民著。 二叉树 中序遍历代码实现 #include<vector> #include<iostream> using namespace std;//Definition for a binary tree node. struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode() : v…

腾讯云轻量应用镜像、系统镜像、Docker基础镜像、自定义镜像和共享镜像介绍

腾讯云轻量应用服务器镜像类型分为应用镜像、系统镜像、Docker基础镜像、自定义镜像和共享镜像&#xff0c;腾讯云百科txybk.com来详细说下不同镜像类型说明和详细介绍&#xff1a; 轻量应用服务器镜像类型说明 腾讯云轻量应用服务器 应用镜像&#xff1a;独有的应用镜像除了包…

Mysql设置了更新时间自动更新,指定更新部分sql时不进行时间更新

现象&#xff1a; 因为字段设置了自动更新&#xff0c;所以sql语句一进行修改此字段就会自动更新时间&#xff0c;但是呢我们的有部分定时任务是半夜执行&#xff0c;并且不能让这个任务修改到数据的更新时间 解决&#xff1a; <update id"updateCreative">ALT…

GoLand GC(垃圾回收机制)简介及调优

GC(Garbage Collector)垃圾回收机制及调优 简单理解GC机制 其实gc机制特别容易理解&#xff0c;就是物理内存的自动清理工。我们可以把内存想象成一个房间&#xff0c;程序运行时会在这个房间里存放各种东西&#xff0c;但有时候我们会忘记把不再需要的东西拿出去&#xff0c…

HubSpot CRM是什么?如何添加、使用呢?

HubSpot CRM是一款强大的客户关系管理工具&#xff0c;它不仅简化了销售和市场营销过程&#xff0c;还提供了多种功能&#xff0c;有助于增强客户互动、提高销售效率和提供更多的洞察信息。 今天运营坛将带领大家深入了解HubSpot CRM&#xff0c;涵盖了它的定义、使用流程、添…

基于STM32闭环步进电机控制系统设计

**单片机设计介绍&#xff0c;1654基于STM32闭环步进电机控制系统设计&#xff08;仿真&#xff0c;程序&#xff0c;说明&#xff09; 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序文档 六、 文章目录 一 概要 基于STM32的闭环步进电机控制系统设计是…

Java版 招投标系统简介 招投标系统源码 java招投标系统 招投标系统功能设计

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看所…

安卓逆向之雷电模拟器中控

一, 雷电模拟器 安装使用 官方地址: https://www.ldmnq.com ,官方论坛 https://www.ldmnq.com/forum/ . 有一个多开管理器,还有就是设置手机的参数比较关键。 二,雷电模拟器开启面具,安装LSP。 设置root 权限。

【数据结构实战项目】C语言实现数据结构顺序表万字详解(附完整运行代码)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 一.了解项目功能 在本次项目中我们的目标是实现一个顺序表: 该顺序表使用动态内存分配,可以用来存储任意数量的同类型数据. 顺序表需要包含三个要素:存储数据的数组arr,顺序表…

Python程序设计期末复习笔记

文章目录 一、数据存储1.1 倒计时1.2 os库1.3 字符串操作1.4 文件操作1.5 列表操作1.6 元组1.7 字典 二、文本处理及可视化2.1 jieba分词2.2 集合操作2.3 pdf文件读取2.4 参数传递2.5 变量作用域 三、数据处理分析3.1 Sumpy3.2 Matplotlib3.3 Numpy 四、Pandas4.1 索引操作4.2 …

技术视角下的跑腿小程序开发:关键挑战和解决方案

跑腿小程序作为连接服务提供者和用户的桥梁&#xff0c;面临着诸多技术挑战。本文将聚焦于技术层面的关键挑战&#xff0c;并提供解决方案&#xff0c;以帮助开发者应对技术上的复杂问题。 1. 实时性与性能挑战 挑战&#xff1a; 跑腿小程序需要实时地匹配订单、更新状态和提…

40基于MATLAB,使用模板匹配法实现车牌的识别。

基于MATLAB&#xff0c;使用模板匹配法实现车牌的识别。具体包括将原图灰度化&#xff0c;边缘检测&#xff0c;腐蚀操作&#xff0c;车牌区域定位&#xff0c;车牌区域矫正&#xff0c;二值化&#xff0c;均值滤波&#xff0c;切割&#xff0c;字符匹配&#xff0c;最终显示车…

小程序request请求封装

以上为本人的项目目录 1.首先在utils中创建request.js文件封装request请求&#xff0c;此封装带上了token&#xff0c;每次请求都会自带token&#xff0c;需要你从后端获取后利用wx.setStorageSync(token,返回的token),不使用的话就是空。 直接复制即可&#xff0c;需要改一下…

(三)库存超卖案例实战——使用redis分布式锁解决“超卖”问题

前言 在上一节内容中我们介绍了如何使用mysql数据库的传统锁&#xff08;行锁、乐观锁、悲观锁&#xff09;来解决并发访问导致的“超卖问题”。虽然mysql的传统锁能够很好的解决并发访问的问题&#xff0c;但是从性能上来讲&#xff0c;mysql的表现似乎并不那么优秀&#xff…

vue3后台管理系统之跨域代理

vite.config.js中 server: {port: 5002,host: true, //0.0.0.0open: false,strictPort: true,proxy: {// 请求前缀/api&#xff0c;只有加了/api前缀的请求才会走代理(前端自定义)/api: {target: http://127.0.0.1:8000,// 获取服务器地址的设置changeOrigin: true,// 路径重写…

AMD HIP并行编程语言及其矢量相加实例——一文带你快速入门

✍️写在前面&#xff1a;随着计算的应用场景变得日益复杂多样&#xff0c;为了跟上人工智能算法对算力的需求&#xff0c;GPU硬件架构快速走向多样化&#xff0c;GPU生产厂家众多&#xff0c;且在商业和市场等因素的影响下&#xff0c;GPU通用计算编程模型也日益多元化。因此&…

Gateway一个诡异问题处理过程

一、前言 我们搭好了网关和一个基础微服务&#xff08;含用户体系、门店服务、商品服务、客户服务&#xff09;&#xff0c;然后用APIfox测试过程中发现通过网关入口请求某些接口&#xff0c;一段时间后返回错误&#xff0c;查看系统日志发现除了报There is no session with i…

流程封装与基于加密接口的测试用例设计

接口测试仅仅掌握 Requests 或者其他一些功能强大的库的用法&#xff0c;是远远不够的&#xff0c;还需要具备能根据公司的业务流程以及需求去定制化一个接口自动化测试框架的能力。所以&#xff0c;接下来&#xff0c;我们主要介绍下接口测试用例分析以及通用的流程封装是如何…