数据可视化-CSS3

news2024/11/24 1:05:33

CSS3

数据可视化

数据可视化是将数据转换为图形或图表的过程,以便更好地理解和分析数据。它是数据分析和数据科学中的重要组成部分,可以帮助人们更好地理解数据中的模式和趋势。

  • 更好地理解数据:通过可视化数据,人们可以更好地理解数据中的模式和趋势,从而更好地分析数据。
  • 更好地传达信息:可视化数据可以帮助人们更好地传达信息,使得数据更容易被理解和接受。
  • 更好地发现问题:通过可视化数据,人们可以更容易地发现数据中的问题和异常,从而更好地解决这些问题。

前端可视化技术是指使用前端技术(如 HTML、CSS、JavaScript 等)来创建交互式的数据可视化。以下是一些常见的前端可视化技术:

  1. D3.js:D3.js 是一个流行的 JavaScript 库,用于创建各种类型的数据可视化,包括折线图、柱状图、散点图、饼图等等。它提供了强大的数据绑定和转换功能,使得数据可视化变得更加容易。
  2. Chart.js:Chart.js 是一个简单易用的 JavaScript 库,用于创建各种类型的图表,包括折线图、柱状图、饼图等等。它提供了丰富的配置选项和交互功能,使得图表的定制和交互变得更加容易。
  3. Three.js:Three.js 是一个流行的 JavaScript 库,用于创建 3D 可视化。它提供了丰富的 3D 渲染功能和交互功能,使得创建复杂的 3D 可视化变得更加容易。
  4. Leaflet.js:Leaflet.js 是一个流行的 JavaScript 库,用于创建交互式地图。它提供了丰富的地图渲染和交互功能,使得创建交互式地图变得更加容易。
  5. Highcharts:Highcharts 是一个流行的 JavaScript 库,用于创建各种类型的图表,包括折线图、柱状图、饼图等等。它提供了丰富的配置选项和交互功能,使得图表的定制和交互变得更加容易。

底层图形引擎是指用于渲染图形的软件库或框架。它们通常提供了一组 API,用于创建和操作图形对象,以及将这些对象渲染到屏幕上。

以下是一些常见的底层图形引擎:

  1. OpenGL:OpenGL 是一个跨平台的底层图形引擎,用于创建 2D 和 3D 图形。它提供了一组强大的 API,用于创建和操作图形对象,并将它们渲染到屏幕上。OpenGL 可以在多种操作系统和硬件平台上运行,包括 Windows、Mac、Linux、iOS 和 Android。
  2. DirectX:DirectX 是一个由微软开发的底层图形引擎,用于创建 2D 和 3D 图形。它提供了一组强大的 API,用于创建和操作图形对象,并将它们渲染到屏幕上。DirectX 主要用于 Windows 平台上的游戏和图形应用程序开发。
  3. Vulkan:Vulkan 是一个跨平台的底层图形引擎,用于创建 2D 和 3D 图形。它提供了一组强大的 API,用于创建和操作图形对象,并将它们渲染到屏幕上。Vulkan 的设计目标是提供更高的性能和更低的 CPU 开销,以及更好的多线程支持。
  4. Metal:Metal 是一个由苹果开发的底层图形引擎,用于创建 2D 和 3D 图形。它提供了一组强大的 API,用于创建和操作图形对象,并将它们渲染到屏幕上。Metal 主要用于 iOS 和 macOS 平台上的游戏和图形应用程序开发。
  5. Skia 是一个跨平台的 2D 图形引擎,由 Google 开发和维护。它提供了一组强大的 API,用于创建和操作 2D 图形对象,并将它们渲染到屏幕上。Skia 可以在多种操作系统和硬件平台上运行,包括 Windows、Mac、Linux、Android 和 iOS。

transform

transform 是 CSS3 中的一个属性,用于对元素进行变换。它可以实现平移、旋转、缩放、倾斜等多种变换效果。

  • transform旋转或倾斜元素,会变换或倾斜元素的坐标系,不同的顺序会导致不同的变换结果,并且该元素所有后续变换都将基于新坐标系的变换
  • 2D坐标轴是平面的,只存在x轴和y轴,而3D变形的坐标轴则是x、y、z三条轴组成的立体空间,x轴、y轴、z轴的正向分别朝向右、下和指向你的屏幕
  • 轻握左手,大拇指指向旋转轴正方向,四指指向的方向就是旋转方向,如果将一个元素绕 y 轴旋转 90 度,那么它的 x 轴将指向屏幕内部,即远离你。此时如再沿着 x 轴平移,元素不会向右移动,它会向内远离我们。

