数据可视化大屏的页面布局以及自适应

news2024/11/25 10:39:49

在做数据可视化大屏之前,我们需要考虑到页面的布局问题以及页面缩放自适应问题,下面分别就这两个方面讲解。

页面布局

类似这种页面区块的明显划分,常用的布局方式有两种:
1、flex布局
2、grid布局

grid布局
grid布局可以按区块来划分页面布局,并且可以在划分布局的基础上配置区块在页面的占比大小。

关于grid的官方文档说明:https://developer.mozilla.org/zh-CN/docs/Web/CSS/grid

grid属性:

属性说明
grid-template-columns配置y轴的区块数量和占比
grid-template-rows配置x轴的区块数量和占比
grid-area来配置区块在x、y轴的占比大小。
grid-column-gapy轴的区块间隙
grid-row-gapx轴的区块间隙

我们可以使用网格布局实现如下效果:
在这里插入图片描述
代码如下:

<div class="container">
         <div class="embody">
               <div class="head-title"></div>
               <div class="chunk">
                  <div class="left-chunk">
                     <div class="left-top"></div>
                     <div class="left-center"></div>
                     <div class="left-bottom"></div>
                  </div>
                  <div class="center-chunk">
                    <div class="center-main"></div>
                    <div class="center-bottom"></div>
                  </div>
                  <div class="right-chunk">
                    <div class="right-top"></div>
                    <div class="right-center-top"></div>
                    <div class="right-center-bottom">
                        <div class="right-center-bottom-inner-left"></div>
                        <div class="right-center-bottom-inner-right"></div>
                    </div>
                    <div class="right-bottom"></div>
                  </div>
               </div>
         </div>
    </div>
.container{
    width: 100%;
    height: 100vh;
    background: #101129;
}

.embody{
    width: 100%;
    height: 100%;
    border: 1px solid red;
    .head-title{
        width: 100%;
        height: 80px;
        border: 1px solid cyan;
        background: url('../../assets/logo.png') no-repeat center / 100%;
    }
    .chunk{
        width: 100%;
        height: calc(100% - 80px);
        border: 1px solid gold;
        display: grid;
        grid: repeat(5,1fr) / repeat(7,1fr);  /* x / y */
        grid-column-gap : 10px;
        grid-row-gap : 0px;

        .left-chunk { grid-area :  1 / 1 / 6 / 3; border: 1px solid cyan;}
        .center-chunk {grid-area : 1 / 3 / 6 / 6; border: 1px solid red;}
        .right-chunk { grid-area : 1 / 6 / 6 / 8; border: 1px solid violet;}
    }

    .left-chunk{
        display: grid;
        grid: 1fr 4fr 3fr / repeat(1,1fr);
        grid-column-gap:0px;
        grid-row-gap:10px;
        .left-top{ border: 1px solid red;}
        .left-center{border: 1px solid red;}
        .left-bottom{border: 1px solid red;}

    }
    .center-chunk{
        display: grid;
        grid: 5fr 3fr / 1fr;
        grid-column-gap : 0px;
        grid-row-gap : 10px;
        .center-main{border: 1px solid red;}
        .center-bottom{border: 1px solid red;}
    }
    .right-chunk{
       display: grid;
       grid: 1 repeat(3,2fr) / 1fr;
       grid-column-gap:0px;
       grid-row-gap:10px;
       >div{border: 1px solid red;}

       .right-center-bottom{
        display: grid;
        grid: 1fr / repeat(2,1fr);
        grid-column-gap : 10px;
        grid-row-gap : 0px;
        >div{border:1px solid red;}
       }

    }
}

这种布局的优点是可以根据页面的缩放自动调整大小,但需要注意的是,页面的区块内的元素不会自动缩放大小。
在使用grid网格布局时,网格内的元素也要使用相对大小。或者,给网格外面嵌套一层大容器,将网格布局的大小固定住。

