您现在的位置是:亿华云 > 人工智能
还在使用定时器吗?有点离谱的 CSS 电子时钟
亿华云2025-10-03 07:02:08【人工智能】9人已围观
简介通常要做一个时钟,肯定离不开 JS 定时器。今天换一种思路,用 CSS 来实现一个时钟,如下: 你也可以访问这个CSS time (codepen.io)[1]查看实际效果。当然借用了一
通常要做一个时钟,还使肯定离不开 JS 定时器。用定有点今天换一种思路,时器用 CSS 来实现一个时钟,离谱如下:
你也可以访问这个CSS time (codepen.io)[1]查看实际效果。还使
当然借用了一点点 JS 用于初始化时间,用定有点整个时钟的时器运行都是由 CSS 完成的,有很多你可能不知道的离谱小技巧,一起看看吧。还使
一、用定有点数字的时器变换
先看看数字是如何变换的。
在以前,离谱如果要实现数字的还使递增变化,可能需要提前准备好这些数字,用定有点例如像这样。时器
然后通过改变位移来实现。
但是,现在有更简洁的方式可以实现了,那就是 CSS @property[2],不了解这个的可以参考这篇文章:CSS @property,源码库让不可能变可能[3]。这是干什么的呢?简单来讲,可以自定义属性,在这个例子中,可以让数字像颜色一样进行过渡和动画,可能不太懂,直接看例子吧。
假设 HTML 是这样的。
我们让这个自定义变量在页面中展示出来,单纯的 content无法直接显示自定义变量,需要借助定时器,有兴趣的可以参考这篇文章:小tips: 如何借助content属性显示CSS var变量值[4]。
span::after{
counter-reset: num var(--num);
content: counter(num);
}
然后,可以通过:hover改变这个数字。
span:hover::after{
--num: 59
}
很生硬的从 0 变成 59 了,非常符合常规。如果利用 CSS property,情况就不一样了,需要改造的地方很少,先定义一下--h,然后给这个变量一个过渡时间,如下:
@property --h {
syntax:
inherits: false;
initial-value: 0;
}
span::after{
transition: 1s --num;
}
神奇的一幕发生了
看着好像不可思议?可以这么理解,云服务器提供商通过@property定义后,这个变量本身可以单独设置过渡了,而不再取决于一些仅支持过渡的属性(color、width等)。甚至还能加上动画,需要用到steps方法,设置动画周期为无限,如下:
@keyframes num {
to {
--num: 10
}
}
span{
animation: num 1s infinite steps(10);
}
时钟的基本运行原理就是这样了,一个无限循环的 CSS 动画!
二、时、分、秒
下面来看具体时、分、秒的实现,HTML 如下:
:
:
给时、分、秒附上初始值。
@property --h {
syntax:
inherits: false;
initial-value: 0;
}
@property --m {
syntax:
inherits: false;
initial-value: 0;
}
@property --s {
syntax:
inherits: false;
initial-value: 0;
}
.hour::after{
counter-reset: hour var(--h);
content: counter(hour);
}
.minitus::after{
counter-reset: minitus var(--m);
content: counter(minitus);
}
.seconds::after{
counter-reset: seconds var(--s);
content: counter(seconds);
}
这里的时、分、秒并没有联动关系,所以各自都需要单独的动画。下面就需要思考一下
很赞哦!(4)