纯CSS实现计时器

 跟b站 @小k师兄学习一手CSS的计时器

1. 基本样式

注意,这里开始按钮使用伪类进行标签名字的设定,因为开始按钮点击以后有一个暂停的功能,就先不写死了。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      html,
      body {
        margin: 0;
        height: 100%;
        display: flex;
        justify-content: center;
        flex-direction: column;
        gap: 15px;
        align-items: center;
        background: aliceblue;
      }
      .counter {
        display: grid;
        gap: 10px;
        grid-template-areas: "clock clock" "start reset";
      }
      .clock {
        grid-area: clock;
        text-align: center;
        font-size: 60px;
        padding: 0.2em 0.5em;
        border: 5px solid rgba(255, 255, 255, 0.3);
        border-radius: 10px;
        font-family: monospace;
        background-color: #3a3a3a;
        color: #fff;
      }
      .btn {
        text-align: center;
        padding: 0.5em;
        font-size: 24px;
        background-color: chocolate;
        color: #fff;
        grid-area: start;
        user-select: none;
        cursor: pointer;
        transition: 0.2s;
        border-radius: 5px;
      }
      .btn:hover {
        filter: brightness(1, 1);
      }
      .reset {
        grid-area: reset;
        background-color: #f44336;
        border-radius: 5px;
      }
      .start::before {
        content: "开始";
      }
    </style>
  </head>
  <body>
    <h1>计时器</h1>
    <div class="counter">
      <input type="checkbox" id="start" hidden />
      <label class="btn start" for="start"></label>
      <label class="btn reset">重置</label>
      <div class="clock"></div>
    </div>
  </body>
</html>

自定义属性显示时间

我们使用property属性创造三个数字,在时间样式里面使用counter-reset方法可以重置/创建计数器,配合伪元素显示。

此属性存在兼容性问题,但是已经兼容了很多主流的浏览器了。 

    <style>
      html,
      body {
        margin: 0;
        height: 100%;
        display: flex;
        justify-content: center;
        flex-direction: column;
        gap: 15px;
        align-items: center;
        background: aliceblue;
      }
      /* 存在兼容性问题 */
      @property --m{
        /* 类型 */
        syntax: '<integer>';
        /* 可继承 */
        inherits: 0;
        /* 默认值 */
        initial-value: 0;
      }
      @property --s{
        /* 类型 */
        syntax: '<integer>';
        /* 可继承 */
        inherits: 0;
        /* 默认值 */
        initial-value: 0;
      }
      @property --ms{
        /* 类型 */
        syntax: '<integer>';
        /* 可继承 */
        inherits: 0;
        /* 默认值 */
        initial-value: 0;
      }
      .counter {
        display: grid;
        gap: 10px;
        grid-template-areas: "clock clock" "start reset";
      }
      .clock {
        grid-area: clock;
        text-align: center;
        font-size: 60px;
        padding: 0.2em 0.5em;
        border: 5px solid rgba(255, 255, 255, 0.3);
        border-radius: 10px;
        font-family: monospace;
        background-color: #3a3a3a;
        color: #fff;
        /* 使用 */
        counter-set: minitus var(--m) seconds var(--s) ms var(--ms);
      }
      .clock::before{
        content:counter(minitus) ':' counter(seconds) ':' counter(ms);
      }
      .btn {
        text-align: center;
        padding: 0.5em;
        font-size: 24px;
        background-color: chocolate;
        color: #fff;
        grid-area: start;
        user-select: none;
        cursor: pointer;
        transition: 0.2s;
        border-radius: 5px;
      }
      .btn:hover {
        filter: brightness(1, 1);
      }
      .reset {
        grid-area: reset;
        background-color: #f44336;
        border-radius: 5px;
      }
      .start::before {
        content: "开始";
      }
    </style>

计时器的效果

