為什麼前端開發者需要 CSS 工具?
CSS 是網頁視覺呈現的基礎,但手寫 CSS 屬性值往往是低效且容易出錯的。一個漸層需要在腦中想像顏色過渡、一個陰影需要反覆調整四個參數的數值、一個顏色轉換需要在 HEX 和 RGB 之間來回換算——這些都是工具能大幅加速的工作。
好的 CSS 工具不只是幫你「產生程式碼」,更重要的是提供即時預覽,讓你可以視覺化地調整效果,直到滿意為止再複製程式碼。本文將介紹前端開發中最常用的 CSS 工具類型,搭配實際應用技巧。
CSS 陰影(Box Shadow)
box-shadow 語法解析
box-shadow: [inset] <offset-x> <offset-y> <blur-radius> <spread-radius> <color>;
| 參數 | 說明 | 範例值 |
|---|---|---|
| inset | 內陰影(選填) | inset |
| offset-x | 水平偏移 | 4px |
| offset-y | 垂直偏移 | 4px |
| blur-radius | 模糊半徑 | 10px |
| spread-radius | 擴散半徑 | 0px |
| color | 陰影顏色 | rgba(0,0,0,0.2) |
常見陰影效果
Material Design 風格陰影(分層陰影):
/* 層次 1:輕微浮起 */
.card-1 {
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
}
/* 層次 3:明顯浮起 */
.card-3 {
box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23);
}
/* 層次 5:最高浮起 */
.card-5 {
box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22);
}
關鍵技巧是使用兩層陰影——第一層處理大範圍的柔和陰影,第二層處理靠近元素的銳利陰影。這樣比單層陰影看起來更自然。
Neumorphism 新擬態陰影:
.neumorphic {
background: #e0e0e0;
border-radius: 20px;
box-shadow: 8px 8px 16px #bebebe, -8px -8px 16px #ffffff;
}
新擬態使用一亮一暗的雙向陰影,營造出元素從背景「凸出」的效果。
Glassmorphism 玻璃態:
.glass {
background: rgba(255, 255, 255, 0.15);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
}
陰影的效能考量
box-shadow 會觸發瀏覽器的繪製(Paint)操作。大量元素使用複雜陰影(特別是大模糊半徑)可能影響捲動效能。優化建議:
- 避免在頻繁重繪的元素上使用陰影動畫
- 使用
will-change: box-shadow提示瀏覽器預先優化 - 考慮用偽元素 +
filter: blur()替代,可以觸發 GPU 加速
CSS 漸層(Gradient)
線性漸層(Linear Gradient)
/* 基本語法 */
background: linear-gradient(direction, color-stop1, color-stop2, ...);
/* 從上到下 */
background: linear-gradient(to bottom, #667eea, #764ba2);
/* 對角線 */
background: linear-gradient(135deg, #f093fb, #f5576c);
/* 多色帶位置控制 */
background: linear-gradient(90deg, #00c6ff 0%, #0072ff 50%, #00c6ff 100%);
角度的方向:0deg = 從下到上、90deg = 從左到右、180deg = 從上到下。
如果你想找漸層配色靈感,可以參考我們之前的文章CSS 漸層設計指南,裡面有更多範例和設計原則。
放射漸層(Radial Gradient)
/* 圓形放射 */
background: radial-gradient(circle, #ff9a9e, #fecfef);
/* 橢圓形放射 */
background: radial-gradient(ellipse at top left, #a18cd1, #fbc2eb);
/* 指定大小 */
background: radial-gradient(circle 200px at center, #667eea, transparent);
放射漸層適合用於:聚光燈效果、按鈕的亮點、背景的光暈效果。
錐形漸層(Conic Gradient)
/* 色輪 */
background: conic-gradient(red, yellow, lime, aqua, blue, magenta, red);
/* 圓餅圖 */
background: conic-gradient(
#ff6b6b 0% 30%,
#4ecdc4 30% 55%,
#45b7d1 55% 80%,
#96ceb4 80% 100%
);
border-radius: 50%;
錐形漸層是製作 CSS 圓餅圖和儀表板的利器,不需要 SVG 或 Canvas。
漸層文字
.gradient-text {
background: linear-gradient(135deg, #667eea, #764ba2);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
使用我們的色彩選擇器來挑選漸層的起止顏色。
色碼系統與轉換
HEX(十六進位)
#RRGGBB 或 #RGB(簡寫)
#FF5733 = R:255, G:87, B:51
#F53 = #FF5533
#RRGGBBAA(含透明度)
#FF573380 = 50% 透明度
HEX 是網頁開發中最常見的色碼格式,簡潔且易於複製。
RGB / RGBA
color: rgb(255, 87, 51);
color: rgba(255, 87, 51, 0.5); /* 50% 透明 */
/* 現代語法(CSS Color Level 4) */
color: rgb(255 87 51);
color: rgb(255 87 51 / 50%);
RGB 直覺地描述紅綠藍三原色的混合比例,每個通道 0-255。
HSL / HSLA
color: hsl(14, 100%, 60%);
color: hsla(14, 100%, 60%, 0.5);
/* H: Hue 色相 (0-360°)
S: Saturation 飽和度 (0-100%)
L: Lightness 明度 (0-100%) */
HSL 是設計師最愛的色碼系統,因為它的參數直覺對應人對顏色的感知:
- 調整色相(H):改變顏色種類(紅→橙→黃→綠...)
- 調整飽和度(S):鮮豔 vs 灰暗
- 調整明度(L):亮 vs 暗
色碼轉換的實用場景
場景一:設計師給 HEX,需要加透明度
設計稿上的顏色是 #3B82F6,你需要一個 30% 透明度的版本:
- 轉成 RGBA:rgba(59, 130, 246, 0.3)
場景二:建立色彩系統
從一個基準色 hsl(220, 90%, 56%) 衍生出整套色階:
- 最亮:hsl(220, 90%, 95%)
- 較亮:hsl(220, 90%, 80%)
- 基準:hsl(220, 90%, 56%)
- 較暗:hsl(220, 90%, 40%)
- 最暗:hsl(220, 90%, 20%)
只調整 L 值就能產生一致的色階——這就是 HSL 的優勢。
使用我們的色碼轉換工具可以即時在 HEX、RGB、HSL 之間互轉。更多色彩理論可以參考色彩理論與網頁設計。
CSS 單位選擇指南
前端開發中,選擇正確的 CSS 單位對響應式設計至關重要。
絕對單位 vs 相對單位
| 單位 | 類型 | 說明 | 適用場景 |
|---|---|---|---|
| px | 絕對 | 像素 | 邊框、陰影、精確定位 |
| rem | 相對 | 相對於根元素字體大小 | 字體大小、間距、整體縮放 |
| em | 相對 | 相對於父元素字體大小 | 元件內部間距 |
| % | 相對 | 相對於父元素 | 寬度、padding |
| vw/vh | 相對 | 視窗寬度/高度 | 全螢幕區塊、響應式字體 |
| ch | 相對 | 字元 "0" 的寬度 | 文字容器最大寬度 |
實用建議
/* 使用 rem 設定字體(便於全站縮放) */
html { font-size: 16px; }
h1 { font-size: 2rem; } /* 32px */
body { font-size: 1rem; } /* 16px */
small { font-size: 0.875rem; } /* 14px */
/* 使用 rem 設定間距 */
.card { padding: 1.5rem; margin-bottom: 2rem; }
/* 使用 px 設定邊框和陰影(不需要隨字體大小變化) */
.card { border: 1px solid #e5e7eb; box-shadow: 0 4px 6px rgba(0,0,0,0.1); }
/* 使用 % 設定容器寬度 */
.container { width: 90%; max-width: 1200px; margin: 0 auto; }
/* 使用 vw 設定響應式字體大小 */
.hero-title { font-size: clamp(2rem, 5vw, 4rem); }
/* 使用 ch 設定閱讀最佳寬度 */
.article { max-width: 65ch; }
使用我們的 CSS 單位轉換工具可以在不同單位之間快速換算。
現代 CSS 實用新特性
CSS 變數(Custom Properties)
:root {
--primary: #3B82F6;
--primary-light: #93C5FD;
--primary-dark: #1D4ED8;
--radius: 8px;
--shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.button {
background: var(--primary);
border-radius: var(--radius);
box-shadow: var(--shadow);
}
/* 深色模式只需覆蓋變數 */
@media (prefers-color-scheme: dark) {
:root {
--primary: #60A5FA;
--primary-light: #1D4ED8;
--primary-dark: #93C5FD;
}
}
Container Queries
.card-container {
container-type: inline-size;
}
@container (min-width: 400px) {
.card { display: flex; }
}
@container (max-width: 399px) {
.card { display: block; }
}
CSS Nesting(原生巢狀)
.card {
padding: 1rem;
& .title {
font-size: 1.25rem;
}
&:hover {
box-shadow: 0 8px 16px rgba(0,0,0,0.15);
}
@media (max-width: 768px) {
padding: 0.75rem;
}
}
color-mix() 函數
/* 混合兩種顏色 */
background: color-mix(in srgb, #3B82F6, white 20%); /* 淺化 20% */
background: color-mix(in srgb, #3B82F6, black 20%); /* 深化 20% */
background: color-mix(in srgb, #3B82F6 70%, #EF4444); /* 混合 */
開發者工具組合推薦
配色相關
程式碼相關
設計相關
常見問題 FAQ
Q1:box-shadow 和 filter: drop-shadow 有什麼不同?
box-shadow 是加在元素的「矩形邊界」上,即使元素有 border-radius 也是在 box 上計算。filter: drop-shadow() 則是根據元素的「實際可見形狀」(包含透明部分)來添加陰影,對 PNG 透明圖片和不規則形狀的元素效果更好。但 drop-shadow 不支援 spread 參數和 inset 內陰影。
Q2:為什麼同一個 HEX 色碼在不同螢幕上看起來不一樣?
因為每台螢幕的色域、亮度、對比度和色彩校準都不同。同一個 #FF0000 在 sRGB 螢幕和 P3 廣色域螢幕上的表現可能有明顯差異。對色彩敏感的設計工作,建議使用校色器定期校準螢幕。在 CSS 中,可以使用 @media (color-gamut: p3) 來偵測廣色域螢幕並提供更鮮豔的顏色。
Q3:應該用 CSS 做漸層背景還是用圖片?
絕大多數情況下,CSS 漸層都比圖片好。CSS 漸層不需要額外的 HTTP 請求、可以無限縮放不失真、檔案大小為零、且可以輕鬆動態調整。唯一用圖片比較好的場景是需要非常複雜的紋理效果(如噪點漸層、不規則圖案)。
Q4:rem 和 em 到底什麼時候用哪個?
經驗法則:字體大小和整體佈局間距用 rem(相對於根元素 16px),元件內部的間距用 em(相對於該元件的字體大小)。例如按鈕的 padding 用 em,這樣大按鈕和小按鈕的 padding 會等比例縮放。全站的 section margin 用 rem,確保一致性。
Q5:如何選擇適合的陰影參數?
一個好的起點是 0 4px 6px rgba(0,0,0,0.1) ——這是最通用的「輕微浮起」效果。從這裡出發:增加 offset-y 讓陰影更深(元素看起來浮得更高);增加 blur 讓陰影更柔和;增加 spread 讓陰影更大;降低 opacity 讓陰影更淡。最重要的是要和整體設計風格一致——扁平風格用淡陰影,Material Design 用層次分明的陰影。
總結:善用工具提升 CSS 開發效率
CSS 開發不應該是猜測和反覆試錯。善用正確的工具,可以讓你在幾秒鐘內完成原本需要幾分鐘的調整工作。
核心工具清單: 1. 色碼轉換——設計與開發之間的橋樑 2. 陰影產生器——視覺化調整,即時預覽 3. 漸層產生器——告別手寫漸層參數 4. 單位轉換——rem/px/em 快速換算