目錄
炫酷懸停效果系列:
懸停效果#4
輪到你了!
總結
首頁 web前端 css教學 使用CSS文本陰影的4個涼爽懸停效果

使用CSS文本陰影的4個涼爽懸停效果

Mar 13, 2025 am 10:21 AM

4 Cool Hover Effects That Use CSS Text Shadow

上篇文章我們探討瞭如何利用CSS背景屬性創建炫酷的懸停效果。這次,我們將重點關注CSS text-shadow屬性,探索更多有趣的懸停效果。你可能想知道,為文本添加陰影怎麼可能產生炫酷的效果,但關鍵在於:我們實際上不會為這些文本懸停效果創建任何陰影。

炫酷懸停效果系列:

  1. 利用背景屬性實現炫酷懸停效果
  2. 利用CSS文本陰影實現炫酷懸停效果(您當前位置!)
  3. 利用背景裁剪、蒙版和3D實現炫酷懸停效果

text-shadow但沒有文本陰影?

讓我通過以下演示中我們將構建的懸停效果來消除混淆:

不用看代碼,你們中的許多人會直覺地認為,對於每個懸停效果,我們都會復製文本,然後獨立地對其進行動畫處理。現在,如果你查看代碼,你會發現HTML中沒有任何文本被實際複製。你有沒有註意到CSS中沒有使用content: "text"

文本圖層完全是用text-shadow創建的!

懸停效果#1

讓我們分解CSS代碼:

 .hover-1 {
  line-height: 1.2em;
  color: #0000;
  text-shadow: 
    0 0 #000, 
    0 1.2em #1095c1;
  overflow: hidden;
  transition: .3s;
}
.hover-1:hover {
  text-shadow: 
    0 -1.2em #000, 
    0 0 #1095c1;
}
登入後複製

