两个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() 来做切换,就不多说了。

目录
相关文章
|
8月前
mix-blend-mode 利用混合模式让文字智能适配背景颜色
这篇文章介绍了一种CSS3属性:mix-blend-mode,它可以实现文字智能适配背景颜色和文字镂空效果。通过设置mix-blend-mode为difference,可以在黑色背景中显示白色文字,在白色背景中显示黑色文字。同时,文章还提到了mix-blend-mode的其他属性,如multiply、screen等等,感兴趣的读者可以进一步研究。
143 0
|
6月前
|
前端开发
前端 CSS 经典:mix-blend-mode 属性
前端 CSS 经典:mix-blend-mode 属性
45 0
|
前端开发
transition和animation的区别
transition和animation的区别
|
XML Java Android开发
Android旋转动画rotate动画,xml配置set实现
Android旋转动画rotate动画,xml配置set实现 作为快速备忘查询,写到这里记下。 在xml配置动画所需的set设置资源,然后上层Java代码以最少的代码实现一个匀速旋转的动画,这种开发场景在一些加载动画中比较常见,比如视频缓冲时候的加载动画。
2130 0
|
JavaScript 前端开发
一个dark mode的动画
一个dark mode的动画
135 0
一个dark mode的动画
|
前端开发 JavaScript API
show()和隐藏hide() slideDown()和 slideUp() fadeIn()和fadeOut()
show()和隐藏hide() slideDown()和 slideUp() fadeIn()和fadeOut()
|
容器 JavaScript Web App开发
如何不用 transition 和 animation 也能做网页动画
效果预览 在线演示 按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。 https://codepen.io/comehope/pen/BxbQJj 可交互视频教程 此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。
1139 0
|
前端开发 JavaScript
优雅地实现CSS Animation delay
1.需求:   等待元素A的动画加载完,再加载B元素的动画(下图中A为大熊猫,B为下方卡片)   先来看下最后的效果啦: 2.初始思路:   在B元素的动画属性上加上delay(延迟,使得这个延迟时间 = A元素动画的加载时间) 即:animation : bmove .
1212 0