CSS 陰影 (box-shadow)
box-shadow 屬性用來為元素添加陰影效果,可以製作出立體感和層次感。
基本語法
box-shadow: x偏移 y偏移 模糊半徑 擴展半徑 顏色;
- x 偏移:陰影水平偏移量,正值向右,負值向左
- y 偏移:陰影垂直偏移量,正值向下,負值向上
- 模糊半徑:可選,陰影的模糊程度,值越大越模糊
- 擴展半徑:可選,陰影的擴展大小,正值擴大,負值縮小
- 顏色:陰影顏色
基本範例
/* 簡單陰影 */
.shadow {
box-shadow: 2px 2px 5px gray;
}
/* 無偏移的陰影(光暈效果) */
.glow {
box-shadow: 0 0 10px rgba(0,0,0,0.3);
}
/* 帶擴展的陰影 */
.spread {
box-shadow: 0 0 10px 5px rgba(0,0,0,0.2);
}
內陰影 (inset)
加上 inset 關鍵字可以製作內陰影:
.inner-shadow {
box-shadow: inset 0 2px 5px rgba(0,0,0,0.3);
}
/* 凹陷效果 */
.sunken {
box-shadow: inset 0 1px 3px rgba(0,0,0,0.2),
inset 0 -1px 3px rgba(255,255,255,0.5);
}
多重陰影
可以用逗號分隔設定多個陰影:
.multiple {
box-shadow:
0 1px 3px rgba(0,0,0,0.12),
0 1px 2px rgba(0,0,0,0.24);
}
/* 複雜的陰影效果 */
.layered {
box-shadow:
0 2px 4px rgba(0,0,0,0.1),
0 4px 8px rgba(0,0,0,0.1),
0 8px 16px rgba(0,0,0,0.1);
}
常用陰影效果
輕微陰影
.subtle {
box-shadow: 0 1px 3px rgba(0,0,0,0.12);
}
卡片陰影
.card {
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
懸浮陰影
.elevated {
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
}
深陰影
.deep {
box-shadow: 0 10px 30px rgba(0,0,0,0.2);
}
彩色陰影
.color-shadow {
box-shadow: 0 10px 30px rgba(0, 123, 255, 0.4);
}
實用範例
卡片 Hover 效果
.card {
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
transition: box-shadow 0.3s ease;
}
.card:hover {
box-shadow: 0 8px 24px rgba(0,0,0,0.15);
}
按鈕陰影
.btn {
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}
.btn:hover {
box-shadow: 0 4px 8px rgba(0,0,0,0.2);
}
.btn:active {
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
}
輸入框聚焦效果
input {
border: 1px solid #ddd;
box-shadow: none;
transition: box-shadow 0.2s;
}
input:focus {
border-color: #007bff;
box-shadow: 0 0 0 3px rgba(0,123,255,0.25);
outline: none;
}
圖片陰影
.image {
box-shadow: 0 10px 30px rgba(0,0,0,0.3);
border-radius: 8px;
}
浮動按鈕 (FAB)
.fab {
width: 56px;
height: 56px;
border-radius: 50%;
box-shadow:
0 3px 5px rgba(0,0,0,0.2),
0 6px 10px rgba(0,0,0,0.14);
}
內凹輸入框
.inset-input {
background: #f5f5f5;
border: none;
box-shadow: inset 0 2px 4px rgba(0,0,0,0.1);
}
移除陰影
.no-shadow {
box-shadow: none;
}
文字陰影 (text-shadow)
文字陰影使用 text-shadow 屬性,語法類似但沒有擴展半徑和 inset:
.text-shadow {
text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
}
/* 多重文字陰影 */
.fancy-text {
text-shadow:
1px 1px 0 #fff,
2px 2px 0 #ddd;
}
/* 發光文字 */
.glow-text {
text-shadow: 0 0 10px rgba(255,255,255,0.8);
}
效能考量
- 陰影會增加瀏覽器的渲染負擔
- 大量使用或過度模糊的陰影可能影響效能
- 動畫陰影時,考慮使用
will-change: box-shadow來優化