切換語言為:簡體

CSS 實現文字下方劃線動畫效果

  • 爱糖宝
  • 2024-07-19
  • 2098
  • 0
  • 0

說到下劃線,相信大家都不陌生。

下劃線underscore)是一種特殊符號,通常用於強調標記表示缺失的文字。它是一條水平線,位於文字的底部,與字母和數字等字元平齊下劃線在不同的領域和場景中有不同的用途,如書寫、程式設計、表格製作等。

書寫排版中,下劃線通常用於強調特定的文字或標題。它可以用於單詞、短語或整個句子,以突出顯示重要資訊。

在計算機程式設計中,下劃線通常用於變數函式檔名命名。根據程式語言的約定,下劃線可以用作識別符號的一部分,以提高可讀性和程式碼的可維護性

相信,下劃線動畫相結合的特效,您一定也不陌生。那麼,您見過這樣的下劃線特效嗎?

CSS 實現文字下方劃線動畫效果

這樣的下劃線動畫有三個特點:

  1. 下劃線高度可以控制的,並且下劃線顏色漸變的顏色;

  2. 預設沒有下劃線,而是等滑鼠經過的時候,下劃線左側進入

  3. 滑鼠離開的時候,下劃線右側離開。

CSS 實現文字下方劃線動畫效果

而且,咱們的這個下劃線效果,在多行情況下也成立噢!

摩拳擦掌,咱們立刻開始寫一個出來吧!


一、漸變下劃線

我們直接在 HTML 中用一個 H1 標籤寫入文字。

<h1>將夢想懸掛於枝頭,在夏季的豐盛中飽滿,綻放;為夢想披星戴月,重新整理生命的溫度。</h1>


然後,我們給 H1 標籤一個漸變背景色

h1 {
  background: linear-gradient(to right, #ec695c, #61c545);
}


得到一行文字具有一個漸變背景色效果。

CSS 實現文字下方劃線動畫效果

好奇寶寶要問了,說好的下劃線呢?搞背景幹嘛?

聰明的您一定猜到了,我們可以透過控制背景高度位置,讓其變成下劃線效果

h1 {
  background-image: linear-gradient(to right, #ec695c, #61c545);
  background-repeat: no-repeat;
  background-position-y: bottom;
  background-size: 0 2px;
}


我們設定背景的水平位置為 right豎直位置為 bottom,並設定背景的寬度為 auto高度為 2px

因為背景高度僅為 2px,那麼需要設定背景重複為 no-repeat 讓其不重複,不然還是會重複的填充了整個 H1 標籤的範圍

CSS 實現文字下方劃線動畫效果

這樣,我們就把一個漸變色的下劃線給寫出來了。


二、滑鼠懸停效果

我們需要滑鼠進入文字區域的時候才顯示下劃線,並且效果是讓下劃線左側開始變長,所以我們先讓背景寬度為 0

h1 {
  background-image: linear-gradient(to right, #ec695c, #61c545);
  background-repeat: no-repeat;
  background-position-y: bottom;
  background-size: 0 2px;
}


這個時候是不會顯示下劃線的,因為背景寬度為 0

CSS 實現文字下方劃線動畫效果

於是,我們設定滑鼠懸停的時候,顯示下劃線

h1:hover {
  background-size: 100% 2px;
}


CSS 實現文字下方劃線動畫效果

現在滑鼠懸停下劃線效果是出現了,但是我們想要的是緩慢出現動畫效果。於是我們給元素新增一個過渡屬性。

h1 {
  background-image: linear-gradient(to right, #ec695c, #61c545);
  background-repeat: no-repeat;
  background-position-y: bottom;
  background-size: 0 2px;
  transition: background-size 1.5s;
}


我們透過 transition 屬性控制背景大小過渡時長為 1.5s

CSS 實現文字下方劃線動畫效果

這樣,我們就實現了漸變下劃線滑鼠懸停效果。


三、控制下劃線進與出的方向

滑鼠進入的時候,下劃線左側進入了,但是滑鼠離開的時候,我們希望下劃線是從右側出去。需要實現這樣的效果,我們需要對 CSS 中的 hover 偽類做一個深入的剖析。

我們知道,hover 是 CSS 中的一個偽類,其效果是對所選元素滑鼠懸停時候的樣式控制

相信學習過 JavaScript的寶子們都會有一個疑惑,CSS 中有 hoverJavaScript 中卻沒有 hover 事件,而是需要使用 mouseenter 或者 mouseover 事件記錄滑鼠進入,然後再使用 mouseleave 或者 mouseout 事件記錄滑鼠離開。難道,hover 包含了滑鼠進入滑鼠離開兩個事件機制

帶著這樣的疑惑,我們大膽的使用背景大小做了一個實驗。

h1 {
  background-image: linear-gradient(to right, #ec695c, #61c545);
  background-repeat: no-repeat;
  background-position-y: bottom;
  background-size: 50% 2px;
  transition: background-size 1.5s;
}
h1:hover {
  background-size: 100% 2px;
}

得到如下結果:

CSS 實現文字下方劃線動畫效果

透過效果,我們可以發現如下規律:

  • 滑鼠進入的時候,元素表現出來的樣式,會從原本的屬性值過渡到 hover 偽類中的屬性值

  • 滑鼠離開的時候,元素表現出來的樣式,會從 hover 偽類中的屬性值過渡到原本的屬性值

有了這個結論,我們就可以調整一下思路。在 h1:hover 中設定背景位置為 left,讓滑鼠進入的時候,背景就是從左邊開始慢慢變寬。在 h1 中設定背景位置為 right,這樣一來,滑鼠離開的時候,背景就從右邊開始慢慢變窄

h1 {
  background-image: linear-gradient(to right, #ec695c, #61c545);
  background-repeat: no-repeat;
  background-position-x: right;
  background-position-y: bottom;
  background-size: 0 2px;
  transition: background-size 1.5s;
}
h1:hover {
  background-position-x: left;
  background-size: 100% 2px;
}


得到如下效果:

CSS 實現文字下方劃線動畫效果

可以看到,我們已經成功了。


四、多行與文字

這個特效,基本上已經成功了,但是我們也看到文字之外,下劃線還多了長長的一條尾巴。而且,當文字是多行的時候,這個問題就凸顯的非常明顯了。

CSS 實現文字下方劃線動畫效果

其實,這是因為 H1 標籤是塊級元素(又叫塊盒),預設情況下寬度是 100%,我們需要讓其變成行內元素(又叫行盒)。

h1 {
  display: inline;
  background-image: linear-gradient(to right, #ec695c, #61c545);
  background-repeat: no-repeat;
  background-position-x: right;
  background-position-y: bottom;
  background-size: 0 2px;
  line-height: 2;
  transition: background-size 1.5s;
}
h1:hover {
  background-position-x: left;
  background-size: 100% 2px;
}

設定行高 line-height 的值為 2,讓其顯示好看一些。

CSS 實現文字下方劃線動畫效果

這樣,我們就完成了文字來回漸變下劃線的效果。


完整原始碼

今天原始碼比較少,還是那四個字,拿走不謝!O(∩_∩)O

h1 {
  display: inline;
  background-image: linear-gradient(to right, #ec695c, #61c545);
  background-repeat: no-repeat;
  background-position-x: right;
  background-position-y: bottom;
  background-size: 0 2px;
  line-height: 2;
  transition: background-size 1.5s;
}
h1:hover {
  background-position-x: left;
  background-size: 100% 2px;
}


有沒有發現?如此簡單的一個效果,竟然蘊涵瞭如此豐富的 CSS 知識,所以說,任何一門技術,研究到極致都是一門學問……

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.