HTML 霓虹灯开关效果

news2024/11/29 20:17:42

HTML 霓虹灯开关效果

1.简介:该代码为纯html,CSS写在了内部,不需要额外引入,霓虹灯开关效果很漂亮,应用在个人物联网项目中是一个比较不错的选择。

2.运行效果:

请添加图片描述

3.源码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>霓虹灯</title>
    <style>
        *{border:0;box-sizing:border-box;margin:0;padding:0}:root{--hue:223;--off-hue:3;--on-hue1:123;--on-hue2:168;--fg:hsl(var(--hue),10%,90%);--primary:hsl(var(--hue),90%,50%);--trans-dur:0.6s;--trans-timing:cubic-bezier(0.65,0,0.35,1);font-size:calc(40px + (60 - 40) * (100vw - 320px) / (2560 - 320))}body,input{font:1em/1.5 sans-serif}body{background-image:linear-gradient(45deg,hsl(var(--hue),10%,20%),hsl(var(--hue),10%,10%));color:var(--fg);display:flex;height:100vh;transition:background-color var(--trans-dur),color var(--trans-dur)}.switch,.switch__input{-webkit-tap-highlight-color:#0000}.switch{display:block;margin:auto;position:relative;width:5em;height:3em}.switch__base-outer,.switch__base-inner{display:block;position:absolute}.switch__base-outer{border-radius:1.25em;box-shadow:-0.125em -0.125em 0.25em hsl(var(--hue),10%,30%),0.125em 0.125em 0.125em hsl(var(--hue),10%,30%) inset,0.125em 0.125em 0.25em hsl(0,0%,0%),-0.125em -0.125em 0.125em hsl(var(--hue),10%,5%) inset;top:0.125em;left:0.125em;width:4.75em;height:2.75em}.switch__base-inner{border-radius:1.125em;box-shadow:-0.25em -0.25em 0.25em hsl(var(--hue),10%,30%) inset,0.0625em 0.0625em 0.125em hsla(var(--hue),10%,30%),0.125em 0.25em 0.25em hsl(var(--hue),10%,5%) inset,-0.0625em -0.0625em 0.125em hsla(var(--hue),10%,5%);top:0.375em;left:0.375em;width:4.25em;height:2.25em}.switch__base-neon{display:block;overflow:visible;position:absolute;top:0;left:0;width:100%;height:auto;cursor:pointer}.switch__base-neon path{stroke-dasharray:0 104.26 0;transition:stroke-dasharray var(--trans-dur) var(--trans-timing)}.switch__input{outline:transparent;position:relative;width:100%;height:100%;-webkit-appearance:none;appearance:none}.switch__input:before{border-radius:0.125em;box-shadow:0 0 0 0.125em hsla(var(--hue),90%,50%,0);content:"";display:block;position:absolute;inset:-0.125em;transition:box-shadow 0.15s linear}.switch__input:focus-visible:before{box-shadow:0 0 0 0.125em var(--primary)}.switch__knob,.switch__knob-container{border-radius:1em;display:block;position:absolute;cursor:pointer}.switch__knob{background-color:hsl(var(--hue),10%,15%);background-image:radial-gradient(88% 88% at 50% 50%,hsl(var(--hue),10%,20%) 47%,hsla(var(--hue),10%,20%,0) 50%),radial-gradient(88% 88% at 47% 47%,hsl(var(--hue),10%,85%) 45%,hsla(var(--hue),10%,85%,0) 50%),radial-gradient(65% 70% at 40% 60%,hsl(var(--hue),10%,20%) 46%,hsla(var(--hue),10%,20%,0) 50%);box-shadow:-0.0625em -0.0625em 0.0625em hsl(var(--hue),10%,15%) inset,-0.125em -0.125em 0.0625em hsl(var(--hue),10%,5%) inset,0.75em 0.25em 0.125em hsla(0,0%,0%,0.8);width:2em;height:2em;transition:transform var(--trans-dur) var(--trans-timing)}.switch__knob-container{overflow:hidden;top:0.5em;left:0.5em;width:4em;height:2em}.switch__knob-neon{display:block;width:2em;height:auto}.switch__knob-neon circle{opacity:0;stroke-dasharray:0 90.32 0 54.19;transition:opacity var(--trans-dur) steps(1,end),stroke-dasharray var(--trans-dur) var(--trans-timing)}.switch__knob-shadow{border-radius:50%;box-shadow:0.125em 0.125em 0.125em hsla(0,0%,0%,0.9);display:block;position:absolute;top:0.5em;left:0.5em;width:2em;height:2em;transition:transform var(--trans-dur) var(--trans-timing)}.switch__led{background-color:hsl(var(--off-hue),90%,70%);border-radius:50%;box-shadow:0 -0.0625em 0.0625em hsl(var(--off-hue),90%,40%) inset,0 0 0.125em hsla(var(--off-hue),90%,70%,0.3),0 0 0.125em hsla(var(--off-hue),90%,70%,0.3),0.125em 0.125em 0.125em hsla(0,0%,0%,0.5);display:block;position:absolute;top:0;left:0;width:0.25em;height:0.25em;transition:background-color var(--trans-dur) var(--trans-timing),box-shadow var(--trans-dur) var(--trans-timing)}.switch__text{overflow:hidden;position:absolute;width:1px;height:1px}.switch__input:checked~.switch__led{background-color:hsl(var(--on-hue1),90%,70%);box-shadow:0 -0.0625em 0.0625em hsl(var(--on-hue1),90%,40%) inset,0 -0.125em 0.125em hsla(var(--on-hue1),90%,70%,0.3),0 0.125em 0.125em hsla(var(--on-hue1),90%,70%,0.3),0.125em 0.125em 0.125em hsla(0,0%,0%,0.5)}.switch__input:checked~.switch__base-neon path{stroke-dasharray:52.13 0 52.13}.switch__input:checked~.switch__knob-shadow,.switch__input:checked~.switch__knob-container .switch__knob{transform:translateX(100%)}.switch__input:checked~.switch__knob-container .switch__knob-neon circle{opacity:1;stroke-dasharray:45.16 0 45.16 54.19;transition-timing-function:steps(1,start),var(--trans-timing)}
    </style>
</head>

<body>
    <label class="switch">
        <input class="switch__input" type="checkbox" role="switch">
        <span class="switch__base-outer"></span>
        <span class="switch__base-inner"></span>
        <svg class="switch__base-neon" viewBox="0 0 40 24" width="40px" height="24px">
            <defs>
                <filter id="switch-glow">
                    <feGaussianBlur result="coloredBlur" stddeviation="1"></feGaussianBlur>
                    <feMerge>
                        <feMergeNode in="coloredBlur"></feMergeNode>
                        <feMergeNode in="SourceGraphic"></feMergeNode>
                    </feMerge>
                </filter>
                <linearGradient id="switch-gradient1" x1="0" y1="0" x2="1" y2="0">
                    <stop offset="0%" stop-color="hsl(var(--on-hue1),90%,70%)" />
                    <stop offset="100%" stop-color="hsl(var(--on-hue2),90%,70%)" />
                </linearGradient>
                <linearGradient id="switch-gradient2" x1="0.7" y1="0" x2="0.3" y2="1">
                    <stop offset="25%" stop-color="hsla(var(--on-hue1),90%,70%,0)" />
                    <stop offset="50%" stop-color="hsla(var(--on-hue1),90%,70%,0.3)" />
                    <stop offset="100%" stop-color="hsla(var(--on-hue2),90%,70%,0.3)" />
                </linearGradient>
            </defs>
            <path fill="none" filter="url(#switch-glow)" stroke="url(#switch-gradient1)" stroke-width="1"
                stroke-dasharray="0 104.26 0" stroke-dashoffset="0.01" stroke-linecap="round"
                d="m.5,12C.5,5.649,5.649.5,12,.5h16c6.351,0,11.5,5.149,11.5,11.5s-5.149,11.5-11.5,11.5H12C5.649,23.5.5,18.351.5,12Z" />
        </svg>
        <span class="switch__knob-shadow"></span>
        <span class="switch__knob-container">
            <span class="switch__knob">
                <svg class="switch__knob-neon" viewBox="0 0 48 48" width="48px" height="48px">
                    <circle fill="none" stroke="url(#switch-gradient2)" stroke-dasharray="0 90.32 0 54.19"
                        stroke-linecap="round" stroke-width="1" r="23" cx="24" cy="24"
                        transform="rotate(-112.5,24,24)" />
                </svg>
            </span>
        </span>
        <span class="switch__led"></span>
        <span class="switch__text">Power</span>
    </label>
</body>

</html>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp开发支付宝小程序自定义tabbar样式异常

解决方案&#xff1a; 这个问题应该是支付宝基础库的问题&#xff0c;除了依赖于官方更新之外&#xff0c;开发者可以利用《自定义 tabBar》曲线救国 也就是创建一个空内容的自定义tabBar&#xff0c;这样即使 tabBar 被渲染出来&#xff0c;但从视觉上也不会有问题 1.官方文…

24/11/26 视觉笔记 通过特征提取和透视变换查找对象

在本节中我们将检测和跟踪任意大小的对象&#xff0c;这些对象可能是在不同角度或者在部分遮挡的情况下观察到的。 为此我们将运用特征描述子&#xff08;Feature Descriptor&#xff09;&#xff0c;这是捕获感兴趣对象的重要属性的一种方式。我们这样是为了即使将对象嵌入繁…

【单片机毕业设计12-基于stm32c8t6的智能称重系统设计】

【单片机毕业设计12-基于stm32c8t6的智能称重系统设计】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇12-基于stm32c8t6的智能称重系统设计 &#x1f9ff;创作不易&#xff0c;拒绝白嫖可私 一、功能介绍 ----…

ubuntu中使用ffmpeg和nginx推http hls视频流

视频流除了rtmp、rtsp&#xff0c;还有一种是http的hls流&#xff0c;使用http协议传输hls格式的视频数据。 nginx支持推送hls视频流&#xff0c;使用的是rtmp模块&#xff0c;即rtmp流推送成功了&#xff0c;hls流也没问题。怎么推送rtmp流&#xff0c;请参考我的文章&#x…

5.2.机器学习--岭回归+局部线性回归

目录 1.岭回归 1.1代码示例 2.局部线性回归 2.1代码示例 1.最小二乘法&#xff1a; 平面几何表达直线(两个系数): 重新命名变量: 强行加一个x01&#xff1a; 向量表达&#xff1a; 2.损失函数&#xff1a; 矩阵表达&#xff1a; 矩阵展开&#xff1a; 推导&#xff1a; …

nvidia-container-toolkit安装问题(OpenPGP)

1.正常情况下 apt-get install -y nvidia-container-toolkit2.使用nvidia源 nvidia-container-toolkit官网有安装教程 2.1 配置生产存储库 curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-containe…

电脑上的ip地址可以改吗?如何改变ip地址

在现代网络环境中&#xff0c;IP地址作为设备在网络中的唯一标识&#xff0c;扮演着至关重要的角色。无论是日常上网冲浪&#xff0c;还是进行专业的网络操作&#xff0c;IP地址都与我们息息相关。那么&#xff0c;电脑上的IP地址可以改吗&#xff1f;答案是肯定的。接下来&…

org.apache.log4j的日志记录级别和基础使用Demo

org.apache.log4j的日志记录级别和基础使用Demo&#xff0c;本次案例展示&#xff0c;使用是的maven项目&#xff0c;搭建的一个简单的爬虫案例。里面采用了大家熟悉的日志记录插件&#xff0c;log4j。来自apache公司的开源插件。 package com.qian.test;import org.apache.log…

PHP 生成分享海报

因为用户端有多个平台&#xff0c;如果做分享海报生成&#xff0c;需要三端都来做&#xff0c;工作量比较大。 所以这个艰巨的任务就光荣的交给后端了。经过一定时间的研究和调试&#xff0c;最终圆满完成了任务&#xff0c;生成分享海报图片实现笔记如下。 目录 准备字体文件…

ASP.NET Core 入门

使用 .NET CLI 创建并运行 ASP.NET Core Web 应用。 文章目录 一、先决条件二、创建Web应用项目三、运行应用四、编辑Razor页面 一、先决条件 .NET 8.0 SDK 二、创建Web应用项目 打开命令行界面&#xff0c;然后输入以下命令&#xff1a; dotnet new webapp --output aspne…

基于 Flask 和 Socket.IO 的 WebSocket 实时数据更新实现

简介 随着现代化应用的快速发展&#xff0c;实时数据交互已经成为许多 Web 应用的核心需求&#xff0c;比如实时消息推送、数据监控大屏等。本文将基于一个完整的 WebSocket 实现示例&#xff0c;带你一步步理解如何使用 Flask 和 Socket.IO 构建实时数据更新的 Web 应用。 将…

十、Spring Boot集成Spring Security之HTTP请求授权

文章目录 往期回顾&#xff1a;Spring Boot集成Spring Security专栏及各章节快捷入口前言一、HTTP请求授权工作原理二、HTTP请求授权配置1、添加用户权限2、配置ExceptionTranslationFilter自定义异常处理器3、HTTP请求授权配置 三、测试接口1、测试类2、测试 四、总结 往期回顾…

详细介绍HTTP与RPC:为什么有了HTTP,还需要RPC?

目录 一、HTTP 二、RPC 介绍 工作原理 核心功能 如何服务寻址 如何进行序列化和反序列化 如何网络传输 基于 TCP 协议的 RPC 调用 基于 HTTP 协议的 RPC 调用 实现方式 优点和缺点 使用场景 常见框架 示例 三、问题 问题一&#xff1a;是先有HTTP还是先有RPC&…

【Linux】 进程是什么

0. 什么是进程&#xff0c;为什么要有进程&#xff1f; 1.操作系统为了更好的管理我们的软硬件&#xff0c;抽象出了许多概念&#xff0c;其中比较有代表的就是进程了。通俗的来说操作系统为了更好的管理加载到内存的程序&#xff0c;故引入进程的概念。 2.在操作系统学科中用P…

[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式

T. 已测试目录 主机类型主机版本Docker镜像版本结果WSL2Ubuntu22.04Ubuntu20.04PASSWSL2Ubuntu22.04Ubuntu18.04PASS R. 软硬件要求&#xff1a; 编译硬件需求&#xff1a;做多系统测试&#xff0c;磁盘500GB起步(固态)&#xff08;机械会卡死&#xff09;&#xff0c;内存3…

vue3-使用vite创建项目

vue-cli处于维护模式&#xff0c;也可以使用脚手架正常创建vue3项目&#xff0c;与vue2创建方式一致 官方推荐使用vite创建项目 vite 是新一代前端构建工具,官网地址轻量快速的热重载&#xff08;HMR&#xff09;&#xff0c;能实现极速的服务启动。对 TypeScript、JSX、CSS 等…

Java设计模式笔记(一)

Java设计模式笔记&#xff08;一&#xff09; &#xff08;23种设计模式由于篇幅较大分为两篇展示&#xff09; 一、设计模式介绍 1、设计模式的目的 让程序具有更好的&#xff1a; 代码重用性可读性可扩展性可靠性高内聚&#xff0c;低耦合 2、设计模式的七大原则 单一职…

Vue3+node.js实现登录

文章目录 前端代码实现后端代码实现跨域处理 前端代码实现 效果图 前端代码实现 <template><div class"login-container"><el-card class"login-card"><template #header><div class"card-header"><span>…

网络原理(一)—— http

什么是 http http 是一个应用层协议&#xff0c;全称为“超文本传输协议”。 http 自 1991 年诞生&#xff0c;目前已经发展为最主流使用的一种应用层协议。 HTTP 往往基于传输层的 TCP 协议实现的&#xff0c;例如 http1.0&#xff0c;http1.0&#xff0c;http2.0 http3 是…

Next.js-样式处理

#题引&#xff1a;我认为跟着官方文档学习不会走歪路 Next.js 支持多种为应用程序添加样式的方法&#xff0c;包括&#xff1a; CSS Modules&#xff1a;创建局部作用域的 CSS 类&#xff0c;避免命名冲突并提高可维护性。全局 CSS&#xff1a;使用简单&#xff0c;对于有传统…