我们使用动画效果实现定时器的初步效果,使用decimal-leading-zero配合counter使用达到个位数前面补0的效果。

    <style>
      html,
      body {
        margin: 0;
        height: 100%;
        display: flex;
        justify-content: center;
        flex-direction: column;
        gap: 15px;
        align-items: center;
        background: aliceblue;
      }
      /* 存在兼容性问题 */
      @property --m {
        /* 类型 */
        syntax: "<integer>";
        /* 可继承 */
        inherits: false;
        /* 默认值 */
        initial-value: 0;
      }
      @property --s {
        /* 类型 */
        syntax: "<integer>";
        /* 可继承 */
        inherits: false;
        /* 默认值 */
        initial-value: 0;
      }
      @property --ms {
        /* 类型 */
        syntax: "<integer>";
        /* 可继承 */
        inherits: false;
        /* 默认值 */
        initial-value: 0;
      }
      .counter {
        display: grid;
        gap: 10px;
        grid-template-areas: "clock clock" "start reset";
      }
      .clock {
        grid-area: clock;
        text-align: center;
        font-size: 60px;
        padding: 0.2em 0.5em;
        border: 5px solid rgba(255, 255, 255, 0.3);
        border-radius: 10px;
        font-family: monospace;
        background-color: #3a3a3a;
        color: #fff;
        /* 重置/创建计数器 */
        counter-reset: minitus var(--m) seconds var(--s) ms var(--ms);
        animation: minitus 3600s steps(60, end) infinite,
          seconds 60s steps(60, end) infinite, ms 1s steps(100, end) infinite;
      }
      @keyframes minitus {
        to {
          --m: 59;
        }
      }
      @keyframes seconds {
        to {
          --s: 59;
        }
      }
      @keyframes ms {
        to {
          --ms: 100;
        }
      }

      .clock::before {
        content: counter(minitus, decimal-leading-zero) ":"
          counter(seconds, decimal-leading-zero) ":"
          counter(ms, decimal-leading-zero);
      }
      .btn {
        text-align: center;
        padding: 0.5em;
        font-size: 24px;
        background-color: chocolate;
        color: #fff;
        grid-area: start;
        user-select: none;
        cursor: pointer;
        transition: 0.2s;
        border-radius: 5px;
      }
      .btn:hover {
        filter: brightness(1, 1);
      }
      .reset {
        grid-area: reset;
        background-color: #f44336;
        border-radius: 5px;
      }
      .start::before {
        content: "开始";
      }
    </style>

开始、暂停、重置按钮的实现

我们使用动画里面的属性来控制按钮的暂停和开始事件,并且把最开始设置为停止状态。

    <style>
      html,
      body {
        margin: 0;
        height: 100%;
        display: flex;
        justify-content: center;
        flex-direction: column;
        gap: 15px;
        align-items: center;
        background: aliceblue;
      }
      /* 存在兼容性问题 */
      @property --m {
        /* 类型 */
        syntax: "<integer>";
        /* 可继承 */
        inherits: false;
        /* 默认值 */
        initial-value: 0;
      }
      @property --s {
        /* 类型 */
        syntax: "<integer>";
        /* 可继承 */
        inherits: false;
        /* 默认值 */
        initial-value: 0;
      }
      @property --ms {
        /* 类型 */
        syntax: "<integer>";
        /* 可继承 */
        inherits: false;
        /* 默认值 */
        initial-value: 0;
      }
      .counter {
        display: grid;
        gap: 10px;
        grid-template-areas: "clock clock" "start reset";
      }
      .clock {
        grid-area: clock;
        text-align: center;
        font-size: 60px;
        padding: 0.2em 0.5em;
        border: 5px solid rgba(255, 255, 255, 0.3);
        border-radius: 10px;
        font-family: monospace;
        background-color: #3a3a3a;
        color: #fff;
        /* 重置/创建计数器 */
        counter-reset: minitus var(--m) seconds var(--s) ms var(--ms);
        animation: minitus 3600s steps(60, end) infinite,
          seconds 60s steps(60, end) infinite, ms 1s steps(100, end) infinite;
          animation-play-state: paused;
      }
      @keyframes minitus {
        to {
          --m: 59;
        }
      }
      @keyframes seconds {
        to {
          --s: 59;
        }
      }
      @keyframes ms {
        to {
          --ms: 100;
        }
      }

      .clock::before {
        content: counter(minitus, decimal-leading-zero) ":"
          counter(seconds, decimal-leading-zero) ":"
          counter(ms, decimal-leading-zero);
      }
      .btn {
        text-align: center;
        padding: 0.5em;
        font-size: 24px;
        background-color: chocolate;
        color: #fff;
        grid-area: start;
        user-select: none;
        cursor: pointer;
        transition: 0.2s;
        border-radius: 5px;
      }
      .btn:hover {
        filter: brightness(1, 1);
      }
      .reset {
        grid-area: reset;
        background-color: #f44336;
        border-radius: 5px;
      }
      .start::before {
        content: "开始";
      }
      :checked ~ .clock {
        animation-play-state: running;
      }
      :checked ~ .start::before {
        content: "暂停";
      }
      :checked ~ .reset {
        pointer-events: none;
        opacity: 0.65;
      }
      .reset:active + .clock {
        animation: none;
      }
    </style>

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

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

