有趣的css - 暗黑模式切换按钮

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是一个丝滑的暗黑模式切换按钮。

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


目录

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

整体效果

知识点:
① 伪选择器的灵活使用
box-shadow 多重阴影属性的使用
animation 动画和 transform 变换属性的使用
input 多选框的使用

思路: 利用 box-shadow 阴影实现小月亮形状,然后使用伪选择器配合 box-shadow 多重阴影属性实现小太阳形状,最后借助 input 多选框属性实现点击切换动画效果。


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

核心代码

html 代码

<label class="label47">
  <input type="checkbox" class="checkbox47" />
  <div class="status47"></div>
</label>

label 标签包括 input 标签,并设置 type="checkbox" 多选按钮,在 input 标签后增加一个 div 标签。

css 部分代码

.label47{
  width: 60px;
  height: 60px;
  border: 2px solid #000;
  position: relative;
  cursor: pointer;
  border-radius: 50%;
  box-shadow: -6px 6px 0 #000;
  box-sizing: border-box;
  transition: all 0.1s;
}
.checkbox47{
  display: none;
}
.status47{
  width: 30px;
  height: 30px;
  background-color: transparent;
  box-shadow: inset -12px -8px 0 #000;
  border-radius: 50%;
  position: absolute;
  top: 12px;
  left: 12px;
  box-sizing: border-box;
  transition: all 0.4s;
}
.label47:active {
  box-shadow: 0px 0px #000;
  transform: translate(-6px, 6px);
}
.checkbox47:checked + .status47{
  width: 24px;
  height: 24px;
  box-shadow: inset -30px -30px 0 #000;
  top: 16px;
  left: 16px;
}
.checkbox47:checked + .status47:after{
  content: '';
  width: 10px;
  height: 10px;
  background-color: #000;
  box-shadow: 0 18px 0 -4px #000,
    18px 0 0 -4px #000,
    0 -18px 0 -4px #000,
    -18px 0 0 -4px #000,
    -12px 12px 0 -4px #000,
    -12px -12px 0 -4px #000,
    12px -12px 0 -4px #000,
    12px 12px 0 -4px #000;
  border-radius: 50%;
  position: absolute;
  top: 7px;
  left: 7px;
  box-sizing: border-box;
  animation: anieff47 0.4s ease-out forwards;
}
@keyframes anieff47{
  0% {
    transform: scale(0);
  }
  100% {
    transform: scale(1);
  }
}

1、先隐藏 input 多选按钮,然后利用 div 标签,用 box-shadow 实现小月亮形状,然后利用 position 定位到中间,并添加 transition 过渡属性。

2、然后使用伪选择器 :after ,利用 box-shadow 多种阴影来模拟出 8 个小圆点,配合其他 css 样式,实现一个小太阳的形状,并且给小火焰增加 animation 动画属性,设置动画参数,添加关键帧,让 8 个小圆点从小变大显示。

3、然后利用 input 多选框 :checked 选择器来判断是否选中状态,根据选中状态,来切换小月亮和小太阳,形成视觉效果的切换。

完整代码如下

html 页面

<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="style.css">
    <title>暗黑模式切换按钮</title>
  </head>
  <body>
    <div class="app">
      <label class="label47">
        <input type="checkbox" class="checkbox47" />
        <div class="status47"></div>
      </label>
    </div>
  </body>
</html>

css 样式

