首页 > web前端 > css教程 > 使用新的CSS SIN()和COS()三角函数创建时钟

使用新的CSS SIN()和COS()三角函数创建时钟

Jennifer Aniston
发布: 2025-03-09 13:01:14
原创
848 人浏览过

CSS新特性:sin()和cos()三角函数创造时钟效果

Creating a Clock with the New CSS sin() and cos() Trigonometry Functions

Firefox和Safari最新版本已支持CSS三角函数!这为CSS带来了强大的数学运算能力,拓展了无限可能。本教程将重点介绍sin()和cos()函数,并以此创建一个时钟。虽然tan()等其他三角函数也即将推出,但sin()和cos()函数非常适合实现沿圆周排列文本的目标,这在六年前Chris在CSS-Tricks上使用Sass mixin实现过,现在让我们用最新的技术重新实现它。

目标效果(目前仅Firefox和Safari支持):

我们将文本字符沿圆周排列,形成钟面。初始HTML结构如下:

<div class="clock">
  <div class="clock-face">
    <time datetime="12:00">12</time><time datetime="1:00">1</time><time datetime="2:00">2</time><time datetime="3:00">3</time><time datetime="4:00">4</time><time datetime="5:00">5</time><time datetime="6:00">6</time><time datetime="7:00">7</time><time datetime="8:00">8</time><time datetime="9:00">9</time><time datetime="10:00">10</time><time datetime="11:00">11</time>
  </div>
</div>
登录后复制

接下来,为.clock容器添加基本样式,使用<time></time>标签并添加datetime属性:

.clock {
  --_ow: clamp(5rem, 60vw, 40rem);
  --_w: 88cqi;
  aspect-ratio: 1;
  background-color: tomato;
  border-radius: 50%;
  container-type: inline;
  display: grid;
  height: var(--_ow);
  place-content: center;
  position: relative;
  width: var(--_ow);
}
登录后复制

这只是为了创建基本形状和背景颜色,方便观察效果。注意,我们将宽度值存储在CSS变量中,稍后会用到。

现在,添加一个变量--_r来存储圆的半径,它等于圆的宽度的一半,使用calc()函数实现:

.clock {
  --_w: 300px;
  --_r: calc(var(--_w) / 2);
  /* rest of styles */
}
登录后复制

数学计算:圆周是360度,时钟有12个数字,每个数字间隔30度(360 / 12)。数学上,圆从3点钟开始,所以12点实际上是-90度,也就是270度(360 - 90)。

添加变量--_d设置每个数字的度数值,以30度递增:

.clock time:nth-child(1) { --_d: 270deg; }
.clock time:nth-child(2) { --_d: 300deg; }
.clock time:nth-child(3) { --_d: 330deg; }
/* ... rest of the numbers ... */
登录后复制

现在,使用sin()和cos()函数计算每个数字的X和Y坐标:

X坐标公式:半径 (半径 * cos(度数))

--_x: calc(var(--_r) + (var(--_r) * cos(var(--_d))));
登录后复制

Y坐标公式:半径 (半径 * sin(度数))

--_y: calc(var(--_r) + (var(--_r) * sin(var(--_d))));
登录后复制

为数字添加基本样式,使其绝对定位并使用计算出的坐标:

.clock-face time {
  --_x: calc(var(--_r) + (var(--_r) * cos(var(--_d))));
  --_y: calc(var(--_r) + (var(--_r) * sin(var(--_d))));
  --_sz: 12cqi;
  display: grid;
  height: var(--_sz);
  left: var(--_x);
  place-content: center;
  position: absolute;
  top: var(--_y);
  width: var(--_sz);
}
登录后复制

为了更精确地定位,在计算半径时,需要减去数字的大小:

--_r: calc((var(--_w) - var(--_sz)) / 2);
登录后复制

更改颜色,使其更美观。

接下来,添加时针、分针和秒针:

添加HTML结构:

<div class="arm hours"></div>
<div class="arm minutes"></div>
<div class="arm seconds"></div>
登录后复制

添加样式:

.arm {
  /* ... styles ... */
}

.seconds { /* ... styles ... */ }
.minutes { /* ... styles ... */ }
.hours { /* ... styles ... */ }

@keyframes turn { /* ... animation ... */ }
登录后复制

最后,使用JavaScript设置当前时间:

// ... JavaScript code to set initial time ...
登录后复制

添加浏览器兼容性处理:

@supports not (left: calc(1px * cos(45deg))) {
  /* fallback styles */
}
登录后复制

最终效果:一个完整的CSS时钟!目前仅支持Firefox和Safari浏览器。

此外,还可以将时钟改造成圆形图片库或其他创意图案。

以上是使用新的CSS SIN()和COS()三角函数创建时钟的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板