相关文章

2024年CSC国际区域问题研究及外语高层次人才培养项目介绍

国家留学基金委&#xff08;CSC&#xff09;公布了2024年国际区域问题研究及外语高层次人才培养项目&#xff0c;申报时间均为3月中下旬。为帮助关注者了解项目申报情况&#xff0c;知识人网小编特整理本文。 近日&#xff0c;国家留学基金委&#xff08;CSC&#xff09;公布了…

在Linux上优化HTTP服务器的性能

在Linux上优化HTTP服务器的性能是一个涉及多个方面的任务&#xff0c;包括服务器硬件、网络设置、软件配置和内容优化。以下是一些关键的优化建议&#xff1a; 选择合适的HTTP服务器软件 Linux上有多种HTTP服务器软件&#xff0c;如Apache、Nginx、Lighttpd等。选择适合您需求…

stm32项目(11)——基于stm32的俄罗斯方块游戏机

1.功能设计 使用stm32f103zet6平台&#xff0c;以及一块LCD屏幕&#xff0c;实现了一个俄罗斯方块游戏机。可以用按键调整方块的位置、还可以控制方块下降的速度&#xff01; 2.视频演示 俄罗斯方块 3.俄罗斯方块发展史 俄罗斯方块是一种经典的拼图游戏&#xff0c;由苏联俄罗…

VMware虚拟机搭建+云平台购买搭建(阿里云+UCloud)【设置主机名以及主机名映射、配置免密登录、配置JDK】

本地虚拟机的搭建 一、准备网段 在VMware的虚拟网络编辑器中将VMnet8虚拟网卡的 网段设置为&#xff1a;192.168.88.0网关设置为&#xff1a;192.168.88.2 二、下载CentOS操作系统文件&#xff0c;并安装 三、克隆多台虚拟机 依照同样的方法&#xff0c;克隆出node2…

HashMap相关专题

前置知识&#xff1a;异或运算 异或运算介绍 异或有什么神奇之处&#xff08;应用&#xff09;&#xff1f; &#xff08;1&#xff09;快速比较两个值 &#xff08;2&#xff09;我们可以使用异或来使某些特定的位翻转&#xff0c;因为不管是0或者是1与1做异或将得到原值的相…

3.4 路由器的DHCP配置

实验3.4 路由器的DHCP配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施&#xff08;一&#xff09;配置基于接口地址池的DHCP1.交换机的基本配置2.路由器的基本配置3.开启路由器的DHCP服务器功能4.配置路由器接口的DHCP功能5.设置计算机使用DHCP方式获取IP地…

【漏洞复现】狮子鱼任意文件上传漏洞

漏洞描述 狮子鱼CMS(Content Management System)是一种网站管理系统,旨在帮助用户更轻松地创建和管理网站。它具有用户友好的界面和丰富的功能,包括页面管理、博客、新闻、产品展示等。 狮子鱼CMS使用简单直观的管理界面,使得网站所有者可以方便地进行内容的发布、管理和…

手机怎么录屏?实用技巧,轻松录制!

手机录屏功能在现代通信和创作中扮演着重要的角色。无论是分享游戏过程、演示手机操作&#xff0c;还是创作教程视频&#xff0c;手机录屏成为了用户不可或缺的工具。本文将深入研究手机怎么录屏的三种方法&#xff0c;通过详细的步骤介绍&#xff0c;帮助用户轻松掌握手机录屏…

基于BEV+Transformer的地面要素感知+建模技术在高德的应用

导读 本文将主要介绍BEVTransformer端到端感知与建模技术在高德各项业务中的应用&#xff0c;如高精地图中地面要素&#xff08;包含线要素和地面标识&#xff09;自动化上的具体方案及其演化过程。该方案使用BEVTransformer技术来实现采集车上不同传感器&#xff08;包含激光和…

