两个DIV实现雷达扫描效果

简介: radar类DIV是200px的宽高,fan类DIV是100px的宽高。

题目:有两个DIV,如下:


<div class="radar">
  <div class="fan"></div>
</div>
复制代码


其中,radarDIV200px的宽高,fanDIV100px的宽高。


请用CSS完成下面的效果。


image.png


🔥 效果兼容现代主流浏览器即可。



:嗯!这就是一张动态图搞定的事情,叫UI出一个动图就完成了,此题已解,机智如我!


面试官:出门左拐,谢谢!


言归正传,这道题考查的知识点还是蛮多的,下面我们一一来学习下~


关键帧


转动的扇形,实现的效果可以通过关键帧来处理。


比如下面的关键帧代码:


div {
  animation-duration: 3s;
  animation-name: identifier;
  // more code
}
@keyframes identifier {
  from { top: 0; }
  to { top: 100px; }
}
复制代码


DIV从距离顶部0的位置更改到距离顶部100px的位置,整个过程需要3秒


颜色渐变


扇形的颜色效果是一个线性渐变的过程,我们可以通过linear-gradient来实现。


比如下面的代码:


div {
  background: linear-gradient(to right, white, black);
  // more code
}
复制代码


DIV的背景颜色从左往右,由白色到黑色的渐变;


skew函数的考察


当然,你可以制作扇形来达到效果,但是实现的成本没有比skew来得低~


下面我们直接来扭曲一个正方形。


// origin
div {
  width: 100px;
  height: 100px;
  background: blue;
}
// after
div {
  width: 100px;
  height: 100px;
  background: blue;
  transform: skew(-10deg);
}
复制代码


如图:


image.png


::before ::after 伪元素


这里的题目要求很清楚了,两个DIV,如果你只是用这两个DIV本身添加样式,能达到效果?


::before创建一个伪元素,将其成为匹配选中元素的第一个元素。


::after创建一个伪元素,作为已选中元素的最后一个元素。


::before 和 ::after这两个虚拟元素默认是行内元素,通常配合content属性来添加内容。


比如:


div{
  width: 100px;
  height: 100px;
  background: red;
}
div::after {
  width: 100px;
  height: 100px;
  background: blue;
  display: block;
  content: '::after'
}
复制代码


如果你运行上面的代码,你将得到上红下蓝的两个DIV,而且下面的这个DIV还包含::after的字样。


box-sizing的考察


还有一个要避免踩坑的细节,边框与边框的细节问题应该怎么处理才看起来不那么突兀。


我们很平常得使用border: 1px solid #eee;完事了。


殊不知又被出题者坑了一波。


我们设定了div的宽高为50px之后,再在其基础上添加边框border: 1px solid #eee;,那么在实际中我们就相当于设定了52px的宽高。


box-sizing: border-box;就可以解决这个问题;


div {
  width: 50px;
  height: 50px;
  background: red;
  border: 1px solid #eee;
  box-sizing: border-box;
}
复制代码


这样一来,得到的宽高就不会产生变化了,依旧是50px


题目的实现代码


好了,该说完的说完了,我们来实现下题目说的效果吧。如下CSS代码:


