HTML+CSS:WIFI开关按钮

效果演示

在这里插入图片描述

实现了一个按钮的切换效果,当用户点击按钮时,按钮会从一个颜色渐变到另一个颜色,同时按钮的边框和阴影效果也会发生变化。同时,按钮的图标也会从一个颜色渐变到另一个颜色。这个效果可以用来提醒用户进行操作,或者用来显示系统状态。

Code

<div class="container">
    <input id="checkbox" type="checkbox">
    <label class="button" for="checkbox">
        <span class="icon">
            <svg viewBox="0 0 24 24" fill="" xmlns="http://www.w3.org/2000/svg">
                <g id="SVGRepo_bgCarrier" stroke-width="0"></g>
                <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
                <g id="SVGRepo_iconCarrier">
                    <path
                        d="M17.35 12.7901C17.1686 12.7907 16.9935 12.7229 16.86 12.6001C15.5322 11.411 13.8124 10.7534 12.03 10.7534C10.2476 10.7534 8.52779 11.411 7.19999 12.6001C7.12649 12.6658 7.04075 12.7164 6.94767 12.749C6.85459 12.7816 6.756 12.7955 6.65755 12.7899C6.55909 12.7843 6.4627 12.7594 6.37389 12.7165C6.28508 12.6736 6.2056 12.6137 6.13999 12.5401C6.0109 12.3892 5.94595 12.1939 5.95904 11.9958C5.97212 11.7977 6.06219 11.6126 6.20999 11.4801C7.80752 10.0423 9.88072 9.2467 12.03 9.2467C14.1793 9.2467 16.2525 10.0423 17.85 11.4801C17.9978 11.6126 18.0879 11.7977 18.1009 11.9958C18.114 12.1939 18.0491 12.3892 17.92 12.5401C17.8469 12.6181 17.7586 12.6806 17.6606 12.7236C17.5627 12.7665 17.457 12.7892 17.35 12.7901Z"
                        fill=""></path>
                    <path
                        d="M20 10C19.811 9.99907 19.6292 9.92777 19.49 9.80002C17.4685 7.87306 14.7828 6.79812 11.99 6.79812C9.19719 6.79812 6.51153 7.87306 4.48999 9.80002C4.42116 9.88186 4.33563 9.94804 4.23912 9.99411C4.14262 10.0402 4.03738 10.0651 3.93046 10.0672C3.82354 10.0692 3.71742 10.0484 3.61921 10.0061C3.521 9.96375 3.43298 9.90092 3.36105 9.82179C3.28911 9.74267 3.23493 9.64907 3.20214 9.54729C3.16934 9.4455 3.15869 9.33788 3.17091 9.23164C3.18312 9.1254 3.21791 9.023 3.27294 8.93131C3.32798 8.83962 3.40198 8.76076 3.48999 8.70002C5.78577 6.52533 8.82774 5.31329 11.99 5.31329C15.1522 5.31329 18.1942 6.52533 20.49 8.70002C20.5994 8.80134 20.6761 8.93298 20.7103 9.07811C20.7446 9.22324 20.7348 9.37527 20.6822 9.5148C20.6296 9.65433 20.5366 9.77502 20.4151 9.86145C20.2936 9.94787 20.1491 9.99612 20 10Z"
                        fill=""></path>
                    <path
                        d="M9.38 15.64C9.26356 15.64 9.14873 15.6129 9.04459 15.5608C8.94044 15.5088 8.84986 15.4332 8.78 15.34C8.7196 15.2617 8.67551 15.1721 8.65032 15.0765C8.62513 14.9809 8.61936 14.8812 8.63334 14.7834C8.64732 14.6855 8.68078 14.5914 8.73173 14.5067C8.78268 14.4219 8.8501 14.3483 8.93 14.29C9.81277 13.6145 10.8934 13.2485 12.005 13.2485C13.1166 13.2485 14.1972 13.6145 15.08 14.29C15.1588 14.3491 15.2252 14.4232 15.2754 14.5079C15.3255 14.5926 15.3585 14.6865 15.3725 14.784C15.3864 14.8815 15.381 14.9807 15.3565 15.0762C15.3321 15.1716 15.2891 15.2612 15.23 15.34C15.1091 15.497 14.9316 15.6005 14.7355 15.6285C14.5394 15.6565 14.34 15.6068 14.18 15.49C13.5548 15.014 12.7908 14.7561 12.005 14.7561C11.2192 14.7561 10.4551 15.014 9.83 15.49C9.69921 15.5855 9.54193 15.6379 9.38 15.64Z"
                        fill=""></path>
                    <path
                        d="M12 18.75C11.8011 18.75 11.6103 18.671 11.4697 18.5303C11.329 18.3897 11.25 18.1989 11.25 18C11.25 17.8011 11.329 17.6103 11.4697 17.4697C11.6103 17.329 11.8011 17.25 12 17.25C12.1989 17.25 12.3897 17.329 12.5303 17.4697C12.671 17.6103 12.75 17.8011 12.75 18C12.75 18.1989 12.671 18.3897 12.5303 18.5303C12.3897 18.671 12.1989 18.75 12 18.75Z"
                        fill=""></path>
                </g>
            </svg>
        </span>
    </label>
