首頁 >web前端 >css教學 >使用新的CSS SIN()和COS()三角函數創建時鐘

使用新的CSS SIN()和COS()三角函數創建時鐘

Jennifer Aniston
Jennifer Aniston原創
2025-03-09 13:01:14853瀏覽

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