flex布局
flex布局就是利用flex的比例大小来给页面进行区块划分

flex的文档说明:https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox

属性说明:

属性说明
display:flex开启flex布局
flex:1对应区块的占比大小
align-items元素在交叉轴的对齐方式
justify-content元素在x轴的排列方式
flex-wrap是否允许元素换行

我们可以使用flex布局实现如下效果:
在这里插入图片描述
代码如下:

<div class="embody">
     <!-- 视图区域 -->
     <div class="chunk">
          <!-- 左侧区域 -->
          <div class="left-chunk">
	          <div class="left-top"></div>
	          <div class="left-center"></div>
	          <div class="left-bottom"></div>
          </div>
          <!-- 中间区域 -->
          <div class="center-chunk"></div>
          <!-- 右侧区域 -->
          <div class="right-chunk"></div>
     </div>
</div>
.embody{
    min-width: 1024px;
    max-width: 1920px;
    min-height: 780px;
    height: 100%;
    border: 1px solid red;
    padding: 0px 1rem 0px 1rem;
    flex-wrap: wrap-reverse;
    .chunk{
        width: calc(100% - 2rem);
        border: 1px solid gold;
        margin-top: -1.5rem;
        display: flex;
        margin: 0 auto;
        .left-chunk{flex: 3;}
        .center-chunk{flex: 4;}
        .right-chunk{flex: 3;}
    }

    .left-chunk{
        .left-top{ 
            height: 10rem;
            box-sizing:border-box;  
            border: 1px solid red
        }
        .left-center{
            box-sizing: border-box;  /* 去掉内边距和边框的展位,全都计算在width中 */
            width: 100%;
            height: 40rem;
            margin-top: 1rem;
            border: 1px solid red;
        }
        .left-bottom{
            height: 20rem;
            margin-top: 1rem;
            border: 1px solid red;
        }

    }
    .center-chunk{
        border: 1px solid red;
        .center-main{border: 1px solid red;}
        .center-bottom{border: 1px solid red;}
    }
    .right-chunk{
       display: grid;
       grid: 1 repeat(3,2fr) / 1fr;
       grid-column-gap:0px;
       grid-row-gap:10px;
       border: 1px solid red;
       >div{border: 1px solid red;}

       .right-center-bottom{
        display: grid;
        grid: 1fr / repeat(2,1fr);
        grid-column-gap : 10px;
        grid-row-gap : 0px;
        >div{border:1px solid red;}
       }
    }
}

在这两种布局方式上,优先选择flex布局,因为grid布局会随着页面的缩放而自动更改大小,这种大小的变化只是页面划分的区块变化,在此基础之上还要实际更改区块内容的大小缩放问题


页面自适应

由于页面的窗口大小是不确定的,所以我们要使用相对单位来设置大小,css中有一个rem的概念,rem也就是根据根节点字体大小单位而来的相对单位,例如:根节点的字体大小为20px,那么1rem = 20px,基于rem,我们要根据窗口的大小来计算根节点的字体大小,具体的实现方式如下:

// 自调用
(function(){
    /* 页面加载获取页面宽度 */
    let setFont = function () {
        // 因为要定义变量可能和别的变量冲突,造成污染,所以用自调用函数
        let html = document.documentElement; // 获取html
        // 获取html宽度
        let width = html.clientWidth;

        // 判断,限制最小和最大宽度(这一步可省略)
        if(width < 1024) width = 1024
        if(width > 1920) width = 1920

        // 设置html的基准值, 1920 / 80 = 24px也就是1rem=24px
        let fontSize = width / 153 + 'px'  // 那么这里屏幕大小1530px,1rem=10px
        
        // 设置给html
        html.style.fontSize = fontSize;
    }
    setFont(); // 调用

    /* 页面改变的时候需要重新设置 */
    // 尺寸改变事件,window.onresize为当浏览器重置大小的时候执行的函数
    window.onresize = function () {
        setFont();
    }
})()