/** style.css **/
.app{
  width: 100%;
  height: 100vh;
  background-color: #ffffff;
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
}
.label47{
  width: 60px;
  height: 60px;
  border: 2px solid #000;
  position: relative;
  cursor: pointer;
  border-radius: 50%;
  box-shadow: -6px 6px 0 #000;
  box-sizing: border-box;
  transition: all 0.1s;
}
.checkbox47{
  display: none;
}
.status47{
  width: 30px;
  height: 30px;
  background-color: transparent;
  box-shadow: inset -12px -8px 0 #000;
  border-radius: 50%;
  position: absolute;
  top: 12px;
  left: 12px;
  box-sizing: border-box;
  transition: all 0.4s;
}
.label47:active {
  box-shadow: 0px 0px #000;
  transform: translate(-6px, 6px);
}
.checkbox47:checked + .status47{
  width: 24px;
  height: 24px;
  box-shadow: inset -30px -30px 0 #000;
  top: 16px;
  left: 16px;
}
.checkbox47:checked + .status47:after{
  content: '';
  width: 10px;
  height: 10px;
  background-color: #000;
  box-shadow: 0 18px 0 -4px #000,
    18px 0 0 -4px #000,
    0 -18px 0 -4px #000,
    -18px 0 0 -4px #000,
    -12px 12px 0 -4px #000,
    -12px -12px 0 -4px #000,
    12px -12px 0 -4px #000,
    12px 12px 0 -4px #000;
  border-radius: 50%;
  position: absolute;
  top: 7px;
  left: 7px;
  box-sizing: border-box;
  animation: anieff47 0.4s ease-out forwards;
}
@keyframes anieff47{
  0% {
    transform: scale(0);
  }
  100% {
    transform: scale(1);
  }
}

页面渲染效果

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


[1] 原文阅读


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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一年期单域名SSL证书怎么申请?

申请一年期单域名SSL证书的步骤如下&#xff1a; 1. 选择SSL证书提供商&#xff1a; 选择一家信誉良好、受浏览器广泛信任的SSL证书颁发机构&#xff08;CA&#xff09;&#xff0c;如JoySSL等。可以根据价格、支持服务、证书类型等因素进行比较。 单域名SSL证书-JoySSLhttps:…

ThinkPHP审计(1) 不安全的SQL注入PHP反序列化链子phar利用简单的CMS审计实例

ThinkPHP代码审计(1) 不安全的SQL注入&PHP反序列化链子phar利用&简单的CMS审计实例 文章目录 ThinkPHP代码审计(1) 不安全的SQL注入&PHP反序列化链子phar利用&简单的CMS审计实例一.Thinkphp5不安全的SQL写法二.Thinkphp3 SQL注入三.Thinkphp链5.1.x结合phar实现…

TouchGFX之容器

容器是TouchGFX中的一种组件&#xff0c;可以包含子节点&#xff08;比如控件和其他容器&#xff09;。 在TouchGFX Designer中&#xff0c;可以在Widgets&#xff08;控件&#xff09;选项卡中的containers&#xff08;容器&#xff09;类别下找到容器&#xff0c;向容器中添…

正大国际:国内做外盘qi货的人多吗?

整个中国&#xff0c;期货也就五百万个账户&#xff0c;活跃的也就两百万个&#xff0c;股票账户三亿多个 所以说在国内做期货的是真的少&#xff0c;大部分人聊天知道股票&#xff0c;期货听都没听过 这所有的国内期货账户中&#xff0c;小散户是寥寥无几的&#xff0c;基本…

content warning内容警告中文汉化快捷教程分享

content warning(内容警告)是近期steam上非常受欢迎的一款恐怖题材多人联机游戏,自4月1日上线后,一直保持较高的玩家人数,steam好评率也稳定维持在93%,可以说是4月初发售游戏中的最大黑马。本作首发虽然支持中文,不过游戏内的中文阅读体验并不完整,经常会出现中英文字幕混杂等情…

IoTeX的旅程并非孤军奋战

自2017年起&#xff0c;IoTeX便作为一个雄心勃勃的开源项目&#xff0c;踏上了一条为机器打造开放经济的道路。这个宏伟的目标背后&#xff0c;是一个去中心化的平台愿景&#xff0c;一个能够让人类和机器在有保障的信任、自由意志及精心设计的经济激励下相互协作的开放生态系统…

前端学习<四>JavaScript基础——10-运算符

我们在前面讲过变量&#xff0c;本文讲一下运算符和表达式。 运算符的定义和分类 运算符的定义 运算符&#xff1a;也叫操作符&#xff0c;是一种符号。通过运算符可以对一个或多个值进行运算&#xff0c;并获取运算结果。 表达式&#xff1a;数字、运算符、变量的组合&…

华为 2024 届校园招聘-硬件通⽤/单板开发——第十套