transform-origin 是 CSS3 中的一个属性,用于指定元素变换的原点,即坐标轴的位置。它可以改变 transform 属性中变换的起点

transform-origin 属性的默认值是 50% 50% 0,表示变换的原点位于元素的中心点。它可以接受多种值,包括关键字和长度值。以下是一些常见的 transform-origin 属性值:

  1. top:表示变换的原点位于元素的顶部中心点。
  2. bottom:表示变换的原点位于元素的底部中心点。
  3. left:表示变换的原点位于元素的左侧中心点。
  4. right:表示变换的原点位于元素的右侧中心点。
  5. center:表示变换的原点位于元素的中心点。
  6. 具体的长度值,如 10px20% 等等。

2D动画

以下是一些常见的 transform 属性值:

  1. translate():用于平移元素,可以指定水平和垂直方向的偏移量。例如:transform: translate(50px, 100px);
  2. rotate():用于旋转元素,可以指定旋转角度。例如:transform: rotate(45deg);
  3. scale():用于缩放元素,可以指定水平和垂直方向的缩放比例。例如:transform: scale(2, 1.5);
  4. skew():用于倾斜元素,可以指定水平和垂直方向的倾斜角度。例如:transform: skew(30deg, 20deg);
  5. matrix():用于指定任意的 2D 变换矩阵。例如:transform: matrix(1, 0.5, -0.5, 1, 0, 0);

3D动画

transform 属性不仅可以用于 2D 变换,还可以用于 3D 变换。通过 transform 属性的 3D 变换函数,可以实现元素在三维空间中的旋转、平移、缩放等效果。

以下是一些常见的 3D 变换函数:

  1. translate3d():用于在三维空间中平移元素,可以指定 x、y、z 三个方向的偏移量。例如:transform: translate3d(50px, 100px, 0);
  2. rotate3d():用于在三维空间中旋转元素,可以指定旋转轴和旋转角度。例如:transform: rotate3d(1, 1, 1, 45deg);
  3. scale3d():用于在三维空间中缩放元素,可以指定 x、y、z 三个方向的缩放比例。例如:transform: scale3d(2, 1.5, 1);
  4. perspective():用于设置元素的透视效果,可以指定透视距离。例如:transform: perspective(1000px);

3D形变函数会创建一个合成层来启用GPU硬件加速。

perspective

  • perspective 是 CSS3 中的一个属性,用于设置元素的透视效果。它可以模拟远近关系,使得元素在 3D 空间中的变换效果更加自然。
  • perspective 属性可以应用于父元素,也可以应用于子元素。它可以接受一个长度值,表示观察者与元素之间的距离。
  • 需要注意的是,perspective 属性只对 3D 变换起作用,对于 2D 变换没有任何效果。同时,perspective 属性的值越大,元素在 3D 空间中的变换效果越明显。

transform-style

  • transform-style 属性用于定义子元素在 3D 空间如何被呈现。它有两个可能的值:flatpreserve-3d

  • transform-style 属性设置为 flat 时,子元素将被平面化,不会在 3D 空间中呈现。这是默认值。

  • transform-style 属性设置为 preserve-3d 时,子元素将在 3D 空间中呈现,且子元素的变换不会影响其它元素。

  • 下面是一个简单的例子,展示了 transform-style 属性的使用:

    <html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            .container {
                perspective: 1000px;
            }
    
            .card {
                width: 300px;
                height: 200px;
                position: relative;
                transform-style: preserve-3d;
                transition: transform 1s;
            }
    
            .card:hover {
                transform: rotateY(180deg);
            }
    
            .card .front,
            .card .back {
                position: absolute;
                width: 100%;
                height: 100%;
                backface-visibility: hidden;
            }
    
            .card .front {
                background-color: #f00;
            }
    
            .card .back {
                background-color: #0f0;
                transform: rotateY(180deg);
            }
        </style>
    </head>
    <body>
    <div class="container">
        <div class="card">
            <div class="front">Front</div>
            <div class="back">Back</div>
        </div>
    </div>
    </body>
    </html>
    

    在这个例子中,.container 元素被设置了透视,.card 元素被设置为 preserve-3d,并且有一个鼠标悬停时的旋转效果。.front.back 元素被设置为绝对定位,并且使用 backface-visibility 属性来隐藏它们的背面

  • <html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            body {
                display: flex;
                justify-content: center;
                align-items: center;
                font-size: 35px;
            }
    
            .box {
                position: relative;
                width: 200px;
                height: 200px;
                transform-style: preserve-3d;
                transform: rotateX(-33.5deg) rotateY(45deg);
            }
    
            .item {
                position: absolute;
                left: 0;
                right: 0;
                top: 0;
                bottom: 0;
                display: flex;
                justify-content: center;
                align-items: center;
            }
    
            .top {
                background: rgba(89, 50, 50, .5);
                transform: rotateX(90deg) translateZ(100px);
            }
    
            .bottom {
                background: rgba(187, 32, 32, .5);
                transform: rotateX(-90deg) translateZ(100px);
            }
    
            .front {
                background: rgb(54, 183, 77, .5);
                transform: translateZ(100px);
            }
    
            .back {
                background: rgba(72, 25, 25, .5);
                transform: rotateY(180deg) translateZ(100px);
            }
    
            .left {
                background: rgba(225, 193, 193, .5);
                transform: rotateY(-90deg) translateZ(100px);
            }
    
            .right {
                background: rgba(192, 207, 255, 0.5);
                transform: rotateY(90deg) translateZ(100px);
            }
        </style>
    </head>
    <body>
    <div class="box">
        <div class="item top">1</div>
        <div class="item bottom">2</div>
        <div class="item front">3</div>
        <div class="item back">4</div>
        <div class="item left">5</div>
        <div class="item right">6</div>
    </div>
    </body>
    </html>
    