Linux环境搭建SVN服务器并结合内网穿透实现远程访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. Ubuntu安装SVN服务二. 修改配置文件2.1 修改svnserve.conf文件2.2 修改pass…

​HTML代码混淆技术:原理、应用和实现方法详解

​HTML代码混淆技术&#xff1a;原理、应用和实现方法详解 HTML代码混淆是一种常用的反爬虫技术&#xff0c;它可以有效地防止爬虫对网站数据的抓取。本文将详细介绍HTML代码混淆技术的原理、应用以及实现方法&#xff0c;帮助大家更好地了解和运用这一技术。 一、HTML代码混淆…

2024年终工作总结汇报,这样来写更科学

时光荏苒&#xff0c;2024年已经悄然而至&#xff0c;伴随而来的是一年一度的终年工作总结&#xff0c;以回首过去的一年的成果与不足。然而&#xff0c;怎样写一份既真实又有说服力的总结汇报成了摆在很多人面前的一道难题。 在为年终总结苦恼时&#xff0c;我突然想到了平时…

如何用好金鸣表格文字识别电脑客户端的“图片编辑”功能?

想要让文字识别效果更上一层楼&#xff0c;图片编辑处理少不了&#xff0c;今天就来教大家如何运用金鸣表格文字识别电脑客户端编辑器提升图片质量。 首先&#xff0c;点击顶部导航菜单中的“软件下载”&#xff0c;下载安装金鸣表格文字识别电脑客户端&#xff0c;并将图片添加…

KubeKey 升级 KubeSphere 和 Kubernetes 补丁版本实战指南

作者&#xff1a;运维有术 前言 知识点 定级&#xff1a;入门级KubeKey 如何升级 KubeSphere 补丁版本KubeKey 如何升级 Kubernetes 补丁版本KubeSphere 和 Kubernetes 升级准备及验证KubeKey 升级 KubeSphere 和 Kubernetes 的常见问题 实战服务器配置 (架构 1:1 复刻小规…

从0到1构建智能分布式大数据爬虫系统

文章目录 1. 写在前面2. 数据获取挑战3. 基础架构4. 爬取管理5. 数据采集6. 增量与去重设计 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐…

更改 Mac 所使用网络服务的顺序

如果以多种不同的方式&#xff08;例如使用 Wi-Fi 或以太网&#xff09;接入互联网或网络&#xff0c;你可以更改连接时电脑所尝试的网络连接顺序。 如果有多个活跃的连接&#xff0c;电脑会首先尝试列表顶部的连接&#xff0c;然后按降序尝试其他连接。 你不能更改虚拟专用网…

剪刀石头布游戏

csdn问答社区的一道题目&#xff0c;题目描述都像一篇论文了&#xff0c;界面设置不敢恭维&#xff0c;不过也算是可练手工程。 (笔记模板由python脚本于2023年12月05日 22:15:03创建&#xff0c;本篇笔记适合熟悉Python字典、列表、字符串的coder翻阅) 【学习的细节是欢悦的历…

Kafka中的Topic

在Kafka中&#xff0c;Topic是消息的逻辑容器&#xff0c;用于组织和分类消息。本文将深入探讨Kafka Topic的各个方面&#xff0c;包括创建、配置、生产者和消费者&#xff0c;以及一些实际应用中的示例代码。 1. 介绍 在Kafka中&#xff0c;Topic是消息的逻辑通道&#xff0…

c++函数模板STL详解

函数模板 函数模板语法 所谓函数模板&#xff0c;实际上是建立一个通用函数&#xff0c;其函数类型和形参类型不具体指定&#xff0c;用一个虚拟的类型来代表。这个通用函数就称为函数模板。 凡是函数体相同的函数都可以用这个模板来代替&#xff0c;不必定义多个函数&#xf…

全面解决Error: Uncaught SyntaxError: Invalid Unicode escape sequence

是因为.js文件中的路径转义&#xff08;\&#xff09;错误&#xff0c;可能是windows内的相对路径放到linux中有问题 直接看图&#xff1a; (上面是修改后的&#xff0c;下面的则是原来的) 解决方式&#xff1a; 先在报错浏览器按f12打开调试&#xff0c;选择console窗口查看…
最新文章