咬牙切齿的按钮

2023-11-19

先看效果:
在这里插入图片描述
再看代码(查看更多):

  @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@500&display=swap');

    :root {
      --sz: 9vmin;
      --on: #4CAF50;
      --of: #f50000;
      --gr: #666666;
      --tr: all 0.5s ease 0s;
      --lg: var(--of);
    }

    * {
      box-sizing: border-box;
      transition: var(--tr);
    }

    body {
      margin: 0;
      padding: 0;
      width: 100vw;
      height: 100vh;
      overflow: hidden;
      display: flex;
      align-items: center;
      justify-content: center;
      background: linear-gradient(45deg, #1c2123, #1f2425);
      font-family: 'Roboto', Arial, Helvetica, serif;
    }

    body:before, body:after {
      content: "";
      position: absolute;
      width: 100%;
      height: 100%;
      background:
              repeating-conic-gradient(#0002 0.00005%, #fff0 .0005%, #fff0 .005%, #fff0 .0005%),
              repeating-conic-gradient(#0002 0.00001%, #fff0 .00009%, #fff0 .00075%, #fff0 .000025%);
      opacity: 0.75;
      filter: blur(0.75px);
    }

    .content {
      position: relative;
      width: calc(var(--sz) * 6);
      height: calc(var(--sz) * 2);
      display: flex;
      align-items: center;
      justify-content: center;
    }

    input {
      display: none;
    }

    label[for=btn] {
      position: absolute;
      width: calc(var(--sz) * 6);
      height: calc(var(--sz) * 2);
      background: #616774;
      border-radius: var(--sz);
      box-shadow:
              0 0 calc(var(--sz) / 50) calc(var(--sz) / 50) #0006,
              0 -4px calc(var(--sz) / 10) calc(var(--sz) / 500) #000d,
              0 0px calc(var(--sz) / 10) calc(var(--sz) / 50) #fff8,
              0 -4px calc(var(--sz) / 5) calc(var(--sz) / 50) #000c;
    }

    .track {
      position: absolute;
      width: 100%;
      height: 100%;
      border-radius: var(--sz);
      overflow: hidden;
      background: #191e1e;
      box-shadow: 0 calc(var(--sz) / 3) calc(var(--sz) / 2) 0 #000 inset;
    }

    #btn:checked + label .track:before {
      left: 0%;
    }

    .thumb {
      position: absolute;
      width: calc(calc(var(--sz) * 2) - calc(var(--sz) / 5));
      height: calc(calc(var(--sz) * 2) - calc(var(--sz) / 5));
      top: calc(calc( var(--sz) / 10) + calc(var(--sz) / 200));
      left: calc(calc( var(--sz) / 10) + calc(var(--sz) / 100));
      background: linear-gradient(180deg,  #3f4447, #262727);
      border-radius: var(--sz);
      box-shadow: calc(var(--sz) / -25) calc(var(--sz) / 25) calc(var(--sz) / 30) 0 #fff2 inset, 0 0 calc(var(--sz) / 10) calc(var(--sz) / 50) #000c;
      cursor: pointer;
      display: flex;
      align-items: center;
      justify-content: center;
      z-index: 1;
      overflow: hidden;
      animation: move-thumb 0.5s ease 0s;
    }

    @keyframes move-thumb {
      0% {
        --lg: var(--of);
        left: calc(calc(100% - calc(calc(var(--sz) * 2) - calc(var(--sz) / 3))) - calc(calc( var(--sz) / 10) + calc(var(--sz) / 7)));
      }
      25%, 75% {
        --lg: #999999;
      }
      100% {
        --lg: var(--on);
        left: calc(calc( var(--sz) / 10) + calc(var(--sz) / 100));
      }
    }

    .thumb:before {
      content: "";
      --cl: #2c3133;
      position: absolute;
      background: var(--cl);
      width: calc(var(--sz) / 12);
      height: calc(var(--sz) / 1.35);
      border-radius: var(--sz);
      box-shadow: calc(var(--sz) /5) 0 0 0 var(--cl), calc(var(--sz) / -5) 0 0 0 var(--cl);
      filter: drop-shadow(0px 1px 2px #000) drop-shadow(0px -1px 0px #fff4) blur(0.65px);
    }

    .thumb:after {
      content: "";
      position: absolute;
      background: radial-gradient(circle at 50% 55%, #fff0 calc(var(--sz) / 1.125), var(--lg) calc(var(--sz) / 0.9));
      width: 100%;
      height: 100%;
      border-radius: var(--sz);
      transition: var(--tr);
      transition-property: --lg;
      animation: shine-thumb-off 0.5s ease 0s 1;
      animation-fill-mode: forwards;
    }

    #btn:checked + label .thumb {
      left: calc(calc(100% - calc(calc(var(--sz) * 2) - calc(var(--sz) / 3))) - calc(calc( var(--sz) / 10) + calc(var(--sz) / 7)));

    }

    #btn:checked + label .thumb:after {
      animation: shine-thumb-on 0.5s ease 0s 1;
      animation-fill-mode: forwards;
      transition: var(--tr);
      transition-property: --lg;
    }

    @keyframes shine-thumb-on {
      0% { --lg: var(--of); }
      50% { --lg: var(--gr); }
      100% { --lg: var(--on); }
    }

    @keyframes shine-thumb-off {
      0% { --lg: var(--on); }
      50% { --lg: var(--gr); }
      100% { --lg: var(--of); }
    }

    .track-top, .track-bot  {
      position: absolute;
      width: 120%;
      height: calc(var(--sz) / 2.25);
      left: -10%;
      top: calc(var(--sz) / -2.5);
      transform-origin: 22% 100%;
      transform: rotate(5deg);
      display: flex;
      align-items: center;
      justify-content: space-evenly;
      opacity: 0.85;
      animation: t-top-l 0.5s ease 0s 1 reverse;
      animation-fill-mode: forwards;
    }

    .track span span {
      background:
              linear-gradient(0deg, #fff8, #fff0),
              linear-gradient(180deg, #222, #666);
      width: calc(var(--sz) / 1.6);
      height: calc(var(--sz) / 2);
      display: inline-flex;
      border-radius: 0 0 calc(var(--sz) / 8) calc(var(--sz) / 8);
      box-shadow: 0 0 1px 0 #fff;
    }

    .track-bot span {
      background:
              linear-gradient(180deg, #fff8, #fff0),
              linear-gradient(0deg, #222, #666) !important;
      border-radius: calc(var(--sz) / 8) calc(var(--sz) / 8) 0 0 !important;
    }

    .track-bot {
      left: -10%;
      top: inherit;
      bottom: calc(var(--sz) / -2.25);
      transform-origin: 22% 100%;
      transform: rotate(-5deg);
      animation: t-bot-l 0.5s ease 0s 1 reverse;
      animation-fill-mode: forwards;
    }

    #btn:checked + label .track .track-top {
      animation: t-top-r 0.5s ease 0s 1;
      animation-fill-mode: forwards;
    }

    @keyframes t-top-r {
      0% { transform: rotate(5deg); transform-origin: 22% 100%; }
      50% { transform: rotate(0deg);  transform-origin: 22% 100%; }
      50.01% { transform: rotate(0deg);  transform-origin: 78% 100%; }
      100% { transform: rotate(-5deg);  transform-origin: 78% 100%; }
    }
    @keyframes t-top-l {
      0% { transform: rotate(5deg); transform-origin: 22% 100%; }
      50% { transform: rotate(0deg);  transform-origin: 22% 100%; }
      50.01% { transform: rotate(0deg);  transform-origin: 78% 100%; }
      100% { transform: rotate(-5deg);  transform-origin: 78% 100%; }
    }

    #btn:checked + label .track .track-bot {
      animation: t-bot-r 0.5s ease 0s 1;
      animation-fill-mode: forwards;
    }

    @keyframes t-bot-r {
      0% { transform: rotate(-5deg); transform-origin: 22% 100%; }
      50% { transform: rotate(0deg);  transform-origin: 22% 100%; }
      50.01% { transform: rotate(0deg);  transform-origin: 78% 100%; }
      100% { transform: rotate(5deg);  transform-origin: 78% 100%; }
    }
    @keyframes t-bot-l {
      0% { transform: rotate(-5deg); transform-origin: 22% 100%; }
      50% { transform: rotate(0deg);  transform-origin: 22% 100%; }
      50.01% { transform: rotate(0deg);  transform-origin: 78% 100%; }
      100% { transform: rotate(5deg);  transform-origin: 78% 100%; }
    }


    .lights {
      position: absolute;
      width: 100%;
      height: calc(var(--sz) / 1.75);
      top: calc(var(--sz) * -1.2);
      display: flex;
      justify-content: space-between;
      padding: 0 calc(var(--sz) / 1.5);
      z-index: 1;
    }

    .lights span {
      background: #121212;
      position: relative;
      width: calc(var(--sz) / 1.75);
      height: calc(var(--sz) / 1.75);
      border-radius: var(--sz);
      box-shadow:
              0 0px calc(var(--sz) / 50) calc(var(--sz) / 50) #0008,
              0 -4px calc(var(--sz) / 10) calc(var(--sz) / 500) #000,
              0 2px calc(var(--sz) / 10) calc(var(--sz) / 500) #fff8,
              0 0px calc(var(--sz) / 20) calc(var(--sz) / 25) #000;
      display: flex;
      align-items: center;
      justify-content: center;
    }

    .lights span:before {
      content: "off";
      font-size: calc(var(--sz) / 2.4);
      text-align: center;
      width: 200%;
      position: absolute;
      top: calc(var(--sz) / -1.45);
      left: -50%;
      color: #ffffff3d;
      text-shadow: 0px -2px 2px #0008, 0px 1px 2px #fff4;
      background: -webkit-linear-gradient(#0000003b 25%, var(--lg) 75%);
      -webkit-background-clip: text;
      -webkit-text-fill-color: #71717170;
    }

    .lights span + span:before {
      content: "on";
      --lg: var(--gr);
    }

    .lights span:after {
      content: "";
      color: #fff;
      transition: var(--tr);
      width: calc(100% - calc(var(--sz) / 15));
      height: calc(100% - calc(var(--sz) / 15));
      position: absolute;
      background: radial-gradient(circle at 50% 32%, #fff5 0 calc(var(--sz) / 20), #000 calc(var(--sz) / 3) calc(var(--sz) / 3));
      border-radius: var(--sz);
      box-shadow:
              0 0px calc(var(--sz) / 50) calc(var(--sz) / 50) #0008 inset,
              0 -4px calc(var(--sz) / 10) calc(var(--sz) / 500) #000 inset,
              0 2px calc(var(--sz) / 10) calc(var(--sz) / 500) #fff8 inset,
              0 0px calc(var(--sz) / 20) calc(var(--sz) / 25) #000 inset;
    }


    /* off */
    span.light-off:after {
      box-shadow:
              0 0 calc(var(--sz) / 2.5) 0 var(--lg),
              0 0 calc(var(--sz) / 3) calc(var(--sz) / 20) var(--lg) inset,
              0 calc(var(--sz) / -20) calc(var(--sz) / 10) calc(var(--sz) / 10) #000 inset;
      background: radial-gradient(circle at 50% 32%, #fff 0 calc(var(--sz) / 20), #fff8 calc(var(--sz) / 3) calc(var(--sz) / 3));
    }

    #btn:checked + label + .lights span.light-off:after {
      box-shadow:
              0 0 calc(var(--sz) / 3) 0 #f5000020,
              0 0 calc(var(--sz) / 3) calc(var(--sz) / 20) #f5000020 inset;
      background: radial-gradient(circle at 50% 32%, #fff5 0 calc(var(--sz) / 20), #000 calc(var(--sz) / 3) calc(var(--sz) / 3));
    }


    /* on */
    span.light-on:after {
      box-shadow:
              0 0 calc(var(--sz) / 3) 0 #00f56d20,
              0 0 calc(var(--sz) / 3) calc(var(--sz) / 20) #00f56d20 inset;
    }

    #btn:checked + label + .lights span.light-on:after {
      --lg: var(--on);
      box-shadow:
              0 0 calc(var(--sz) / 2.5) 0 var(--lg),
              0 0 calc(var(--sz) / 3) calc(var(--sz) / 20) var(--lg) inset,
              0 calc(var(--sz) / -20) calc(var(--sz) / 10) calc(var(--sz) / 10) #000 inset;
      background: radial-gradient(circle at 50% 32%, #fff 0 calc(var(--sz) / 20), #fff2 calc(var(--sz) / 3) calc(var(--sz) / 3));
    }

    #btn:checked + label + .lights span.light-on:before {
      --lg: var(--on);
    }

    #btn:checked + label + .lights span.light-off:before {
      --lg: var(--gr);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

咬牙切齿的按钮 的相关文章

  • 更改元素的顺序

    我正在创建一个浮动宽度的网站 用户在智能手机上使用从全高清分辨率到约 600 像素的屏幕 这似乎是一个不错的主意 这就带来了一个非常有趣的问题 当用户使用比最佳分辨率更小的分辨率时 页面的高度会增加很多 这意味着更改某些元素 例如某些图像
  • 如何在 select2 下拉列表中换行?

    我正在使用 select 2 下拉菜单 然后在其内容中显示一些长句子 我想在句子的正确位置添加换行符 但下拉菜单是自动调整的 For example the content of the dropdown right now looks l
  • Safari 中的 css3 边框半径动画过渡不起作用

    尝试在 Safari 中对图像的边框半径进行 css3 轻松过渡 它只是有点闪烁进入悬停状态 而不是平滑过渡 任何帮助深表感谢 我的代码如下 CSS all a hover img webkit border radius 50 moz b
  • 如何在有序列表中组合数字和字母?

    如何在 CSS 中用数字和字母递增有序列表 ol nested margin bottom 0 counter reset item ol nested li display block position relative ol neste
  • jQuery - 如何从 div > p 获取文本

    如何从 div 类中获取主题名称 div class subject img src image eng jpg p English p div div class subject img src image bio jpg p Biolo
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • socket.io 的良好初学者教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • 悬停此元素时隐藏元素后的伪元素

    我的菜单垂直放置在页面左侧和菜单之间 li 我有一个 after那是一个分隔符 我想要的是当我悬停元素本身 如果它是第一个元素 时隐藏 after 元素 或者当它是中间元素时隐藏上面和底部的元素 如果它是最后一个子元素 则隐藏 after前
  • Twitter 卡元标签问题

    有问题的网址 https www halleonard com viewpressreleasedetail action releaseid 10261 https www halleonard com viewpressreleased
  • 响应式图像 - srcset 和尺寸属性 - 如何正确使用两者:基于设备像素比和基于视口的选择一起?

    到目前为止 我经常读到这个问题 并且它也发生在我自己的项目中 这里介绍一下我到目前为止所发现的关于 srcset 和 size 属性的内容 关于如何使用有两种不同的可能性srcset 属性 来源 w3c http w3c github io
  • Angular - CSS - 自定义类型=文件输入,如何使用按钮而不是标签?

    我制作了一个类型为 file 的自定义输入字段 因为我不喜欢默认的输入字段 为了实现这一目标 我做了
  • 为什么 IE8 在我的图像锚标记上添加底部边框?

    我知道 这很可悲 但今天早上 IT 刚刚在我的机器上安装了 IE8 我立刻遇到了一个明显的问题 尽管我知道答案就在我面前 但我已经把它搞砸了太久了 首先 这是网站 www mchenry edu http www mchenry edu 在
  • 为 Angular2 中的组件加载多个样式表

    我正在构建一个 angular2 应用程序 当我尝试为同一组件加载多个样式表时 我面临多个问题 这是我正在做的代码 import Component from angular core Component selector my tag t
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • Firefox 不会在使用 jQuery AJAX 加载的内容上呈现 CSS 样式

    我有一个网站 允许用户对书籍和文章发表评论 主表单有一个搜索输入 用于查找相关书籍或文章 来源 我使用 jQuery 根据输入的搜索词从外部站点动态加载新源 然后还使用 AJAX 返回列表中的源 我有两个问题 现在 在用户输入四个字符后 j
  • 图像背景不透明度不影响边框

    如何设置背景不透明度而不影响边框线不透明度 我找到的解决方案没有帮助 div class selected img src assets img image product 1 thumbnail jpg alt product 1 thu
  • 在 HTML 下拉列表中有一个滚动条

    我正在寻找一种在 HTML 的下拉列表中添加滚动条的方法 这样如果下拉列表包含的内容超过例如 5 项 将出现滚动条以查看其余项 这是因为我将被迫列出一些大清单 过去几个小时我一直在谷歌上搜索它 但没有运气 它需要适用于 IE8 FF 和 C
  • 表格行未扩展到全宽

    我有一个表格 当我将表格的宽度设置为 100 并将表格行的宽度设置为 100 时 没有任何反应或宽度发生变化 Table Normal position relative display block margin 10px auto pad
  • HTML 锚点,禁用样式

    我有一些 html 锚链接代码 与文档的其余部分不同 我希望它看起来不是链接 有没有一种简单的方法可以禁用由于将文本包装在锚标记中而引起的样式更改 而不必强行使其相同 即 如果我更改正文字体样式 我不必也更改其他一些 link东西 将颜色设

随机推荐

  • 开源按键组件Multi_Button的使用,含测试工程

    之前的文章中介绍过按键的处理方法 多功能 单击 双击 长按 按键设计 今天再来分享另外一种方式 MultiButton 1 Multi Button简介 MultiButton 是Github上的一个开源的按键处理组件 作者0x1abin
  • Transmission Control Protocol (TCP)

    TCP协议 Transmission Control Protocol 是在IP协议之上的 确保IP数据包可靠传输的协议 TCP协议拥有一些用于解决基于数据包的问题 例如丢包 包序错乱 重复包及包损坏 由于TCP协议是IP协议之上最常用的协
  • 中国金融科技前沿技术发展趋势及应用场景研究 附下载地址

    国家高度重视金融科技应用对于强化金融监管能力和促进金融转型发展的双重作用 在强化监管方面 以降低合规成本 有效防范金融风险为目标的监管科技 Regtech 正在成为金融科技的重要组成部分 在促进发展方面 金融科技应用能够有效提升金融服务效率
  • 软件设计(十四)-UML建模(上)

    软件设计 十三 原码 反码 补码 移码https blog csdn net ke1ying article details 129115844 spm 1001 2014 3001 5501 UML建模包含 用例图 类图与对象图 顺序图
  • css根据某个角旋转,设置旋转中心点

    前言 css3里面是有动画的属性的 里面有个旋转 那么旋转怎么来根据元素的不同点来旋转呢 这里分享下方法 实现源码 1 旋转的代码 transform rotate 7deg 旋转的兼容性写法 ms transform rotate 7de
  • 【Google测试之道】第三章 测试工程师

  • 手残-网络重置后网络适配器全感叹号且各种方法联网失效的问题解决

    前因 回家过年连接无线网的时候 刚开始连不上网络 莫名其秒的就点开了网络设置 然后重置了网络 真是秀逗了 导致痛苦的开始 重启之后 发现电脑的wifi图标没了 更糟糕的是 打开设备管理器发现网络适配器全是感叹号 驱动没了 即使在这里右键更新
  • 《信号与系统》解读 第1章 信号与系统概述-3:基本的1阶时域信号--单位阶跃信号、单位斜变信号、单位冲击信号

    目录 连续信号 1 单位阶跃信号 2 单位斜变信号 自然界衰变规律之一 3 单位冲击信号 离散信号 4 单位阶跃序列 5 单位采样 连续信号 1 单位阶跃信号 1 定义 t gt 0时 信号的幅度恒等于1 t lt 0时 信号的幅度恒等于0
  • Ubuntu 16.04系统中GCC 9.1编译器安装方法及C++17标准测试示例

    严正声明 本文系作者davidhopper原创 未经许可 不得转载 2019年8月2日更新 本文方法适用于GCC 9 1 0 只需将原文中的GCC 7 3 0替换为GCC 9 1 0即可 为什么要更新到GCC 9 1 0 因为该版本可支持C
  • web3无法在浏览器远程调用miner.start()

    原文 https bitshuo com topic 58841835fd9ca2790427eb67 web3无法在浏览器远程调用miner start 首先我在启动私链时已经调用了miner模块 代码如下 geth identity s
  • PyCharm2019.1.1安装(Ubuntu16.04)

    PyCharm2019 1 1安装 Ubuntu16 04 我们已经在Ubuntu里安装了Python 可以在终端使用Python 也可以用文本编辑器编写代码后然后用Python执行代码 但这些都不是很方便 也不是很智能和不够友好 需要有多
  • 利用Python每日将股票数据进行爬取、并做了一波处理分析

    1 先展示 时间 价格 涨跌幅 2 说明 因为在上班的时候 直接打开交易软件的话 太明显 会让别人看到我在炒股 所以 自己写一个 可以随时查看自己持仓的股票涨跌情况 3 代码 import tushare as ts import time
  • 【问题解决】利用Eclipse,在hadoop上传文件到hdfs没有内容

    本文适用于一些在网上找了半天答案都没解决问题的人群 因为我也是在按网上说道弄了一天 最后才解决的 如果你是刚遇到问题 还没有深入 建议你查看这篇文章 http f dataguru cn hadoop 208802 1 1 html 将问题
  • 创业的真谛是顺势而为,借船过海!

    追寻成功的路上 顺势最易 借势稍难 造势境界最高 创业者 或者创业团队 积极争取优惠政策 打造自身适宜环境 努力营造外在氛围 最大化有效使用身边各种资源 懂得聚合放大 顺势是为了 为 顺势而为 最终是为了顺势大为 一 顺势而为 无论商场战场
  • Python opencv学习-13 直方图反向投影(用于图像分割)

    代码和图片大量参考https blog csdn net tengfei461807914 article details 77075567 自己跑了下验证了下 个人理解 直方图反向投影用来做图像分割 或者说知道了一个目标的图片的一部分 去
  • 利用Redis bitmap签到功能

    1 简介 BitMap 存储的是连续的二进制数字 0 和 1 通过 bitmap 只需要一个 bit 位来表示某个元素对应的值或者状态 key 就是对应元素本身 我们知道 8 个 bit 可以组成一个 Byte 所以bitmap 本身会极大
  • 为什么程序员都喜欢安静?

    大家回顾一下上学期间 你在上晚自习想完成今天老师布置的作业 但是你的班级却非常的吵闹 跟置身在菜市场一样 你能专心完成作业吗 不受周围吵闹环境的影响吗 相信大部分的人都难以静下心来认真完成作业 有时候好不容易想到一个思路 结果旁边的人拍你一
  • Windows系统常用命令

    Windows常用命令 1 echo 用法 输出一个字符到终端 当加上 gt 后就可输出到文本文件 例如 echo 1 在终端显示一个1 echo 20 gt gt 1 txt 在当前目录下的1 txt文件后面追加一行数据值20 如果没有1
  • AT24C02芯片使用介绍

    AT24C02简介 AT24C02是一个2K位串行CMOS E2PROM 内部含有256个8位字节 有一个16字节页写缓冲器 该器件通过IIC总线接口进行操作 有专门的写保护功能 应用于AT24C02制造过程的先进CMOS技术实质上减少了器
  • 咬牙切齿的按钮

    先看效果 再看代码 查看更多 import url https fonts googleapis com css2 family Roboto wght 500 display swap root sz 9vmin on 4CAF50 of