在这里插入图片描述

backface-visibility

  • backface-visibility 是 CSS3 中的一个属性,用于控制元素的背面是否可见。它可以接受两个值:visiblehidden。默认值是visible

    backface-visibility 属性的值为 visible 时,元素的背面会显示出来,当值为 hidden 时,元素的背面会被隐藏起来。

  • .item {
        position: absolute;
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
        display: flex;
        justify-content: center;
        align-items: center;
        /* 只改变了这个 */ 
        backface-visibility: hidden;
    }
    

    在这里插入图片描述

  • <html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            body {
                display: flex;
                justify-content: center;
                align-items: center;
                background: #2b3a42;
                text-align: center;
            }
    
            .logo {
                position: relative;
                width: 200px;
                height: 200px;
            }
    
            .inner {
                position: absolute;
                top: 50%;
                left: 50%;
                height: 100px;
                width: 100px;
                margin: -50px 0 0 -50px;
                transform-style: preserve-3d;
                transform: rotateX(-33.5deg) rotateY(45deg);
                animation: innerLoop 4s ease-in-out infinite;
            }
    
            .outer {
                position: absolute;
                top: 50%;
                left: 50%;
                height: 200px;
                width: 200px;
                margin: -100px 0 0 -100px;
                transform-style: preserve-3d;
                transform: rotateX(-33.5deg) rotateY(45deg);
                animation: outerLoop 4s ease-in-out infinite;
            }
    
            @keyframes innerLoop {
                0% {
                    transform: rotateX(-33.5deg) rotateY(45deg);
                }
                50%,100% {
                    transform: rotateX(-33.5deg) rotateY(-315deg);
                }
            }
    
            @keyframes outerLoop {
                0% {
                    transform: rotateX(-33.5deg) rotateY(45deg);
                }
                50%,100% {
                    transform: rotateX(-33.5deg) rotateY(405deg);
                }
            }
    
            .item-inner {
                position: absolute;
                width: 100px;
                height: 100px;
                background: #175d96;
                border: 1px solid #fff;
            }
    
            .item-outer {
                position: absolute;
                width: 200px;
                height: 200px;
                background: rgba(174, 183, 218, 0.2);
                border: 2px solid #fff;
            }
    
            .top {
                transform: rotateX(90deg) translateZ(50px);
            }
    
            .bottom {
                transform: rotateX(-90deg) translateZ(50px);
            }
    
            .front {
                transform: translateZ(50px);
            }
    
            .back {
                transform: rotateY(180deg) translateZ(50px);
            }
    
            .left {
                transform: rotateY(-90deg) translateZ(50px);
            }
    
            .right {
                transform: rotateY(90deg) translateZ(50px);
            }
    
            .top-outer {
                transform: rotateX(90deg) translateZ(100px);
            }
    
            .bottom-outer {
                transform: rotateX(-90deg) translateZ(100px);
            }
    
            .front-outer {
                transform: translateZ(100px);
            }
    
            .back-outer {
                transform: rotateY(180deg) translateZ(100px);
            }
    
            .left-outer {
                transform: rotateY(-90deg) translateZ(100px);
            }
    
            .right-outer {
                transform: rotateY(90deg) translateZ(100px);
            }
    
        </style>
    </head>
    <body>
    <div class="logo">
        <div class="inner">
            <div class="item-inner top"></div>
            <div class="item-inner bottom"></div>
            <div class="item-inner front"></div>
            <div class="item-inner back"></div>
            <div class="item-inner left"></div>
            <div class="item-inner right"></div>
        </div>
        <div class="outer">
            <div class="item-outer top-outer"></div>
            <div class="item-outer bottom-outer"></div>
            <div class="item-outer front-outer"></div>
            <div class="item-outer back-outer"></div>
            <div class="item-outer left-outer"></div>
            <div class="item-outer right-outer"></div>
        </div>
    </div>
    </body>
    </html>
    

    在这里插入图片描述