</div>
body {
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #212121;
}

.container {
    width: 7em;
    height: 7em;
    position: relative;
}

.button {
    position: absolute;
    width: 100%;
    height: 100%;
    border-radius: 50%;
    border: 4px solid #090909;
    background-color: transparent;
    background-image: linear-gradient(145deg, #171717, #444245);
    box-sizing: border-box;
    box-shadow: inset 2px 2px 0 #7d7c7e, inset -2px -2px 0px #1c1c1c;
    display: flex;
    align-items: center;
    justify-content: center;
}

.container input {
    display: none;
}

.button::before {
    position: absolute;
    content: "";
    width: 7.25em;
    height: 7.25em;
    border-radius: inherit;
    background-color: transparent;
    background-image: linear-gradient(145deg, #262626, #606060);
    z-index: -1;
    box-shadow: 11px 11px 22px #141414, -11px -11px 22px #525252;
}

.button .icon {
    width: 60px;
    height: 60px;
    display: inline-block;
}

.button .icon svg {
    height: 100%;
    width: 100%;
    fill: #a5a5a5;
}

.container input:checked+.button {
    box-shadow: inset -2px -2px 0 #5e5e5e, inset 2px 2px 0 #1c1c1c;
    border: 4px solid rgba(77, 124, 255, 0.281);
    animation: animeBorder .3s linear alternate-reverse infinite;
}

.container input:checked+.button .icon svg {
    fill: rgb(77, 124, 255);
    animation: animeFill .3s linear alternate-reverse infinite;
}

@keyframes animeFill {
    to {
        fill: rgba(77, 124, 255, 0.642);
    }
}

@keyframes animeBorder {
    to {
        border-color: rgba(77, 124, 255, 0.137);
    }
}

实现思路拆分

这是一个CSS样式表,用于创建一个按钮,该按钮具有渐变背景和阴影效果。以下是代码的详细解释:

cbody {
  height: 100vh; /* 设置body元素的高度为视口高度 */
  display: flex; /* 设置body元素为flex布局 */
  justify-content: center; /* 设置flex容器中子元素的水平对齐方式为居中 */
  align-items: center; /* 设置flex容器中子元素的垂直对齐方式为居中 */
  background-color: #212121; /* 设置body元素的背景颜色为深灰色 */
}

这段代码设置了body元素的样式,包括高度、布局方式、对齐方式和背景颜色。

.container {
  width: 7em; /* 设置容器的宽度为7em */
  height: 7em; /* 设置容器的高度为7em */
  position: relative; /* 设置容器的定位方式为相对定位 */
}

这段代码设置了容器的样式,包括宽度、高度、定位方式和其他属性。

.button {
  position: absolute; /* 设置按钮的定位方式为绝对定位 */
  width: 100%; /* 设置按钮的宽度为100% */
  height: 100%; /* 设置按钮的高度为100% */
  border-radius: 50%; /* 设置按钮的圆角半径为50% */
  border: 4px solid #090909; /* 设置按钮的边框为4px实线,颜色为深灰色 */
  background-color: transparent; /* 设置按钮的背景颜色为透明 */
  background-image: linear-gradient(145deg, #171717, #444245); /* 设置按钮的背景渐变为从左上角到右下角的渐变 */
  box-sizing: border-box; /* 设置按钮的盒模型为border-box */
  box-shadow: inset 2px 2px 0 #7d7c7e, inset -2px -2px 0px #1c1c1c; /* 设置按钮的阴影效果 */
  display: flex; /* 设置按钮为flex布局 */
  align-items: center; /* 设置按钮内部元素的垂直对齐方式为居中 */
  justify-content: center; /* 设置按钮内部元素的水平对齐方式为居中 */
}

这段代码设置了按钮的样式,包括定位方式、宽度、高度、圆角半径、边框、背景颜色、背景渐变、盒模型、阴影效果、布局方式和内部元素的对齐方式。

.container input {
  display: none; /* 设置input元素为none,即隐藏 */
}

这段代码设置了input元素的样式,包括将其设置为none,即隐藏。

.button::before {
  position: absolute; /* 设置伪元素的定位方式为绝对定位 */
  content: ""; /* 设置伪元素的内容为空 */
  width: 7.25em; /* 设置伪元素的宽度为7.25em */
  height: 7.25em; /* 设置伪元素的高度为7.25em */
  border-radius: inherit; /* 设置伪元素的圆角半径继承自按钮 */
  background-color: transparent; /* 设置伪元素的背景颜色为透明 */
  background-image: linear-gradient(145deg, #262626, #606060); /* 设置伪元素的背景渐变为从左上角到右下角的渐变 */
  z-index: -1; /* 设置伪元素的z-index为-1,即将其放在按钮的下面 */
  box-shadow: 11px 11px 22px #141414, -11px -11px 22px #525252; /* 设置伪元素的阴影效果 */
}

这段代码设置了伪元素的样式,包括定位方式、内容、宽度、高度、圆角半径、背景颜色、背景渐变、z-index和阴影效果。

这段代码设置了按钮的图标样式和动画效果。

.button.icon {
  width: 60px; /* 设置图标的宽度为60px */
  height: 60px; /* 设置图标的高度为60px */
  display: inline-block; /* 设置图标为行内块元素 */
}

这段代码设置了图标的样式,包括宽度、高度和显示方式。

.button.icon svg {
  height: 100%; /* 设置SVG元素的高度为100% */
  width: 100%; /* 设置SVG元素的宽度为100% */
  fill: #a5a5a5; /* 设置SVG元素的填充色为深灰色 */
}

这段代码设置了SVG元素的样式,包括高度、宽度和填充色。

.container input:checked+.button {
  box-shadow: inset -2px -2px 0 #5e5e5e, inset 2px 2px 0 #1c1c1c; /* 设置选中状态下的按钮阴影效果 */
  border: 4px solid rgba(77, 124, 255, 0.281); /* 设置选中状态下的按钮边框颜色 */
  animation: animeBorder.3s linear alternate-reverse infinite; /* 设置选中状态下的按钮动画效果 */
}

这段代码设置了选中状态下的按钮的样式,包括阴影效果、边框颜色和动画效果。

.container input:checked+.button.icon svg {
  fill: rgb(77, 124, 255); /* 设置选中状态下的图标填充色 */
  animation: animeFill.3s linear alternate-reverse infinite; /* 设置选中状态下的图标动画效果 */
}

这段代码设置了选中状态下的图标的样式,包括填充色和动画效果。

@keyframes animeFill {
  to {
    fill: rgba(77, 124, 255, 0.642); /* 设置图标动画的结束状态 */
  }
}

这段代码设置了图标动画的样式,包括结束状态。

@keyframes animeBorder {
  to {
    border-color: rgba(77, 124, 255, 0.137); /* 设置按钮动画的结束状态 */
  }
}

这段代码设置了按钮动画的样式,包括结束状态。

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

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

相关文章

一步步成为React全栈大师:从环境搭建到应用部署

文章目录 第一步&#xff1a;环境搭建第二步&#xff1a;了解React基础第三步&#xff1a;组件与路由第四步&#xff1a;状态管理第五步&#xff1a;接口与数据交互第六步&#xff1a;样式与布局第七步&#xff1a;测试第八步&#xff1a;构建与部署《深入浅出React开发指南》内…

MagicVideo-V2:多阶段高保真视频生成框架

本项工作介绍了MagicVideo-V2&#xff0c;将文本到图像模型、视频运动生成器、参考图像embedding模块和帧内插模块集成到端到端的视频生成流程中。由于这些架构设计的好处&#xff0c;MagicVideo-V2能够生成具有极高保真度和流畅度的美观高分辨率视频。通过大规模用户评估&…

未来电话呼叫技术的社会影响与发展趋势----云微呼

未来电话呼叫技术将以更为智能化、便捷化和个性化为主要发展趋势&#xff0c;其所带来的社会影响也将是多层面的。以下将探讨未来电话呼叫技术可能的发展趋势以及对社会的影响&#xff1a; 智能化助力生活便捷&#xff1a; 未来电话呼叫技术将更加智能化&#xff0c;通过人工智…

Spring事件之注解@EventListener讲解

文章目录 1 注解EventListener1.1 示例Demo1.1.1 简单例子1.1.2 解耦1.1.3 Spring事件 1.2 深入EventListener1.2.1 debug调试1.2.2 问题一&#xff1a; Spring是怎么知道要去触发这个方法1.2.3 问题二&#xff1a;ApplicationListenerMethodAdapter1.2.4 问题三&#xff1a;Si…

【Python】【完整代码】解析Excel 文件中的内容并检查是否包含某字符串,并返回判断结果

示例&#xff1a; 开发需求&#xff1a;解析Excel 文件中的内容并检查是否包含 "Fail" 字符&#xff0c;若没有则返回True&#xff0c;若有则返回False 实现代码&#xff1a; #!/usr/bin/env python3 # -*- encoding: utf-8 -*-File : check_excel_for_fail.py Ti…

华为机考入门python3--(7)牛客7-取近似值

分类&#xff1a;数字 知识点&#xff1a; str转float float(str) 向上取整 math.ceil(float_num) 向下取整 math.floor(float_num) 题目来自【牛客】 import math def round_to_int(float_num): # 如果小数点后的数值大于等于0.5&#xff0c;则向上取整&#xf…

【HarmonyOS】鸿蒙开发之ArkTs初步认识——第2.1章

ArkTs简介 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。 以下图可以展示Js&#xff0c;TS&#xff0c;ArkTs的关系 ArkTs基础语…

开发知识点-拍黄片的好基友的依赖管理工具-composer

composer 介绍主要特性使用Composer的优势 基本使用文档 介绍 Composer 是 PHP 的一个依赖管理工具&#xff0c;它允许项目创建者和开发者声明项目所依赖的库&#xff0c;并自动安装这些依赖项。 它在PHP社区中被广泛使用&#xff0c;几乎成为了现代PHP开发的标准配置。 主要…

面试150 颠倒二进制位 位运算分治 逻辑右移

Problem: 190. 颠倒二进制位 文章目录 思路复杂度位运算分治法 思路 &#x1f468;‍&#x1f3eb; 参考题解 >>>&#xff1a;逻辑右移&#xff08;符号位一起移动&#xff0c;高位补零&#xff09; 复杂度 时间复杂度: O ( log ⁡ n ) O(\log{n}) O(logn) 空间…

Javaweb之SpringBootWeb案例之 @ConfigurationProperties的详细解析

4.3 ConfigurationProperties 讲解完了yml配置文件之后&#xff0c;最后再来介绍一个注解ConfigurationProperties。在介绍注解之前&#xff0c;我们先来看一个场景&#xff0c;分析下代码当中可能存在的问题&#xff1a; 我们在application.properties或者application.yml中配…

外贸流程的基本流程图怎么画?这样画简单快速

外贸流程的基本流程图怎么画&#xff1f;随着全球化的不断深入&#xff0c;外贸行业逐渐成为了国家经济发展的重要支柱。对于许多企业和个人来说&#xff0c;掌握外贸基本流程是非常必要的。但是&#xff0c;很多人在初次接触外贸时&#xff0c;对于流程的各个环节并不熟悉&…

备战蓝桥杯---搜索(应用入门)

话不多说&#xff0c;直接看题&#xff1a; 显然&#xff0c;我们可以用BFS&#xff0c;其中&#xff0c;对于判重操作&#xff0c;我们可以把这矩阵化成字符串的形式再用map去存&#xff0c;用a数组去重现字符串&#xff08;相当于map映射的反向操作&#xff09;。移动空格先找…

力扣热门100题刷题笔记 - 3.无重复字符的最长子串

力扣热门100题 - 3.无重复字符的最长子串 题目链接&#xff1a;3. 无重复字符的最长子串 题目描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。示例&#xff1a; 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字…

EasyCVR视频融合平台如何助力执法记录仪高效使用

旭帆科技的EasyCVR平台可接入的设备除了常见的智能分析网关与摄像头以外 &#xff0c;还可通过GB28181协议接入执法记录仪&#xff0c;实现对执法过程的全称监控与录像&#xff0c;并对执法轨迹与路径进行调阅回看。那么&#xff0c;如何做到执法记录仪高效使用呢&#xff1f; …

【Linux Day15 TCP网络通讯】

TCP网络通讯 TCP编程流程 接口介绍 socket()方法是用来创建一个套接字&#xff0c;有了套接字就可以通过网络进行数据的收发。创建套接字时要指定使用的服务类型&#xff0c;使用 TCP 协议选择流式服务&#xff08;SOCK_STREAM&#xff09;。 **bind()方法是用来指定套接字使…

STM32L4学习

STM32L4系列是围绕Cortex-M4构建&#xff0c;具有FPU和DSP指令集&#xff0c;主频高达80MHz。 STM32CubeL4简介 STM32Cube 是 ST 提供的一套性能强大的免费开发工具和嵌入式软件模块&#xff0c;能够让开发人员在 STM32 平台上快速、轻松地开发应用。它包含两个关键部分&…

XXE基础知识整理(附加xml基础整理)

全称&#xff1a;XML External Entity 外部实体注入攻击 原理 利用xml进行读取数据时过滤不严导致嵌入了恶意的xml代码&#xff1b;和xss原理雷同 危害 外界攻击者可读取商户服务器上的任意文件&#xff1b; 执行系统命令&#xff1b; 探测内网端口&#xff1b; 攻击内网网站…

NAS系统折腾记 – Emby搭建家庭多媒体服务器

Emby简介 Emby是一款优秀的媒体服务器软件&#xff0c;致力于为用户提供丰富的多媒体体验。通过Emby&#xff0c;您可以方便地在家庭内的各种设备上观看您喜爱的电影、电视剧和其他视频内容。而且&#xff0c;Emby还具备强大的媒体管理功能&#xff0c;让您的影视资源井然有序…

nodejs 事件循环

浏览器的事件循环比较熟悉了&#xff0c;也来了解下 node 的。 参考来源&#xff1a; https://nodejs.org/en/guides/event-loop-timers-and-nexttick/ https://juejin.cn/post/6844903999506923528 事件循环分为 6 个阶段&#xff0c;图中每个框都是一个阶段&#xff0c;每个阶…

Vue服务端渲染

Vue服务端渲染 一、服务端渲染基础 1、概述 我们现在可以使用Vue,React等开发SPA单页面应用&#xff0c;单页面应用的优点&#xff0c;用户体验好&#xff0c;开发效率高&#xff0c;可维护性好等。 缺点&#xff1a;首屏渲染时间长&#xff08;在客户端通过JS来生成html来…