将该文件引入main文件即可。


如果觉得这篇文章对你有帮助,欢迎点赞、收藏、转发哦~

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

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

相关文章

山东专升本计算机第二章-Windows7操作系统

Windows7操作系统 2.3Windows7的文件和文件夹管理 考点7 Windows7的基础知识 文件&#xff0c;是指存放在外存储器上的一组相关信息的•集合 文件名是操作系统中区分不同文件的唯一标志 文件名是由主文件名和扩展名两部分组成不能使用 ▏ < > * ? \ / &#xff1a; …

单向带头链表的添加修改删除操作

public class HeroNodeDemo {public static void main(String[] args) {HeroNode hero1 new HeroNode(1, "松江");HeroNode hero2 new HeroNode(2, "武松");HeroNode hero3 new HeroNode(3, "及时雨");HeroNode hero4 new HeroNode(4, "…

prometheus实战之一:用ansible部署

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 关于《prometheus实战》 《prometheus实战》是欣宸原创的系列文章&#xff0c;旨在通过实战操作来熟悉和掌握prometheus常规技能 本篇概览 本文是《promet…

spring 容器结构/机制debug分析--Spring 学习的核心内容和几个重要概念--IOC 的开发模式--综合解图

目录 Spring Spring 学习的核心内容 解读上图: Spring 几个重要概念 ● 传统的开发模式 解读上图 ● IOC 的开发模式 解读上图 代码示例—入门 xml代码 注意事项和细节 1、说明 2、解释一下类加载路径 3、debug 看看 spring 容器结构/机制 综合解图 Spring Spr…

使用SPY++查看窗口信息去分析C++客户端UI软件问题

目录 1、使用SPY查看窗口的信息 2、使用SPY查看某些软件UI窗口用什么UI组件实现的 2.1、查看海康视频监控客户端安装包程序 2.2、查看华为协同办公软件WeLink 2.3、查看字节协同办公软件飞书 2.4、查看最新版本的Chrome浏览器 2.5、查看小鱼易连视频会议客户端软件 2.6…

STM32H7 DMA

CubeMX配置 发送调用&#xff1a; 发送速度确实挺快的。 接收&#xff1a; HAL_UART_Receive_DMA(&huart1,Rxbuffer,sizeof(Rxbuffer)); 这个函数开启DMA接收,将收到的数据存放到Rxbuffer数组中去,当接收到了sizeof(Rxbuffer)个数据就会回调DMA1_Stream0_IRQHandler函数…

Linux-基本指令

文章目录 Centos用户新增及删除新增删除 两个理论概念管理贯穿 ls指令文件的操作-l (列出详细信息)-a&#xff08;显示所有的文件&#xff0c;包括隐藏文件&#xff09;-F&#xff08;在每个文件名后附上一个字符以说明该文件的类型&#xff09;-d&#xff08;将目录象文件一样…

CTF权威指南 笔记 -第二章二进制文件-2.1-汇编原理

目录 编译原理 GCC编译 四个阶段 (1)预处理阶段 (2)编译阶段 (3)汇编阶段 (4)链接阶段 预处理阶段 编译阶段 汇遍阶段 链接阶段 C语言的生命是从 源文件开始 的 每条C语言都必须要给翻译成 一系列的低级语言 最后 按照可执行文件格式打包 并且作为二进制文件保存起来…

【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南

带你深入分析Spring所提供的缓存Cache功能的开发实战指南 CacheManager管理器的扩展支持缓存技术类型与CacheManger缓存依赖application配置缓存注解EnableCachingCacheableCachePutCacheEvictCacheConfig SpEL上下文数据注意 SpEL提供了多种运算符 不同Cache的实现机制Concurr…

快速入门微服务保护框架Sentinel

文章目录 一、Sentinel1.1 雪崩问题1.1.1 介绍1.1.2 解决方案 1.2 初识Sentinel1.3 sentinel下载和整合1.4 流量控制1.4.1 簇点链路1.4.2 Sentinel簇点链路设置1.4.3 流控规则1.4.4 热点参数限流1.4.5 隔离和降级1.4.6 授权规则 一、Sentinel 1.1 雪崩问题 1.1.1 介绍 雪崩问…

掌握了这些,才算真正了解C语言数组

也许你认为&#xff0c;C语言中的数组非常好理解&#xff0c;就是把一组相同类型的元素存储在同一块空间里。但是你可能并没有真正理解数组的本质&#xff0c;不信的话请回答一下下面的几个小问题&#xff0c;如果你能非常清晰的回答这些问题&#xff0c;那么你对C语言中的数组…

TF-IDF (BigData, Data Mining)

TF-IDF&#xff08;term frequency–inverse document frequency&#xff09;是一种用于信息检索与数据挖掘的常用加权技术。 TF是词频(Term Frequency)&#xff0c; IDF是逆文本频率指数(Inverse Document Frequency)。 简介 TF-IDF是一种统计方法&#xff0c;用以评估一字词…

【国际象棋】棋盘游戏-微信小程序开发流程详解

与中国象棋类似的&#xff0c;还有国际象棋&#xff0c;知道有人爱玩&#xff0c;于是凭着好奇心&#xff0c;网上研究了一下&#xff0c;跟中国象棋有相似之处&#xff0c;玩法是有些许不一样&#xff0c;不知道象棋最早出于谁之手呢&#xff0c;抽空做一做&#xff0c;最终完…

倾斜摄影超大场景的三维模型的顶层合并,提升模型在WEB三维展示效果

倾斜摄影超大场景的三维模型的顶层合并&#xff0c;提升模型在WEB三维展示效果 倾斜摄影超大场景的三维模型的顶层合并后&#xff0c;可以采取以下措施来提升模型在WEB三维展示效果&#xff1a; 1、优化模型数据&#xff1a;对于倾斜摄影超大场景的三维模型&#xff0c;需要进…

网络安全:namp扫描工具

-sP可以扫描一个网段ip以及状态和基本信息&#xff0c;10.1.1.2-3就是扫描2和3这两个ip的主机 -p可以扫描指定ip对应主机的端口号&#xff0c;可以是一个范围 nmap简单扫描&#xff1a;nmap 地址 检查地址是否在线以及open的端口号 在端口开放&#xff0c;不一定可以与对方正常…

数据库之事务隔离级别详解

事务隔离级别详解 一、事务的四大特性&#xff08;ACID&#xff09;1. 原子性(atomicity)&#xff1a;2. 一致性(consistency)&#xff1a;3. 隔离性(isolation)&#xff1a;4. 持久性(durability)&#xff1a; 二、事务的四种隔离级别1. 读未提交(Read uncommitted)&#xff1…

WSL怎么使用本机进行代理联网

文章目录 WSL怎么使用本机代理进行联网问题来源设置v2rayN设置wsl总结参考 WSL怎么使用本机代理进行联网 问题来源 使用WSL克隆github的代码网速很慢&#xff0c;无响应&#xff0c;导致项目无法下载&#xff0c;真的愁人。就想到为WSL设置xx上网&#xff0c;是否就会好很多。…

Photoshop如何使用文字之实例演示?

文章目录 0.引言1.给图像素材添加透明水印2.创建路径文字3.创建每日一签海报4.给图像添加复杂水印5.制作个人简历模板 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对PS进行了学习&#xff0c;本文通过《Photoshop2021入门教程》及其配套素材结合网上相关资料进行学…

React | React组件化开发

✨ 个人主页&#xff1a;CoderHing &#x1f5a5;️ React .js专栏&#xff1a;React .js React组件化开发 &#x1f64b;‍♂️ 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; &#x1f4ab; 系列专栏&#xff1a;吊打面试官系列 16天学会Vue 11天学会React Node…