CSS中的栅格布局

news2024/11/19 4:45:21

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.coloradmin.cn/o/1150134.html

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

相关文章

中兴再推爆款,双2.5G网口的巡天AX3000Pro+仅需299元

10月30日消息,中兴新款路由器中兴巡天AX3000Pro将于10月31日20:00正式开售,当前可在天猫、京东及红魔商城进行预约,首发价格299元。 据了解,中兴巡天AX3000Pro是中兴智慧家庭推出的巡天系列新品,也是当前市场上唯一一款300元价位内配备双2.5G网口的路由器。 中兴巡天AX3000Pro…

客户端与服务端实时通讯(轮询、websocket、SSE)

客户端与服务端实时通讯 背景 在某些项目中&#xff0c;某些数据需要展示最新的&#xff0c;实时的&#xff0c;这时候就需要和服务端进行长时间通讯 方案 对于数据实时获取&#xff0c;我们一般会有4种方案&#xff1a; 1.短轮询&#xff1a;使用浏览器的定时器发起http请…

三叠云督察督办解决方案:助力企业高效决策与执行

信息时代的到来&#xff0c;企业面临着日益增长的管理挑战。高竞争的商业环境中&#xff0c;如何实现高效的决策和执行成为了企业迫切需要解决的问题。在现代企业管理中&#xff0c;督察督办工作的重要性也日益凸显。 然而&#xff0c;传统的督察督办模式存在诸多问题&#xff…

JavaScript组合模式

JavaScript组合模式 1 什么是组合模式2 宏命令3 示例&#xff1a;扫描文件夹4 引用父对象 1 什么是组合模式 组合模式是一种结构型设计模式&#xff0c;用于将对象组合成树形结构&#xff0c;并使客户端能够统一处理单个对象和组合对象。它通过使用继承和组合两个概念&#xf…

题目描述:输入数字,第一行为数组的大小,第二行为数组的值。求其中相邻两个数字相差不大于8的最大片段的长度。

题目描述&#xff1a; 输入数字&#xff0c;第一行为数组的大小&#xff0c;第二行为数组的值。求其中相邻两个数字相差不大于8的最大片段的长度。 示例1&#xff1a; 输入&#xff1a;91 2 4 6 12 2 8 6 4 输出&#xff1a;5示例2&#xff1a; 输入&#xff1a;101 4 5 6 2…

数据清洗(1)--数据查缺补漏

前言 之前使用scikit 进行一些基础模型的选择&#xff08;SVM支持向量机&#xff0c;LR算法&#xff0c;KNN&#xff0c;SGD&#xff0c;Bays贝叶斯&#xff0c;决策树&#xff0c;随机森林&#xff09;&#xff0c;创建&#xff0c;训练&#xff08;测试集验证集&#xff09;…

Redis测试新手入门教程

在测试过程中&#xff0c;我们或多或少会接触到Redis&#xff0c;今天就把在小破站看到的三丰老师课程&#xff0c;把笔记整理了下&#xff0c;用来备忘&#xff0c;也希望能给大家带来亿点点收获。 主要分为两个部分&#xff1a; 一、缓存技术在后端架构中是如何应用的&#…

C语言实现求某班学生的平均成绩和均方差

完整代码&#xff1a; /* 已知求成绩的平均值和均方差公式为&#xff1a;&#x1d44e;&#x1d463;&#x1d452; ∑&#x1d460;&#x1d456;/n , &#x1d451;&#x1d452;&#x1d463; √(∑ (&#x1d460;&#x1d456;−&#x1d44e;&#x1d463;&#x1d45…

Android开发知识学习——HTTPS

文章目录 定义HTTPS连接HTTPS 连接建立的过程课后题 定义 HTTP Secure / HTTP over SSL / HTTP over TLS SSL&#xff1a;Secure Socket Layer -> TLS Transport Layer Security 定义&#xff1a;在HTTP之下增加的一个安全层&#xff0c;用于保障HTTP的加密传输 本质&…

Python 自动化测试全攻略:五种自动化测试模型实战详解!

随着移动互联网的发展&#xff0c;软件研发模型逐步完善&#xff0c;软件交付质量越来越受到软件公司的重视&#xff0c;软件测试技术特别是自动化测试技术开始在软件系统研发过程中发挥着越来越重要的作用。 与传统的手工测试技术相比&#xff0c;自动化测试具备了良好的可操…

Mysql进阶-索引篇(下)

SQL性能分析 SQL执行频率 MySQL 客户端连接成功后&#xff0c;通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令&#xff0c;可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次&#xff0c;通过sql语句的访问频次&#xff0c;我们可…

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

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

【java学习—十】操作集合的工具类Collections(8)

文章目录 1. 操作集合的工具类&#xff1a; Collections2. 应用3. 查找、替换3.1. max 与 min3.2. 根据Comparator返回max(min) 3.3. frequency 与 replaceAll4. 同步控制 1. 操作集合的工具类&#xff1a; Collections Collections 是一个操作 Set 、List 和 Map 等集合的工具…

从LLM到AIGC,开启AI时代寻宝之旅!

引言 还记得《头号玩家》中男主人公赢得游戏的方式吗——在游戏中漫无目的地闲逛&#xff0c;然后发现彩蛋&#xff0c;获得胜利。 在人工智能领域&#xff0c;有一种新奇性搜索原则的实验&#xff0c;使得机器研究的成功之路恰似寻找彩蛋的道路。比如在不设定“出门”目标的情…

为什么会被【禅道】工具的公司踢出QQ群的反思…………

周末备份Gitlab的代码库&#xff0c;把Gitlab更新到了最新的16.5。顺带看了禅道官网出了最新版本18.8。但是禅道的升级更新并不顺利…………。 先说一下为什么用禅道这个工具&#xff1a; 再使用禅道这个工具前&#xff0c;使用过的工具有QC(Quality Center)、jira&#xff0…

测试工程师简历编写攻略:打造高点击率的简历!

简历是入职职场的一张名片&#xff0c;也是进入职场一块“敲门砖”。从某种角度说&#xff0c;简历也是一张专业人员的说明书。 软件测试人员作为IT行业具有技术含量的职业&#xff0c;一份优秀的简历包含的内容以及如何写好简历尤为重要。接下来从以下两方面来介绍这个话题&a…

Android任务栈和启动模式

Andrcid中的任务栈是一种用来存放Activity实倒的容器。任务最大的特点就是先进后出&#xff0c;它主要有两个基本操作&#xff0c;分别是压栈和出栈。通常Andaid应用程序都有一个任务栈&#xff0c;每打开一个Activity时&#xff0c;该Activity就会被压入任务栈。每销毁一个Act…

eclipse Occurrence

eclipse Occurrence Occurrence of initUi2_setData_99 Window->Preferences->General->Editors->Text Editors->Annotations->Occurrences 个人感觉最好用的颜色&#xff1b; 边线&#xff0c;正文都可以看得清楚

Elasticsearch(一)---介绍

简介 Elasticsearch是一个基于Lucene的实际的分布式搜索和分析引擎。设计用于云计算中&#xff0c;能够达到近实时搜索&#xff0c;稳定&#xff0c;可靠&#xff0c;快速&#xff0c;安装使用方便。基于RESTful接口。 官网地址&#xff1a;Elasticsearch 平台 — 大规模查找…