有趣的css - 动态雷达扫描

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是使用 css 实现一个动态的雷达扫描,快学起来吧!

《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。


目录

  • 整体效果
  • 核心代码
    • html 代码
    • css 部分代码
  • 完整代码如下
    • html 页面
    • css 样式
    • 页面渲染效果

整体效果

知识点:
animation 动画属性中 animation-direction 以及 steps() 参数的使用

思路: 先绘制出整体大圆,然后使用创建伪元素画出内里的小圆,并加上虚线边框;然后绘制出雷达层,加上动画旋转;再给雷达内增加几个闪烁的圆点;最后外层套一个小动画边框。


核心代码部分,简要说明了写法思路;完整代码在最后,可直接复制到本地运行。

核心代码

html 代码

<div class="leidabox50"></div>
<div class="leida50"><div class="line50"></div><div class="guangdian50"><span class="dian50"></span></div>
</div>

雷达的主体。

css 部分代码

.leidabox50{width:220px;height:220px;border:4px solid rgba(0,0,0,0);border-top-color: #33B589;border-bottom-color: #33B589;border-radius:50%;position: absolute;animation:leidabox-eff-50 10s linear infinite;animation-direction:reverse;
}
@keyframes leidabox-eff-50{to{transform:rotate(360deg);}
}
.leida50{width: 200px;height: 200px;display: flex;justify-content: center;align-items: center;position: relative;background-color: #31FFBA;border-radius: 50%;border: 1px solid #33B589;
}
.leida50:before,.leida50:after{content: '';width: 120px;height: 120px;border-radius: 50%;border: 1px dashed rgba(0,0,0,0.14);box-shadow: 0 0 20px rgba(0,0,0,0.1);position: absolute;z-index: 3;
}
.leida50:after{width: 60px;height: 60px;position: absolute;z-index: 10;
}
.line50{width: 100px;height: 100px;background-color: rgba(127,255,212,0.4);border-radius: 0 0 0 100%;position: absolute;left: 0;top: 100px;z-index: 100;animation: zhuaneff50 5s linear infinite;transform-origin: 100px 0;
}
.line50:after{content: '';width: 8px;height: 8px;background-color: rgba(255,255,255,0.6);position: absolute;top: -4px;right: -4px;border-radius: 50%;
}
@keyframes zhuaneff50{to {transform: rotate(360deg);}
}
.guangdian50{position: absolute;bottom: 66px;
}
.dian50,.dian50:after,.dian50:before{width: 7px;height: 7px;background-color: #33B589;position: absolute;left: -20px;border-radius: 50%;animation: eff50 5s steps(6) infinite;z-index: 999;
}
.dian50:after{content: '';width: 6px;height: 6px;top: 12px;left: 44px;
}
.dian50:before{content: '';width: 3px;height: 3px;top: 40px;left: 34px;
}
@keyframes eff50{0% {opacity: 0;transform: translate(0, 0);}25%{opacity: 1;transform: translate(-10px, -18px);}50%{opacity: 0;transform: translate(-18px, -20px);}75%{opacity: 1;transform: translate(-24px, -18px);}100%{opacity: 0;transform: translate(-34px, -24px);}
}
.guangdian50:after,.guangdian50:before{content: '';width: 6px;height: 6px;background-color: #33B589;position: absolute;top: -100px;left: 30px;border-radius: 50%;z-index: 900;animation: eff501 5s steps(6) both infinite;
}
.guangdian50:before{width: 7px;height: 7px;top: -20px;left: 40px;
}
@keyframes eff501{0% {opacity: 0;}25%{opacity: 1;}50%{opacity: 0;}75%{opacity: 1;}100%{opacity: 0;}
}

1、.leida50 画出最大的雷达圆形主体,然后通过 .leida50:before.leida50:after 伪元素创建里面的两个小圆,并给两个小圆加上一点阴影效果。

2、.line50 绘制一个矩形,并给它的一个角加上圆角 border-radius: 0 0 0 100%; ,并通过 transform-origin 定位其原点,加上动画旋转,雷达就开始旋转扫描了; 然后
利用 .line50:after 伪元素给中心加上一个固定点,这样整体的雷达扫描区就完成了。

3、再在雷达主体上绘制几个移动的点,利用 .dian50.dian50:after.dian50:before 绘制 3 个大小不一的圆点,并且定位到不同的位置,然后通过加上 animation 动画,设置 steps() 参数,使这 3 个点边闪烁边移动。

4、然后再加上两个固定的圆点,同样加上 animation 动画,设置 steps() 参数,让这 2 个圆点同前面的 3 个圆点同时闪烁。

5、在外层用 .leidabox50 绘制出两个半边框,加上 animation 动画,并设置 animation-direction 参数,使反向旋转。

完整代码如下

html 页面

<!DOCTYPE html>
<html lang="zh"><head><meta charset="utf-8"><link rel="stylesheet" href="style.css"><title>动态雷达扫描</title></head><body><div class="app"><div class="leidabox50"></div><div class="leida50"><div class="line50"></div><div class="guangdian50"><span class="dian50"></span></div></div></div></body>
</html>