华为 2024 届校园招聘-硬件通⽤/单板开发——第十套 部分题目分享&#xff0c;完整版带答案&#xff08;共十套&#xff09;获取&#xff08;WX:didadidadidida313&#xff0c;加我备注&#xff1a;CSDN huawei硬件单板题目&#xff0c;谢绝白嫖哈&#xff09; 1、I2 C 总线…

代码随想录算法训练营Day14|二叉树理论基础和递归遍历

代码随想录卡哥视频 理论基础 需要了解 二叉树的种类&#xff0c;存储方式&#xff0c;遍历方式 以及二叉树的定义 文章讲解&#xff1a;代码随想录 递归遍历 &#xff08;必须掌握&#xff09; 二叉树的三种递归遍历掌握其规律后&#xff0c;其实很简单 题目链接/文章讲解/…

如何制作软件安装包第二步

目录 0.文章目的1.第二次打开发现之前生成的2.重新引导引入文件--制作安装包3.输入安装包基本信息4.确认安装路径5.选择制作完成的exe执行文件6.加入jre运行环境--这步很重要&#xff0c;否则项目运行不起来7.填写安装包名称8.添加版权信息文件&#xff08;可选操作&#xff09…

android-自定义TextView在文字内容末尾添加图片icon、可以添加间距

样式示意图 自定义属性 style.xml <declare-styleable name"IconLabelTextView"><attr name"iconSrc" format"reference"/><attr name"iconPaddingStart" format"dimension"/><attr name"iconPad…

PKI:构建数字安全基石的关键技术

在数字化时代&#xff0c;网络安全已成为我们日常生活和工作的重要组成部分。为了确保数据的完整性、机密性和身份的真实性&#xff0c;公钥基础设施&#xff08;Public Key Infrastructure&#xff0c;简称PKI&#xff09;技术应运而生&#xff0c;为构建数字安全基石提供了重…

无人机控制框架的设计

无人机控制框架的设计主要包括以下几个模块&#xff1a;传感器模块、控制模块、通信模块和执行器模块。 传感器模块&#xff1a;负责获取无人机当前的状态信息&#xff0c;包括位置、姿态、速度等。常用的传感器包括GPS、陀螺仪、加速度计、气压计等。 控制模块&#xff1a;根…

Mysql底层原理二:Buffer Pool

1.数据区 就是描述信息缓存页这块&#xff0c;用来存放从磁盘加载的数据页&#xff08;看上图 索引页和数据页是分开的&#xff09; 2. free链表 用来标识数据区哪些数据页是可用的 3. flush链表 update的时候&#xff0c;如果数据在数据区可以找到&#xff0c;那就直接内…

Novel Influence Maximization Algorithm for Social Network Behavior Management

Abstract: 通过影响力最大化的过程来识别对社交网络中的产品采用或信息利用做出重大贡献的用户。社交网络的指数增长给这些网络的分析带来了一些挑战。现有文献非常重视对结构属性进行建模&#xff0c;而忽略了用户与其社会行为之间的关系。对于社会行为&#xff0c;本文将影响…

基于Java+SpringBoot+vue3+uniapp点餐/外卖管理系统设计与实现

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-航班时间

#include<iostream> using namespace std;int getTime(){int h1, h2, m1, m2, s1, s2, d 0;//d一定初始化为0&#xff0c;以正确处理不跨天的情况 scanf("%d:%d:%d %d:%d:%d (%d)", &h1, &m1, &s1, &h2, &m2, &s2, &d);return d …

使用高德微信小程序插件实现精准获取打卡位置

由于微信小程序的 getFuzzyLocation 误差太大 不得不改用高德微信sdk 使用方法&#xff1a; 一、下载 sdk 相关下载-微信小程序插件 | 高德地图API 二、引入 sdk //引入 var amapFile require(../../libs/amap-wx.js); Page({onLoad: function() {var that this;va…

基于springboot+vue+Mysql的滴答拍摄影项目

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

组合数(费马小定理, 快速幂)

给定 n 组询问&#xff0c;每组询问给定两个整数 a&#xff0c;b&#xff0c;请你输出 Cbamod(1097)的值。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一组 a 和 b。 输出格式 共 n 行&#xff0c;每行输出一个询问的解。 数据范围 1≤n≤10000, 1≤…