CSS - 數學函數:初學者指南

您好,未來的 CSS 巔峰大師!今天,我們將踏上一段令人興奮的旅程,探索 CSS 數學函數的世界。別擔心如果您之前從未寫過一行代碼——我將成為您的友好導遊,我們會一步一步地學習。到了這個教學的結尾,您將會對僅僅使用 CSS 中的幾個數學技巧能夠做到的事情感到驚奇!

CSS - Math Functions

基礎算術函數

我們從基礎開始。CSS 提供了一些簡單的算術函數,這些函數在設計網頁時可以讓我們的生活變得更加輕鬆。這些函數讓我們可以直接在 CSS 代碼中進行計算。

calc() 函數

calc() 函數是 CSS 數學中的瑞士軍刀。它允許您直接在 CSS 中進行基本的算術運算。我們來看一個例子:

.box {
width: calc(100% - 20px);
}

在這個例子中,我們將具有類別 "box" 的元素的寬度設置為其父元素寬度的 100%,減去 20 像素。當您想要創建能夠適應不同屏幕尺寸的響應式佈局時,這非常有用。

讓我們分解一下:

  • 100% 代表父元素的完整寬度。
  • -20px 從這個寬度中減去 20 像素。
  • calc() 函數為我們執行這個計算。

您可以在 calc() 中使用所有四個基本算術運算:加法 (+)、減法 (-)、乘法 (*) 和除法 (/)。這裡有另一個例子:

.column {
width: calc(33.33% - 10px);
margin-right: calc(10px * 2);
}

在這個案例中,我們正在創建一個三列佈局。每個列佔據三分之一寬度(33.33%)減去 10 像素的間距,並且我們添加了一個右邊距,其大小是間距的兩倍。

比較函數

現在我們已經掌握了基礎知識,讓我們來學習一些比較函數。這些函數對於創建有條件適應不同情況的響應式設計非常有用。

min() 函數

min() 函數返回一組值中最小的值。它非常適合用於設置元素大小的最大限制。例如:

.responsive-text {
font-size: min(5vw, 30px);
}

這將設置字體大小為視口寬度的 5%,但從不會超過 30 像素。這是一種很好的方法,可以讓文字響應式而不會在大屏幕上變得過大。

max() 函數

正如您可能猜到的,max() 函數的作用與 min() 相反。它返回一組值中最大的值。這是您可能使用它的方法:

.responsive-image {
width: max(300px, 50%);
}

這保證了即使容器的 50% 小於 300 像素,圖像的寬度也始終至少為 300 像素。

clamp() 函數

clamp() 函數就像是 min()max() 的組合。它接受三個值:最小值、偏好值和最大值。這是一個例子:

.responsive-element {
width: clamp(200px, 50%, 500px);
}

這將寬度設置為容器的 50%,但確保它從不會小於 200px 或大於 500px。

高級 CSS 數學函數

現在我們已經介紹了基礎知識,讓我們深入一些更高级的函數,這些函數可以真正將您的 CSS 技能提升到下一个水平。

abs() 函數

abs() 函數返回一個數字的絕對值。這在動畫中非常有用,或者當您想要確保一個值始終為正時。這是一個例子:

.box {
transform: translateX(abs(var(--x)));
}

這會根據 --x 自定義屬性的值水平移動盒子,始終朝正方向,無論 --x 是正還是負。

round() 函數

round() 函數將一個數字四捨五入到最接近的整數。這對於將值固定到網格非常有用。例如:

.grid-item {
width: calc(round(100% / 3));
}

這將創建一個三列佈局,其中每個列的寬度四捨五入到最接近的整數百分比。

遞增價值函數

遞增價值函數讓您可以創建在離散步驟中變化的值,而不是平滑變化。這些可以非常好用於創建有趣的視覺效果。

mod() 函數

mod() 函數返回除法後的餘數。這可以用於創造重複的圖案。這是一個例子:

.striped-background {
background-color: hsl(0, 0%, mod(var(--i) * 10, 100)%);
}

這會創造一個條紋背景,其中每條紋的亮度由其索引(--i)決定,每 10 條紋重複一次。

三角函數

最後但同樣重要的是,讓我們來了解一下一些三角函數。這些函數對於創建复杂的動畫和佈局非常有力。

sin()cos() 函數

sin()cos() 函數分別返回角度的正弦和餘弦值。這些通常用於動畫中。這是一個簡單的例子:

@keyframes orbit {
from {
transform: rotate(0deg) translateX(100px) rotate(0deg);
}
to {
transform: rotate(360deg) translateX(100px) rotate(-360deg);
}
}

.orbiting-element {
animation: orbit 5s linear infinite;
}

這創造了一個運行的動畫,其中元素圍繞一個中心點移動。

函數參考表

這裡是一個我們所介紹的所有 CSS 數學函數的快速參考表:

函數 描述 示例
calc() 執行基本的算術運算 calc(100% - 20px)
min() 返回最小的值 min(5vw, 30px)
max() 返回最大的值 max(300px, 50%)
clamp() 在最小值和最大值之間固定一個值 clamp(200px, 50%, 500px)
abs() 返回絕對值 abs(var(--x))
round() 四捨五入到最接近的整數 round(100% / 3)
mod() 返回除法後的餘數 mod(var(--i) * 10, 100)
sin() 返回角度的正弦值 sin(45deg)
cos() 返回角度的餘弦值 cos(45deg)

就这样!我們已經介紹了很多內容,從基本的算術到高级的三角函數。記住,掌握這些的關鍵是練習。嘗試將它們整合到您的 CSS 中,嘗試不同的組合,很快您就能夠輕鬆地創建出令人驚艷的響應式設計。開心地編程!

Credits: Image by storyset