css 样式

/** style.css **/
.app{width: 100%;height: 100vh;background-color: #ffffff;position: relative;display: flex;justify-content: center;align-items: center;
}
.leidabox50{width:220px;height:220px;border:4px solid rgba(0,0,0,0);border-top-color: #33B589;border-bottom-color: #33B589;border-radius:50%;position: absolute;animation:leidabox-eff-50 10s linear infinite;animation-direction:reverse;
}
@keyframes leidabox-eff-50{to{transform:rotate(360deg);}
}
.leida50{width: 200px;height: 200px;display: flex;justify-content: center;align-items: center;position: relative;background-color: #31FFBA;border-radius: 50%;border: 1px solid #33B589;
}
.leida50:before,.leida50:after{content: '';width: 120px;height: 120px;border-radius: 50%;border: 1px dashed rgba(0,0,0,0.14);box-shadow: 0 0 20px rgba(0,0,0,0.1);position: absolute;z-index: 3;
}
.leida50:after{width: 60px;height: 60px;position: absolute;z-index: 10;
}
.line50{width: 100px;height: 100px;background-color: rgba(127,255,212,0.4);border-radius: 0 0 0 100%;position: absolute;left: 0;top: 100px;z-index: 100;animation: zhuaneff50 5s linear infinite;transform-origin: 100px 0;
}
.line50:after{content: '';width: 8px;height: 8px;background-color: rgba(255,255,255,0.6);position: absolute;top: -4px;right: -4px;border-radius: 50%;
}
@keyframes zhuaneff50{to {transform: rotate(360deg);}
}
.guangdian50{position: absolute;bottom: 66px;
}
.dian50,.dian50:after,.dian50:before{width: 7px;height: 7px;background-color: #33B589;position: absolute;left: -20px;border-radius: 50%;animation: eff50 5s steps(6) infinite;z-index: 999;
}
.dian50:after{content: '';width: 6px;height: 6px;top: 12px;left: 44px;
}
.dian50:before{content: '';width: 3px;height: 3px;top: 40px;left: 34px;
}
@keyframes eff50{0% {opacity: 0;transform: translate(0, 0);}25%{opacity: 1;transform: translate(-10px, -18px);}50%{opacity: 0;transform: translate(-18px, -20px);}75%{opacity: 1;transform: translate(-24px, -18px);}100%{opacity: 0;transform: translate(-34px, -24px);}
}
.guangdian50:after,.guangdian50:before{content: '';width: 6px;height: 6px;background-color: #33B589;position: absolute;top: -100px;left: 30px;border-radius: 50%;z-index: 900;animation: eff501 5s steps(6) both infinite;
}
.guangdian50:before{width: 7px;height: 7px;top: -20px;left: 40px;
}
@keyframes eff501{0% {opacity: 0;}25%{opacity: 1;}50%{opacity: 0;}75%{opacity: 1;}100%{opacity: 0;}
}

页面渲染效果

以上就是所有代码,以及简单的思路,希望对你有一些帮助或者启发。


[1] 原文阅读


CSS 是一种很酷很有趣的计算机语言,在这里跟大家分享一些 CSS 实例 Demo,为学习者获取灵感和思路提供一点帮助,希望你们喜欢。

我是 Just,这里是「设计师工作日常」,求点赞求关注!

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

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

相关文章

[2024最新]MySQL-mysql 8.0.11安装教程

网上的教程有很多&#xff0c;基本上大同小异。但是安装软件有时就可能因为一个细节安装失败。我也是综合了很多个教程才安装好的&#xff0c;所以本教程可能也不是普遍适合的。 安装环境&#xff1a;win 10 1、下载zip安装包&#xff1a; MySQL8.0 For Windows zip包下载地…

可视化大屏的应用(12):在智慧制造中的十大价值

一、什么是智慧制造 智慧制造是指通过信息技术、物联网、人工智能等先进技术的应用&#xff0c;实现生产过程的数字化、网络化、智能化&#xff0c;从而提高生产效率、降低成本、提高产品质量和灵活性的一种制造模式。 智慧制造的核心是将传统的制造过程与先进的信息技术相结合…

前端自动化测试-Jest

前端自动化测试 Jest官网&#xff1a;https://jestjs.io 安装方式 npm install --save-dev jest yarn add --dev jest cnpm add --save-dev jest 使用方法 所有以 .test.js 结尾的都是测试文件 基础用法示例 num.js&#xff1a; export function getSum (a, b) {return a b…

java下载网络上的文件、图片保存到本地 FileUtils

java下载网络上的文件、图片保存到本地 FileUtils 1. 引入FileUtils依赖2. 实现代码3. 输出结果 1. 引入FileUtils依赖 <!--FileUtils依赖--> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency><groupId>commons-io&l…

手把手教你从零搭建ChatGPT网站AI绘画系统,(SparkAi系统V6)GPTs应用、DALL-E3文生图、AI换脸、垫图混图、SunoAI音乐生成

一、系统前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

智能Java开发工具IntelliJ IDEA v2024.1震撼发布——让开发工作更简单!