动画优化

  • 使用 transformopacity 属性来触发硬件加速,从而提高动画性能。
  • 使用 will-change 属性来预先告知浏览器哪些属性将会被修改,从而优化动画性能。
  • 使用 requestAnimationFrame 函数来控制动画的帧率,从而避免动画过于卡顿或者过于流畅。
  • 使用 transform: translateZ(0);transform: translate3d(0, 0, 0); 属性来创建一个新的合成层,从而优化动画性能。
  • 避免使用 box-shadowborder-radius 等属性,因为它们会增加浏览器的计算负担。
  • 避免在动画中使用 display: none; 属性,因为它会触发重排和重绘,从而影响动画性能。
  • 避免在动画中使用 position: fixed; 属性,因为它会触发重排和重绘,从而影响动画性能。
  • 避免在动画中使用 background-image text-shadow filter clip-path 属性,因为它会增加浏览器的计算负担。

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

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

相关文章

告别腾讯企业邮箱:探寻多种可替代方案

腾讯企业邮箱凭借其直观的界面、qq和微信带来的大量基础用户以及作为常规腾讯企业邮箱帐户附加的各种免费生产力工具&#xff0c;在企业邮箱市场占据主导地位。但是&#xff0c;人们对腾讯如何使用您的电子邮件存在严重担忧&#xff0c;而且并不是每个人都喜欢腾讯企业邮箱界面…

ngrok实现内网穿透,vue项目invalid host header报错

目的&#xff1a;使自己的本地的vue项目可以在外网上访问。 本地访问&#xff1a;http://localhost:8080/ 外网访问&#xff1a;通过ngrok生成一个链接&#xff0c;这个链接在其他网络环境下都可以访问。 windows下安装 1.注册并下载ngrok&#xff0c;注册的时候需要验证码&am…

动手学习卷积神经网络(CNN)(一)---卷积运算

卷积神经网络可以直接从原始数据中学习其特征表示并完成最终任务&#xff0c;可以说卷积网络是“端”到“端”的思想&#xff0c;在整个学习流程中并进行认为的子问题划分&#xff0c;而是交给深度学习模型直接学得从原始输入到期望输出得映射。 卷积神经网络是包含卷积层&…

一个BLIP2加两个ChatGPT就能造一个机器人?KAUST提出具身智能框架LLM-Brain

最近&#xff0c;来自阿卜杜拉国王科技大学&#xff08;KAUST&#xff09;的研究团队开发了一种基于现有LLMs的机器人交互框架LLM-Brain&#xff0c;LLM-Brain可以直接将LLM作为机器人的大脑&#xff0c;并以此来构建一个以自我为中心的记忆和控制框架。 论文链接&#xff1a; …

【笔试强训选择题】Day18.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录…

红队工具合集

一个 Red Team 攻击的生命周期&#xff0c;整个生命周期包括&#xff1a; 信息收集、攻击尝试获得权限、持久性控制、权限提升、网络信息收集、横向移动、数据分析&#xff08;在这个基础上再做持久化控制&#xff09;、在所有攻击结束之后清理并退出战场。 相资 信息搜集 http…

自信裸辞:一晃 ,失业都3个月了.....

最近&#xff0c;找了很多软测行业的朋友聊天、吃饭 &#xff0c;了解了一些很意外的现状 。 我一直觉得他们技术非常不错&#xff0c;也走的测开/管理的路径&#xff1b;二三月份裸辞的&#xff0c;然后一直在找工作&#xff0c;现在还没找到工作 。 经过我的分析&#xff0…

OpenVINO 2022.3实战三:POT API实现图像分类模型 INT8 量化

OpenVINO 2022.3实战三&#xff1a;POT API实现图像分类模型 INT8 量化 1 准备需要量化的模型 这里使用我其他项目里面&#xff0c;使用 hymenoptera 数据集训练好的 MobileNetV2 模型&#xff0c;加载pytorch模型&#xff0c;并转换为onnx。 import os from pathlib import…

鸿蒙Hi3861学习十八-DevEco Device Tool环境搭建

