純css實現:文字被顏色逐漸填滿的特效

這是我參與更文挑戰的第22天,活動詳情查看: 更文挑戰css

前言

啊不知不覺又到深夜了,有句話說:時間就像胸,擠擠就有了,躺下就沒了。趁着還沒躺下,趕忙把今天的更文給搞定~html

今天主要是想分享一個純css實現的文字被顏色逐漸填滿變化的效果,這個一個很炫酷的效果,如上面的封面圖所示,以前曾經用在項目中,實現起來卻只須要簡單的幾個屬性就能夠完成。前端

思路

既然要實現這樣一個效果,咱們就要先進行效果的拆分:git

  • 這個效果就能夠拆分爲兩個盒子,灰色的文本盒子,漸變藍色文本盒子。web

  • 兩個盒子徹底重疊,漸變藍色文本盒子在上,灰色文本盒子在下。api

  • 上面藍色文本的盒子逐漸展現,下面灰色文本盒子逐漸被覆蓋,效果即完成.瀏覽器

  • 考慮到DOM元素越多越亂的狀況,上面的藍色文本盒子用僞元素::after實現最方便。markdown

實現過程

思路有了,剩下的就是把思路轉換爲代碼啦,我按着上面的思路,三下五除二實現了以下代碼:閉包

<style> h1{ position: relative; font-size: 72px; font-weight: 700; color: #ccc; } h1::after{ content: attr(text-data); position: absolute; top: 0; left: 0; background: linear-gradient(to right, #ABDCFF, #0396FF); -webkit-background-clip: text; color: transparent; animation: changeColor 6s linear infinite; } @keyframes changeColor{ 0%{ width: 0%; } 100%{ width: 100%; } } </style>


    <h1 text-data="你好哇,我是南極大冰塊~">你好哇,我是南極大冰塊~</h1>
複製代碼

運行一下:效果以下所示:svg

GIF 2021-6-22 23-03-09.gif

咦???怎麼和預想的不同啊,雖然最後徹底把灰色文本給覆蓋了,可是藍色文本寬度不夠的時候,被擠到了下面,而後隨着寬度的增長又一個字一個字蹦蹦跳跳覆蓋的,不對勁呢~

這時候我想,這是個小問題,加個overflow: hidden;就行了,因而我改了代碼:

<style> h1{ position: relative; font-size: 72px; font-weight: 700; color: #ccc; } h1::after{ content: attr(text-data); overflow: hidden; /* 加了這行代碼 */ position: absolute; top: 0; left: 0; background: linear-gradient(to right, #ABDCFF, #0396FF); -webkit-background-clip: text; color: transparent; animation: changeColor 6s linear infinite; } @keyframes changeColor{ 0%{ width: 0%; } 100%{ width: 100%; } } </style>


    <h1 text-data="你好哇,我是南極大冰塊~">你好哇,我是南極大冰塊~</h1>
複製代碼

再運行一下:效果以下所示:

GIF 2021-6-22 23-12-06.gif

仍是沒有任何變化啊喂!

這是由於我並無對僞元素限制寬高,因此文字並無超出該僞元素的內容區域,因此overflow: hidden;看起來就像沒有生效同樣,實際上它生效了,只是沒有效果罷了。

那麼,真正的問題出在哪裏呢???

答案是:文字的換行問題!

衆所周知,文字在不應換行的時候換行,就會出現奇怪的問題~ 因而我改了代碼以下:

<style> h1{ position: relative; font-size: 72px; font-weight: 700; color: #ccc; } h1::after{ content: attr(text-data); white-space: nowrap; /* 加了這行代碼,禁止文字換行 */ position: absolute; top: 0; left: 0; background: linear-gradient(to right, #ABDCFF, #0396FF); -webkit-background-clip: text; color: transparent; animation: changeColor 6s linear infinite; } @keyframes changeColor{ 0%{ width: 0%; } 100%{ width: 100%; } } </style>


    <h1 text-data="你好哇,我是南極大冰塊~">你好哇,我是南極大冰塊~</h1>
複製代碼

運行看一下:

GIF 2021-6-22 23-14-51.gif

完美運行,不須要給僞元素設置什麼寬高,也不須要設置什麼overflow: hidden;,只須要一個簡單的禁止換行,搞定!

後記

但願大冰塊今天分享的內容能對你有所幫助,經過以上代碼能夠實現文字逐漸被填滿的特效,實際場景的應用也能夠改爲豎版的,在首屏或者loading的時候都可以用獲得,仍是很好玩很炫酷頗有意思的~

今天是我堅持日更的第二十二天,今天加了班,回家以後收拾一下還沒想好寫什麼,可能你們都同樣,打工人的艱辛都大同小異吧~

天天輸出一點點,進步一點點。有志者,事竟成。你們一塊兒加油呀~

若是本文對你有幫助,關注大冰塊,點個贊吧~

更文挑戰的文章目錄以下:

相關文章
相關標籤/搜索