IntelliJ IDEA&#xff0c;是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 立…

必须掌握的这4种缓存模式

概述 在系统架构中&#xff0c;缓存可谓提供系统性能的简单方法之一&#xff0c;稍微有点开发经验的同学必然会与缓存打过交道&#xff0c;起码也实践过。 如果使用得当&#xff0c;缓存可以减少响应时间、减少数据库负载以及节省成本。但如果缓存使用不当&#xff0c;则可能…

java 邮件发送表格

邮件发送表格 问题导入效果图 实现方案1. 拼接HTML文件&#xff08;不推荐&#xff09;2. excel 转HTML使用工具类来转化依赖工具类代码示例 使用已工具包 如 aspose-cells依赖代码示例 3.使用模板生成流程准备模板工具类代码示例 问题导入 在一些定时任务中&#xff0c;经常会…

【STM32G431RBTx】备战蓝桥杯嵌入式→省赛试题→第十四届

文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.c:main.h:main.c: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置&#xff0c;直接使用提供的资源包就行 2.KEY, 四个按键IO口都要配置&#xff0c;分别是PB0, PB1,PB2,PA…

Unity单个物体绑定多个相机在轨道上移动,录制不同角度视频

环境搭建 下载Cinemachine插件安装 打开包管理器 下载cinemachine插件 创建轨道 使用dolly track 创建轨道 右侧可以删减关键点&#xff0c;注意调整y坐标 创建cart 把前面的轨道拖到path中&#xff0c;注意这里的speed要设定不为0才会动 设置VItual Camera 根据需…

使用Code开发Django_模版和CSS

转到定义 和 查看定义 在使用Django或任何其他库的过程中,我们可能需要检查这些库中的代码。VS Code提供了两个方便的命令,可以直接导航到任何代码中的类和其他对象的定义: 转到定义 在Python开发环境中,我们可以轻松地对函数、类或者其他导入模块中的成员使用“Go to Def…

【C 数据结构】双向链表

文章目录 【 1. 基本原理 】【 2. 双向链表的 创建 】实例 - 输出双向链表 【 3. 双向链表 添加节点 】【 4. 双向链表 删除节点 】【 5. 双向链表查找节点 】【 7. 双向链表更改节点 】【 8. 实例 - 双向链表的 增删查改 】 【 1. 基本原理 】 表中各节点中都只包含一个指针&…

【算法练习】30:快速排序学习笔记

一、快速排序的算法思想 原理&#xff1a;快速排序基于分治策略。它的基本思想是选择一个元素作为“基准”&#xff0c;将待排序序列划分为两个子序列&#xff0c;使得左边的子序列中的所有元素都小于基准&#xff0c;右边的子序列中的所有元素都大于基准。这个划分操作被称为分…

Elasticsearch部署安装

环境准备 Anolis OS 8 Firewall关闭状态&#xff0c;端口自行处理 Elasticsearch&#xff1a;7.16.1&#xff08;该版本需要jdk11&#xff09; JDK&#xff1a;11.0.19 JDK # 解压 tar -zxvf jdk-11.0.19_linux-x64_bin.tar.gz# 编辑/etc/profile vim /etc/profile# 加入如下…

Halcon颜色抽取-多产品颜色(MLP)

前言 //颜色抽取&#xff0c;单产品多区域 https://blog.csdn.net/m0_51559565/article/details/135216905由于在颜色抽取上面&#xff0c;我已经发了一篇博客了&#xff0c;是单产品多区域的情况。所以对于细分原理上就不过多的描述了。 本文主要是针对多产品多颜色的情况进行…

模型训练-保存训练数据

1.目的 找到一个可运行的代码&#xff0c;可以每个epoch打印训练数据&#xff0c;但是不会保存。因为在改进模型需要这些训练数据进行对比&#xff0c;所以需要将每个epoch的训练数据保存下来&#xff0c;写到一个文件中。 2.解决方案 直接问ChatGPT&#xff0c;提示词如下&…

SpringMVC原理及工作流程

组件 SpringMVC的原理主要基于它的各个组件之间的相互协作交互&#xff0c;从而实现了Web请求的接收&#xff0c;处理和响应。 它的组件有如下几个&#xff1a; DispatcherServlet前端控制器 HandlerMapping处理器映射器 Controller处理器 ModelAndView ViewResolver视图…

练习题(2024/4/11)

1每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输入…

Leetcode刷题之消失的数字(C语言版)

Leetcode刷题之消失的数字&#xff08;C语言版&#xff09; 一、题目描述二、题目解析 一、题目描述 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 注意&#xff1a;本题相对书上原题稍作…

Java中实现监听UDP协议的指定端口并收到数据按照十六进制输出

场景 对接协议中需要监听UDP协议的指定端口并监听数据&#xff0c;且数据格式为十六进制。 如果是在linux服务上&#xff0c;可以快速通过C或者python脚本等方式实现。 这里使用Java代码实现&#xff0c;可便于后续做其他存储数据等的扩展&#xff0c;且只需要在服务器上安装…