一、简介 在之前的文章中&#xff0c;我们是通过在windows下烧录&#xff0c;在ubuntu下编译的方式进行开发。今天我们同样是采用windowsubuntu混合环境进行开发。为什么要采用这种方式呢&#xff1f;因为就目前而言&#xff0c;大部分的开发板还不支持在Windows环境下进行编译…

典型的高可用设计(二):MySQL

一、高可用模式 MySQL数据库提供了数据库建的复制能力&#xff0c;做到了多个数据库同时拥有同一个数据副本&#xff0c;保证了数据的安全性&#xff0c;一台数据库服务器出现问题&#xff0c;其他数据库可以做到数据不丢失。MySQL的服务高可用设计也是以数据库复制能力为基础&…

云计算专业怎么样,大学应届生学的话难不难?

云计算专业学起来挺难的&#xff0c;一般人建议不要轻易尝试&#xff01;&#xff01;&#xff01; 虽然IT行业一直以来发展前景、技术更新、新领域的开发或者新概念的提出等各方面都还不错&#xff0c;云计算也是当下非常火的一个就业方向&#xff0c;很多人也非常想进入云计…

IT系统方案大纲模版,以智慧工地系统为例

# 咖米智慧工地解决方案 ## 第1章 智慧工地系统概述 ### 1.1应用背景 ### 1.2需求分析 ### 1.3总体目标 ## 第2章 系统总体设计 ### 2.1设计理念 ### 2.2设计依据 ### 2.3设计架构 ### 2.4系统描述 ### 2.5系统特点 ## 第3章 详细设计 ### 3.1工地远程监控子系统 #### 3.1.1需求…

一分钟了解乐观锁、悲观锁、共享锁、排它锁、行锁、表锁以及使用场景

大家好&#xff0c;我是冰点&#xff0c;今天给大家带来&#xff0c;关于MySQL中的锁的使用。 我首先提个问题&#xff0c;大家知道什么是 乐观锁、悲观锁、共享锁&#xff0c;、排它锁、行锁、表锁&#xff0c;以及每种锁的使用场景吗&#xff1f; !! 背景&#xff1a;最近在各…

Unity 使用 VSCode 作为默认编辑器,解决没有代码提示,智能补全功能

文章目录 删除现有编辑器配置选择 VSCode 作为代码编辑器代码补全和智能提示 删除现有编辑器配置 首先打开你的项目文件夹&#xff0c;需要把这几个文件删掉&#xff0c;稍后重新生成~ 选择 VSCode 作为代码编辑器 打开 Edit - Preference&#xff1a; 选择 External Script…

【bsauce读论文】2023-SP-内核Use-After-Cleanup漏洞挖掘与利用

本文参考G.O.S.S.I.P 阅读推荐 2023-01-06 UACatcher做一些补充。 1. UAC漏洞介绍 UAC漏洞介绍&#xff1a;Use-After-Cleanup &#xff08;UAC&#xff09;漏洞类似UAF&#xff0c;本文主要检测Linux内核中UAC漏洞。UAC基本原理参见图Fig-1。首先&#xff0c;UAC漏洞和系统中…

众多行业适用的这款Lighthouse Apex Z便携粒子计数器有什么优势

Lighthouse Apex Z粒子计数器围绕易用性和可靠性进行构建。是建立在Lighthouse洁净室行业 40 多年的基于问题的学习基础上的解决方案。 采样设置 ApexZ易于使用的样品设置&#xff0c;可以匹配当前的sop&#xff0c;减少丢失位置或采样错误参数的风险。 用户管理 为了提高效…

ES6:var 、const、let的使用和区别

前言 本文主要介绍了ES6中var、const、let的使用和区别 基本介绍 let let声明变量 const const :声明常量const声明的常量可以修改,但不能重新赋值 如&#xff1a;以下代码是正确的&#xff1a; //引用数据类型 const info {name:Candy }; info.nameJune;而下面的代码是…

GPT-4国内有免费平替吗?

免费/平替永远是最贵的 就如同我们生活中买口红一样&#xff0c;总想找到平替&#xff0c;但永远比不上看中的那只&#xff01; 但在寻找平替过程中 花出去的时间、金钱成本都是翻倍的。 那么GPT-4呢&#xff1f; GPT-4优于GPT-3.5闪光点&#xff0c;想必大家都十分清楚 不…

基于springboot自动排课系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;…

云计算安全

前言 什么是云计算&#xff1f; 云计算就是一种新兴的计算资源利用方式&#xff0c;云计算的服务商通过对硬件资源的虚拟化&#xff0c;将基础IT资源变成了可以自由调度的资源池&#xff0c;从而实现IT资源的按需分配&#xff0c;向客户提供按使用付费的云计算服务。用户可以…