文字陰影簡介
你可以使用 text-shadow 屬性為文字應用陰影。此屬性接受一個以逗號分隔的陰影值列表。每個陰影值至少需要兩個 <length> 值,但最多可以包含三個 <length> 值和一個 color 值。
text-shadow: 1px 3px;
text-shadow: 1px -2px 3px white;
text-shadow:
5px 5px mediumblue,
10px 10px magenta,
15px 15px rebeccapurple;
若要移除文字的所有陰影,請使用關鍵字 none。
text-shadow: none;
在本指南中,我們將探討文字陰影的組成部分,以及如何為一個元素應用多個文字陰影。
文字陰影的組成部分
每個陰影都包含一個水平偏移量、一個垂直偏移量,以及一個可選的模糊半徑,順序如此。你還可以定義陰影的顏色。
水平偏移量
text-shadow 值中的第一個 <length> 表示陰影相對於原始文字的水平偏移量。正值會將陰影向右移動,而負值則會向左移動。0 是一個常見的有效值。
在此示例中,不同的 text-shadow 宣告僅在水平偏移量上有所不同。第一個 <length> 值將陰影向左(-30px)或向右(30px)移動。
.negative {
text-shadow: -30px 0 1px red;
}
.positive {
text-shadow: 30px 0 1px red;
}
.zero {
text-shadow: 0 0 1px red;
}
你可能已經注意到,text-shadow 屬性對 CSS 盒模型沒有影響,這與 outline 屬性類似。就像 box-shadow 一樣,文字陰影不影響佈局,不會觸發滾動,也不會影響可滾動溢位區域的大小。雖然文字陰影可以使元素的文字看起來更大,但它們實際上對內容的寬度(或高度)沒有影響。
垂直偏移量
text-shadow 值中的第二個 <length> 表示陰影相對於原始文字的垂直偏移量。這個必需值的行為與水平偏移量類似,只是它將陰影向上或向下移動,而不是向左或向右。
在此示例中,不同的 text-shadow 宣告僅在垂直偏移量上有所不同。第二個 <length> 值將陰影向上(-30px)或向下(30px)移動。
.negative {
text-shadow: 0 -30px 1px red;
}
.positive {
text-shadow: 0 30px 1px red;
}
.zero {
text-shadow: 0 0 1px red;
}
模糊半徑
模糊半徑由第三個 <length> 值定義,是可選的。如果省略,模糊半徑為 0,這會建立一個由前兩個長度值定位的文字副本。該值必須為 0 或更大;值越大,陰影效果的擴散範圍就越廣。
在此示例中,不同的 text-shadow 宣告僅在模糊半徑上有所不同。第三個 <length> 值要麼是無效的(-5px),要麼模糊了陰影(5px),要麼建立了文字的副本(0)。
.negative {
/* invalid */
text-shadow: 30px 30px -5px red;
}
.positive {
text-shadow: 30px 30px 5px red;
}
.zero {
text-shadow: 30px 30px 0 red;
}
陰影顏色
雖然你可以為一個文字應用多個陰影,但每個陰影都由單一的基礎顏色組成。該顏色可以是任何有效的 CSS color 值,如果省略,則預設為 currentcolor。
以下三個陰影在其陰影顏色方面是等效的:
.shadow-color {
text-shadow:
5px 5px mediumblue,
10px 10px magenta,
15px 15px rebeccapurple;
}
.shadow-color-hex {
text-shadow:
5px 5px #0000cd,
10px 10px #ff00ff,
15px 15px #663399;
}
.shadow-color-rgb {
text-shadow:
5px 5px rgb(0 0 205),
10px 10px rgb(255 0 255),
15px 15px rgb(102 51 153);
}
多個陰影
你可以透過包含多個以逗號分隔的陰影值,來為同一文字應用多個陰影。
陰影效果按從前到後的順序應用:第一個陰影在最頂層。
在我們的示例 text-shadow: 5px 5px mediumblue, 10px 10px magenta, 15px 15px rebeccapurple; 中,它定義了三個陰影,藍色陰影在洋紅色陰影之上,而洋紅色陰影又在藍紫色陰影之上。
使用透明文字實現多重陰影
陰影繪製在任何背景顏色或影像之上,以及任何邊框之下。雖然陰影會相互疊加,但它們不會覆蓋文字。文字陰影中沒有與 box-shadow 屬性的 inset 關鍵字等效的設定。與盒子陰影不同,文字陰影不會被裁剪到陰影形狀的範圍內,如果文字是部分透明的,陰影可能會透出來。
以下示例對文字應用了相同的陰影,但使用了不同的 color 屬性值。半透明的示例難以閱讀,但包含它們是為了演示陰影的渲染方式。
p {
text-shadow:
5px 5px 0 mediumblue,
10px 10px 5px magenta,
15px 15px 10px rebeccapurple;
}
.opaque {
color: black;
}
.semitransparent {
color: rgb(0 0 0 / 0.5);
}
.transparent {
color: transparent;
}
.white {
color: white;
}
.semi-white {
color: rgb(255 255 255 / 0.75);
}
在“透明”示例中,文字是透明的,但完全可讀,因為頂層陰影沒有模糊。請注意陰影如何出現在文字後面,並且在文字不完全不透明時可見。這一點在“半透明白色”示例中尤其明顯。這種行為與非內嵌(non-inset)的盒子陰影不同,後者的陰影在邊框的外邊緣處被裁剪。