.radar {
  overflow: hidden;
  position: relative;
  margin: 200px;
  width: 200px;
  height: 200px;
  border-radius: 50%;
  background: #fff;
  border: 1px solid #5ef2ff;
  box-sizing: border-box;
}
.radar::before {
  width: 100px; 
  height: 200px;
  content: '';
  display: block;
  position: absolute;
  right: 0;
  top: 0;
  box-sizing: border-box;
  border-left: 1px solid #5ef2ff;
}
.radar::after {
  width: 200px; 
  height: 100px;
  content: '';
  display: block;
  box-sizing: border-box;
  border-bottom: 1px solid #5ef2ff;
}
.fan {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  box-sizing: border-box;
  border: 1px solid #5ef2ff;
  width: 100px;
  height: 100px;
}
.fan::after {
  content: "";
  width: 100px;
  height: 100px;
  display: block;
  box-sizing: border-box;
  position: relative;
  top: -50%;
  right: -50%;
  transform-origin: 0% 100%;
  border-bottom: 3px solid transparent;
  border-image: linear-gradient(to right, transparent, #5ef2ff);
  border-image-slice: 3;
  background: transparent;
  background-image: linear-gradient(to right, transparent, #9bfdfd);
  animation: rotateAnimate 2s linear infinite;
}
@keyframes rotateAnimate {
  from {
    transform: rotate(0deg) skew(-10deg)
  }
  to {
    transform: rotate(360deg) skew(-10deg)
  }
}
复制代码


线上体验地址两个DIV实现雷达扫描效果;相关源码存放仓库



相关文章
|
JavaScript 前端开发
vue仿微信界面聊天室项目|vue聊天案例
基于vue开发的仿微信聊天室vue-wechatRoom实例,vue版仿微信聊天界面|仿微信聊天对话框vue版,使用了vue2.0+vuex+vue-router+webpack+wcpop等技术开发,实现了消息、表情发送,图片、视频预览、打赏、红包等功能。
9385 0
|
5月前
|
JSON IDE Java
20 款 IDEA 主题任你选!(快来看看你最喜欢那个~)
我是小假 期待与你的下一次相遇 ~
3178 1
|
9月前
|
消息中间件 安全 Java
VCTGO:一款让开发者直呼“真香”的企业级快速开发平台,你绝对不能错过!
嗨,大家好,我是小华同学。关注我们获取“最新、最全、最优质”的开源项目和高效工作学习方法。今天为大家介绍一款企业级快速开发平台——VCTGO。基于Spring Boot + Vue.js,VCTGO提供用户管理、菜单管理、角色管理、日志管理、代码生成、系统监控等核心功能,支持从开发到部署的一站式解决方案。技术架构采用主流技术栈,包括前端Vue.js + Element UI,后端Spring Boot + MyBatis Plus,数据库MySQL,缓存Redis,消息队列RabbitMQ,
268 27
|
SQL XML JavaScript
【若依Java】15分钟玩转若依二次开发,新手小白半小时实现前后端分离项目,springboot+vue3+Element Plus+vite实现Java项目和管理后台网站功能
摘要: 本文档详细介绍了如何使用若依框架快速搭建一个基于SpringBoot和Vue3的前后端分离的Java管理后台。教程涵盖了技术点、准备工作、启动项目、自动生成代码、数据库配置、菜单管理、代码下载和导入、自定义主题样式、代码生成、启动Vue3项目、修改代码、以及对代码进行自定义和扩展,例如单表和主子表的代码生成、树形表的实现、商品列表和分类列表的改造等。整个过程详细地指导了如何从下载项目到配置数据库,再到生成Java和Vue3代码,最后实现前后端的运行和功能定制。此外,还提供了关于软件安装、环境变量配置和代码自动生成的注意事项。
27288 73
|
JavaScript Java CDN
vue3完整教程从入门到精通(新人必学1,vue3快速上手)
本文提供了Vue 3从入门到精通的完整教程,涵盖了创建Vue应用、通过CDN使用Vue、定义网站以及使用ES模块构建版本的步骤和示例代码。
10384 1
vue3完整教程从入门到精通(新人必学1,vue3快速上手)
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
2280 3
|
小程序 JavaScript Java
微信小程序+SpringBoot接入后台服务,接口数据来自后端
这篇文章介绍了如何将微信小程序与SpringBoot后端服务进行数据交互,包括后端接口的编写、小程序获取接口数据的方法,以及数据在小程序中的展示。同时,还涉及到了使用Vue搭建后台管理系统,方便数据的查看和管理。
微信小程序+SpringBoot接入后台服务,接口数据来自后端
|
JSON 小程序 JavaScript
超详细微信小程序开发学习笔记,看完你也可以动手做微信小程序项目
这篇文章是一份全面的微信小程序开发学习笔记,涵盖了从小程序介绍、环境搭建、项目创建、开发者工具使用、文件结构、配置文件、模板语法、事件绑定、样式规范、组件使用、自定义组件开发到小程序生命周期管理等多个方面的详细教程和指南。
成功解决:Could not resolve dependency: npm ERR! peer vue@“^3.0.2“ from vuex@4.0.2
这篇文章讨论了在使用npm安装依赖时遇到的一个常见问题,即无法解析依赖导致的"peer dependency"冲突错误。文章提供了几种解决方法,包括清除npm缓存、删除`node_modules`文件夹和`package-lock.json`文件,然后重新尝试安装,以解决版本冲突问题。
|
数据可视化 前端开发 JavaScript
3分钟,教你搭建一个三维城市建筑可视化系统 ( Cesium 加载 shp 数据 )
3分钟,教你搭建一个三维城市建筑可视化系统 ( Cesium 加载 shp 数据 )
4277 0
3分钟,教你搭建一个三维城市建筑可视化系统 ( Cesium 加载 shp 数据 )