首先要注意的是,為了隱藏實際文本,我將實際文本的顏色設置為透明(使用#0000 )。之後,我使用text-shadow創建兩個陰影,每個陰影只定義兩個長度值。這意味著沒有模糊半徑,從而產生清晰銳利的陰影,有效地產生了具有指定顏色的文本副本。

這就是為什麼我在引言中聲稱這裡沒有陰影的原因。我們所做的與其說是“經典”陰影,不如說是複製文本的一種簡單方法。

我們有兩個文本圖層,我們在懸停時移動它們。如果我們隱藏溢出內容,則重複的文本將不可見,移動會使它看起來像是實際文本被其他文本替換了。這是使本文中所有示例都能正常工作的主要技巧。

讓我們優化代碼。我多次使用值1.2em來定義陰影的高度和偏移量,使其成為CSS自定義屬性(我們稱之為--h )的理想候選者:

 .hover-1 {
  --h: 1.2em;

  line-height: var(--h);
  color: #0000;
  text-shadow: 
    0 0 #000, 
    0 var(--h) #1095c1;
  overflow: hidden;
  transition: .3s;
}
.hover-1:hover {
  text-shadow: 
    0 calc(-1 * var(--h)) #000, 
    0 0 #1095c1;
}
登入後複製

我們還可以進一步使用更多calc()計算來簡化代碼,以便我們只使用一次text-shadow 。 (我們在上一篇文章中也做了同樣的事情。)

 .hover-1 {
  --h: 1.2em;   

  line-height: var(--h);
  color: #0000;
  text-shadow: 
    0 calc(-1*var(--_t, 0em)) #000, 
    0 calc(var(--h) - var(--_t, 0em)) #1095c1;
  overflow: hidden;
  transition: .3s;
}
.hover-1:hover {
  --_t: var(--h);
}
登入後複製

如果你想知道為什麼我要在--_t變量中添加下劃線,這只是我用來區分用戶可以更新的控制效果的變量(如--h )和僅用於優化目的、不需要更改的內部變量(如--_t )的命名約定。換句話說,下劃線是變量名的一部分,沒有任何特殊含義。

我們還可以更新代碼以獲得相反的效果,其中重複的文本從頂部滑入:

我們只對text-shadow屬性做了一個小的更新——我們沒有觸及其他任何東西!

懸停效果#2

對於這個效果,我們將動畫化兩個屬性: text-shadowbackground 。關於text-shadow ,我們仍然像之前的示例一樣有兩個圖層,但這次我們將只移動其中一個,同時在交換期間將另一個圖層的顏色設置為透明。

 .hover-2 {
  /* 高度*/
  --h: 1.2em;

  line-height: var(--h);
  color: #0000;
  text-shadow: 
    0 var(--_t, var(--h)) #fff,
    0 0 var(--_c, #000);
  transition: 0.3s;
}
.hover-2:hover {
  --_t: 0;
  --_c: #0000;
}
登入後複製

在懸停時,我們將白色文本圖層移動到頂部,同時將另一個圖層的顏色更改為透明。為此,我們添加了一個應用於漸變的background-size動畫:

最後,我們添加overflow: hidden以使動畫僅在元素的邊界內可見:

 .hover-2 {
  /* 高度*/
  --h: 1.2em;

  line-height: var(--h);
  color: #0000;
  text-shadow: 
    0 var(--_t,var(--h)) #fff,
    0 0 var(--_c, #000);
  background: 
    linear-gradient(#1095c1 0 0) 
    bottom/100% var(--_d, 0) no-repeat;
  overflow: hidden;
  transition: 0.3s;
}
.hover-2:hover {
  --_d: 100%;
  --_t: 0;
  --_c: #0000;
}
登入後複製

我們在這裡所做的是結合CSS text-shadowbackground屬性來創建炫酷的懸停效果。此外,我們能夠使用CSS變量來優化代碼。

如果背景語法看起來很奇怪,我強烈建議你閱讀我之前的文章。下一個懸停效果也依賴於我在那篇文章中詳細介紹的動畫。除非你熟悉CSS背景技巧,否則我建議你在繼續閱讀本文之前閱讀那篇文章以了解更多背景信息。

在之前的文章中,你向我們展示瞭如何只使用一個變量來創建懸停效果——在這裡可以這樣做嗎?

是的,絕對可以!我們確實可以使用相同的DRY切換技術,這樣我們只需要處理一個CSS自定義屬性,該屬性僅在懸停時切換值:

 .hover-2 {
  /* 高度*/
  --h: 1.2em;

  line-height: var(--h);
  color: #0000;
  text-shadow: 
    0 var(--_i, var(--h)) #fff,
    0 0 rgb(0 0 0 / calc(var(--_i, 1) * 100%) );
  background: 
    linear-gradient(#1095c1 0 0) 
    bottom/100% calc(100% - var(--_i, 1) * 100%) no-repeat;
  overflow: hidden;
  transition: 0.3s;
}
.hover-2:hover {
  --_i: 0;
}
登入後複製

懸停效果#3

這個懸停效果只不過是我們已經製作的兩個效果的組合:上一篇文章中的第二個懸停效果和本文中的第一個懸停效果。

 .hover-3 {
  /* 顏色*/
  --c: #1095c1;
  /* 高度*/
  --h: 1.2em;

  /* 本文中第一個懸停效果*/
  line-height: var(--h);  
  color: #0000;
  overflow: hidden;
  text-shadow: 
    0 calc(-1 * var(--_t, 0em)) var(--c), 
    0 calc(var(--h) - var(--_t, 0em)) #fff;
  /* 上一篇文章中的第二個懸停效果*/
  background: 
    linear-gradient(var(--c) 0 0) no-repeat 
    calc(200% - var(--_p, 0%)) 100% / 200% var(--_p, .08em);
  transition: .3s var(--_s, 0s), background-position .3s calc(.3s - var(--_s, 0s));
}
.hover-3:hover {
  --_t: var(--h);
  --_p: 100%;
  --_s: .3s
}
登入後複製

我所做的只是複制和粘貼其他示例中的效果,並對變量名進行了一些小的調整。當它們組合在一起時,它們會產生一個簡潔的懸停效果!乍一看,這種效果可能看起來很複雜且難以實現,但最終,它僅僅是將兩個相對簡單的效果組合成一個。

如果我們考慮我們已經完成的之前的優化,那麼使用DRY切換變量技術優化代碼也應該是一項簡單的任務:

 .hover-3 {
  /* 顏色*/
  --c: #1095c1;
  /* 高度*/
  --h: 1.2em;

  line-height: var(--h);  
  color: #0000;
  overflow: hidden;
  text-shadow: 
    0 calc(-1 * var(--h) * var(--_i, 0)) var(--c), 
    0 calc(var(--h) * (1 - var(--_i, 0))) #fff;
  background: 
    linear-gradient(var(--c) 0 0) no-repeat
    calc(200% - var(--_i, 0) * 100%) 100% / 200% calc(100% * var(--_i, 0) .08em);
  transition: .3s calc(var(--_i, 0) * .3s), background-position .3s calc(.3s - calc(var(--_i, 0) * .3s));
}
.hover-3:hover {
  --_i: 1;
}
登入後複製

懸停效果#4

此懸停效果是對第二個懸停效果的改進。首先,讓我們引入一個clip-path動畫來顯示其中一個文本圖層,然後再移動它:

這是一個更好的說明,以便更好地理解正在發生的事情:

最初,我們使用inset(0 0 0 0) ,這類似於overflow: hidden ,因為我們只看到實際文本。在懸停時,我們使用等於高度的負值更新第三個值(表示底部偏移量),以顯示放置在底部的文本圖層。

從那裡,我們可以將其添加到我們在本文中製作的第二個懸停效果中,這就是我們得到的結果:

我們越來越近了!請注意,我們需要首先運行clip-path動畫,然後運行其他所有內容。為此,我們可以為懸停時的所有屬性添加延遲,除了clip-path

 transition: 0.4s 0.4s, clip-path 0.4s;
登入後複製

在鼠標移出時,我們做相反的操作:

 transition: 0.4s, clip-path 0.4s 0.4s;
登入後複製

最後的潤色是添加一個box-shadow來創建藍色矩形的滑動效果。不幸的是, background無法產生這種效果,因為背景默認情況下會被裁剪到內容區域。同時, box-shadow可以超出內容區域。

 .hover-4 {
  /* 顏色*/
  --c: #1095c1;
  /* 高度*/
  --h: 1.2em;

  line-height: var(--h);
  color: #0000;
  text-shadow: 
    0 var(--_t, var(--h)) #fff,
    0 0 var(--_c, #000);
  box-shadow: 0 var(--_t, var(--h)) var(--c);
  clip-path: inset(0 0 0 0);
  background: linear-gradient(var(--c) 0 0) 0 var(--_t, var(--h)) no-repeat;
  transition: 0.4s, clip-path 0.4s 0.4s;
}
.hover-4:hover {
  --_t: 0;
  --_c: #0000;
  clip-path: inset(0 0 calc(-1 * var(--h)) 0);
  transition: 0.4s 0.4s, clip-path 0.4s;
}
登入後複製

如果你仔細觀察box-shadow ,你會發現它與text-shadow內的白色文本圖層具有相同的值。這是合乎邏輯的,因為兩者都需要以相同的方式移動。兩者都會滑到頂部。然後box-shadow位於元素後面,而text-shadow位於頂部。

這是一個修改了一些值的演示,用於可視化圖層如何移動:

等等,背景語法與第二個懸停效果中使用的語法略有不同!

好眼力!是的,我們正在使用不同的背景技術來產生相同的效果。我們不是將大小從0%動畫化為100%,而是動畫化位置。

如果我們沒有在漸變上指定大小,則它默認情況下會佔據整個寬度和高度。由於我們知道元素的高度( --h ),我們可以通過將位置從0 var(--h)更新到0 0來創建滑動效果。

 .hover-4 {
  /* ... */
  background: linear-gradient(var(--c) 0 0) 0 var(--_t, var(--h)) no-repeat;
}
.hover-4:hover {
  --_t: 0;
}
登入後複製

我們可以使用background-size動畫來獲得相同的效果,但我們只是向我們的技巧列表中添加了另一個技巧!

在演示中,你還使用了inset(0 0 1px 0) ……為什麼?

我有時會在此處添加或刪除一些像素或百分比來完善看起來不太好的任何內容。在這種情況下,底部出現了一條壞線,添加1px將其刪除了。

DRY切換變量優化怎麼樣?

我把這項任務留給你!在看完這四個懸停效果和之前的文章後,你應該能夠更新代碼,使其只使用一個變量。我很想在評論中看到你的嘗試!

輪到你了!

讓我分享最後一個懸停效果,它是前一個效果的另一個版本。你能在不查看代碼的情況下找出它是如何實現的嗎?這是一個很好的練習,所以不要作弊!

總結

我們查看了許多示例,這些示例展示瞭如何使用一個元素和幾行CSS就足以在文本元素上創建一些看起來相當複雜懸停效果——不需要偽元素!我們甚至能夠結合多種技術,以較小的努力實現更複雜的動畫。

如果你有興趣深入研究本文中這四個文本陰影懸停效果之外的內容,請查看我的500種懸停效果合集,我在其中探索了各種不同的技術。

以上是使用CSS文本陰影的4個涼爽懸停效果的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1659
14
CakePHP 教程
1416
52
Laravel 教程
1310
25
PHP教程
1258
29
C# 教程
1232
24
Google字體可變字體 Google字體可變字體 Apr 09, 2025 am 10:42 AM

我看到Google字體推出了新設計(Tweet)。與上一次大型重新設計相比,這感覺更加迭代。我幾乎無法分辨出區別

如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

我們如何創建一個在SVG中生成格子呢模式的靜態站點 我們如何創建一個在SVG中生成格子呢模式的靜態站點 Apr 09, 2025 am 11:29 AM

格子呢是一塊圖案布,通常與蘇格蘭有關,尤其是他們時尚的蘇格蘭語。在Tar​​tanify.com上,我們收集了5,000多個格子呢

如何在WordPress主題中構建VUE組件 如何在WordPress主題中構建VUE組件 Apr 11, 2025 am 11:03 AM

內聯式模板指令使我們能夠將豐富的VUE組件構建為對現有WordPress標記的逐步增強。

php是A-OK用於模板 php是A-OK用於模板 Apr 11, 2025 am 11:04 AM

PHP模板通常會因促進Subpar代碼而變得不良說唱,但這並不是這樣的情況。讓我們看一下PHP項目如何執行基本的

編程SASS創建可訪問的顏色組合 編程SASS創建可訪問的顏色組合 Apr 09, 2025 am 11:30 AM

我們一直在尋求使網絡更容易訪問。顏色對比只是數學,因此Sass可以幫助涵蓋設計師可能錯過的邊緣案例。

See all articles