CSS新特性:sin()和cos()三角函數創造時鐘效果
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中文網其他相關文章!