两个dark mode的动画

简介: 两个dark mode的动画

前言


前文:一个dark mode的动画

一二三四,二二三四,继续来更新 Dark Mode 的动画,这次我们更新两个,都是来源于我记忆中网站的动画,就当作复刻吧。


第一个


第一个改自我前面写的按钮动画,加了一个简单的旋转动画,效果如下:

image.png


有手就行,定义一个简单的 @keyframes 关键帧动画:


@keyframes rotate {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}
复制代码


然后使用 animation 属性调用即可:


.moon-svg,
.sun-svg {
  width: 30px;
  height: 30px;
  top: 30%;
  right: 30%;
  position: absolute;
  animation: rotate 2s linear infinite;
}
复制代码


在切换明亮和黑暗模式时,调用 visibility 属性调整 svg 的可见性:


.dark {
  transition: 1s;
  background-color: $dark-color;
  color: $light-color;
  .sun-svg {
    fill: $light-color;
    visibility: visible;
  }
  .moon-svg {
    visibility: hidden;
  }
}
复制代码


第二个


第二个也是一个动画,但是我们不用 svg,直接用CSS来画太阳和月亮,效果如下:


image.png


我们把它分成两个部分,首先是两个方块叠加的齿轮背景,也可以看作☀的边角,用 div 画两个不同方向的正方形就行了:


.gear {
  position: absolute;
  background-color: $light-color;
  height: 100px;
  width: 100px;
  border-radius: 5px;
  transition: 2s;
}
#gear1 {
  transform: rotate(-45deg);
}
#gear2 {
  transform: rotate(-90deg);
}
复制代码


在点击时切换 active 的 class,让它们旋转起来:


#gear1.active {
  background-color: $bg-color;
  transform: rotate(225deg);
  transition: 2s;
}
#gear2.active {
  background-color: $bg-color;
  transform: rotate(180deg);
  transition: 2s;
}
复制代码


另一部分是中心的太阳和月亮,依旧采用上篇文章两个圆叠加的方法,画出一大一小两个圆,在切换模式的时候移动位置,如图:


image.png


#big {
  position: absolute;
  background-color: $bg-color;
  height: 70px;
  width: 70px;
  border-radius: 50%;
  transition: 2s;
}
#small {
  position: absolute;
  background-color: $light-color;
  height: 50px;
  width: 50px;
  border-radius: 50%;
  transition: 2s;
}
#small.active {
  height: 60px;
  width: 60px;
  transform: translate(15px, -5px);
  transition: 2s;
  background-color: $bg-color;
}
#big.active {
  background-color: $light-color;
  transition: 2s;
}
复制代码


同样是加上 active 类,在点击时随着齿轮的旋转移动圆的位置和颜色,叠加出月亮的形状,非常简单🤷‍♂️


JS 偷个懒,只使用 toggle() 来做切换,就不多说了。

目录
相关文章
|
12月前
|
安全 数据安全/隐私保护 UED
HarmonyOS 5.0 (Next)应用开发实战:使用ArkTS构建开箱即用的登录页面【HarmonyOS 5.0(Next)】
### HarmonyOS 5.0(Next)应用开发实战:使用ArkTS构建开箱即用的登录页面 HarmonyOS 5.0(Next)融合了美学与科技,引入“光感美学”设计理念和多设备深度协同功能。本文通过 ArkTS 构建一个简单的登录页面,展示了模块化导入、状态管理、方法封装、声明式UI构建及事件处理等最佳实践。代码实现了一个包含用户名和密码输入框及登录按钮的界面,支持错误提示和页面跳转。
990 14
HarmonyOS 5.0 (Next)应用开发实战:使用ArkTS构建开箱即用的登录页面【HarmonyOS 5.0(Next)】
|
存储 安全 Linux
在Linux中,如何使用VMware和VirtualBox进行虚拟化?
在Linux中,如何使用VMware和VirtualBox进行虚拟化?
|
存储 移动开发 前端开发
【专栏:工具与技巧篇】高效的 HTML 与 CSS 编写技巧
【4月更文挑战第30天】本文探讨了提高HTML和CSS编写效率的技巧,包括使用语义化标签、精简代码、利用HTML5新特性;使用CSS预处理器、模块化设计、优化选择器及媒体查询;协同技巧如一致的类名规划和理解盒模型;选择高效工具如Visual Studio Code和代码格式化工具;以及性能优化方法如代码压缩、减少HTTP请求和图片优化。通过案例分析,展示如何在实践中应用这些技巧,以创建结构良好、样式优美且性能卓越的网站。
294 1
|
SQL 消息中间件 Kafka
Flink教程(17)- Flink Table与SQL(案例与SQL算子)
Flink教程(17)- Flink Table与SQL(案例与SQL算子)
646 0
|
Cloud Native Linux
linux、centOS虚拟机出现entering emergency mode解决方案
linux、centOS虚拟机出现entering emergency mode解决方案
linux、centOS虚拟机出现entering emergency mode解决方案
|
程序员
P站风格Logo生成器
一个快速生成P站风格的在线工具
5487 1
P站风格Logo生成器
|
弹性计算 运维 Kubernetes
OpenKruiseGame 的设计理念详解| 学习笔记
快速学习 OpenKruiseGame 的设计理念详解
OpenKruiseGame 的设计理念详解| 学习笔记
|
缓存 前端开发 Java
【近3万字分享】《Android开发之路——10年老开发精心整理分享》
【近3万字分享】《Android开发之路——10年老开发精心整理分享》
【近3万字分享】《Android开发之路——10年老开发精心整理分享》
|
前端开发 内存技术
html:修改版火影忍者静态网页设计,实例三(附带完整源码)
html:修改版火影忍者静态网页设计,实例三(附带完整源码)
1493 1
html:修改版火影忍者静态网页设计,实例三(附带完整源码)
|
人工智能 机器人 5G
顺为资本冯铮:我们距离《头号玩家》中的「Metaverse」还有多远?
顺为资本冯铮:我们距离《头号玩家》中的「Metaverse」还有多远?
483 0
顺为资本冯铮:我们距离《头号玩家》中的「Metaverse」还有多远?