這篇文章主要介紹“如何使用純CSS實(shí)現(xiàn)多行文本的漸隱動(dòng)畫”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“如何使用純CSS實(shí)現(xiàn)多行文本的漸隱動(dòng)畫”文章能幫助大家解決問題。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了海晏免費(fèi)建站歡迎大家使用!
首先,我們來看這樣一個(gè)例子,我們要實(shí)現(xiàn)這樣一個(gè)單行文本的漸隱:
使用 mask
,可以輕松實(shí)現(xiàn)這樣的效果,只需要:
Lorem ipsum dolor sit amet consectetur.p {
mask: linear-gradient(90deg, #fff, transparent);
}
但是,如果,場(chǎng)景變成了多行呢?我們需要將多行文本最后一行,實(shí)現(xiàn)漸隱消失,并且適配不同的多行場(chǎng)景:
這個(gè)就會(huì)稍微復(fù)雜一點(diǎn)點(diǎn),但是也是有多種方式可以實(shí)現(xiàn)的。
首先我們來看一下使用 background
的方式。
background
實(shí)現(xiàn)這里會(huì)運(yùn)用到一個(gè)技巧,就是 display: inline
內(nèi)聯(lián)元素的 background
展現(xiàn)形式與 display: block
塊級(jí)元素(或者 inline-block
、flex
、grid
)不一致。
簡(jiǎn)單看個(gè)例子:
Lorem .....
這里需要注意, 元素是塊級(jí)元素,而
是內(nèi)聯(lián)元素。
我們給它們統(tǒng)一添加上一個(gè)從綠色到藍(lán)色的漸變背景色:
p, a {
background: linear-gradient(90deg, blue, green);
}
看看效果:
什么意思呢?區(qū)別很明顯,塊級(jí)元素的背景整體是一個(gè)漸變整體,而內(nèi)聯(lián)元素的每一行都是會(huì)有不一樣的效果,整體連起來串聯(lián)成一個(gè)整體。
基于這個(gè)特性,我們可以構(gòu)造這樣一種布局:
Mollitia nostrum placeat consequatur deserunt velit ducimus possimus commodi temporibus debitis quamp {
position: relative;
width: 400px;
}
a {
background: linear-gradient(90deg, transparent, transparent 70%, #fff);
background-repeat: no-repeat;
cursor: pointer;
color: transparent;
&::before {
content: "Mollitia nostrum placeat consequatur deserunt velit ducimus possimus commodi temporibus debitis quam";
position: absolute;
top: 0;
left: 0;
color: #000;
z-index: -1;
}
}
這里需要解釋一下:
為了利用到實(shí)際的內(nèi)聯(lián)元素的 background
的特性,我們需要將實(shí)際的文本包裹在內(nèi)聯(lián)元素 內(nèi)
實(shí)際的文本,利用了 opacity: 0
進(jìn)行隱藏,實(shí)際展示的文本使用了 元素的偽元素,并且將它的層級(jí)設(shè)置為
-1
,目的是讓父元素的背景可以蓋過它
元素的漸變?yōu)閺耐该鞯桨咨?,利用它去遮住下面的?shí)際用偽元素展示的文字,實(shí)現(xiàn)文字的漸隱
這樣,我們就能得到這樣一種效果:
這里, 元素的漸變?yōu)閺耐该鞯桨咨煤竺娴陌咨饾u遮住文字。
如果我將漸變改為從黑色到白色(為了方便理解,漸變的黑色和白色都帶上了一些透明),你能很快的明白這是怎么回事:
a {
background: linear-gradient(90deg, rgba(0,0,0, .8), rgba(0,0,0, .9) 70%, rgba(255, 255, 255, .9));
}
當(dāng)然,這個(gè)方案有很多問題,譬如利用了 z-index: -1
,如果父容器設(shè)置了背景色,則會(huì)失效,同時(shí)不容易準(zhǔn)確定位最后一行。因此,更好的方式是使用 mask
來解決。
mask
實(shí)現(xiàn)那么,如果使用 mask
的話,問題,就會(huì)變得簡(jiǎn)單一些,我們只需要在一個(gè) mask
中,實(shí)現(xiàn)兩塊 mask
區(qū)域,一塊用于準(zhǔn)確控制最后一行,一塊用于控制剩余部分的透明。
也不需要特殊構(gòu)造 HTML:
Lorem ipsum dolor sit amet ....p {
width: 300px;
padding: 10px;
line-height: 36px;
mask:
linear-gradient(270deg, transparent, transparent 30%, #000),
linear-gradient(270deg, #000, #000);
mask-size: 100% 46px, 100% calc(100% - 46px);
mask-position: bottom, top;
mask-repeat: no-repeat;
}
效果如下:
核心在于整個(gè) mask
相關(guān)的代碼,正如上面而言的,mask 將整個(gè)區(qū)域分成了兩塊進(jìn)行控制:
在下部分這塊,我們利用 mask
做了從右向左的漸隱效果。并且利用了 mask-position
定位,以及 calc 的計(jì)算,無論文本都多少行,都是適用的!需要說明的是,這里的 46px
的意思是單行文本的行高加上 padding-bottom
的距離??梢赃m配任意行數(shù)的文本:
好,看完靜態(tài)的,我們?cè)賮韺?shí)現(xiàn)一種**動(dòng)態(tài)的文字漸隱消失。
整體的效果是當(dāng)鼠標(biāo) Hover 到文字的時(shí)候,整個(gè)文本逐行逐漸消失。像是這樣:
這里的核心在于,需要去適配不同的行數(shù),不同的寬度,而且文字是一行一行的進(jìn)行消失。
這里核心還是會(huì)運(yùn)用上內(nèi)聯(lián)元素 background
的特性。
實(shí)現(xiàn)整段文字的漸現(xiàn),從一種顏色到另外一種顏色:
a {
background:
linear-gradient(90deg, #999, #999),
linear-gradient(90deg, #fc0, #fc0);
background-size: 100% 100%, 0 100px;
background-repeat: no-repeat;
background-position: 100% 100%, 0 100%;
color: transparent;
background-clip: text;
}
.button:hover ~ p a {
transition: .8s all linear;
background-size: 0 100px, 100% 100%;
}
這里需要解釋一下,雖然設(shè)置了 color: transparent
,但是文字默認(rèn)還是有顏色的,默認(rèn)的文字顏色,是由第一層漸變賦予的 background: linear-gradient(90deg, #999, #999), linear-gradient(90deg, #fc0, #fc0)
,也就是這一層:linear-gradient(90deg, #999, #999)
。
當(dāng) hover 觸發(fā)時(shí),linear-gradient(90deg, #999, #999)
這一層漸變逐漸消失,而另外一層 linear-gradient(90deg, #fc0, #fc0)` 逐漸出現(xiàn),借此實(shí)現(xiàn)上述效果。
CodePen -- background-clip 文字漸現(xiàn)效果
好,我們可以借鑒這個(gè)技巧,去實(shí)現(xiàn)文字的漸隱消失。一層為實(shí)際的文本,而另外一層是進(jìn)行動(dòng)畫的遮罩,進(jìn)行動(dòng)畫的這一層,本身的文字設(shè)置為 color: transparent
,這樣,我們就只能看到背景顏色的變化。
大致的代碼如下:
Mollitia nostrum placeat consequatur deserunt.
Mollitia nostrum placeat consequatur deserunt.
p {
width: 500px;
}
.word {
position: absolute;
top: 0;
left: 0;
color: transparent;
color: #000;
}
.pesudo {
position: relative;
background: linear-gradient(90deg, transparent, #fff 20%, #fff);
background-size: 0 100%;
background-repeat: no-repeat;
background-position: 100% 100%;
transition: all 3s linear;
color: transparent;
}
p:hover .pesudo,
p:active .pesudo{
background-size: 500% 100%;
}
其中,.word
為實(shí)際在底部,展示的文字層,而 pesudo
為疊在上方的背景層,hover 的時(shí)候,觸發(fā)上方元素的背景變化,逐漸遮擋住下方的文字,并且,能適用于不同長(zhǎng)度的文本。
當(dāng)然,上述方案會(huì)有一點(diǎn)瑕疵,我們無法讓不同長(zhǎng)度的文本整體的動(dòng)畫時(shí)間一致。當(dāng)文案數(shù)量相差不大時(shí),整體可以接受,文案相差數(shù)量較大時(shí),需要分別設(shè)定下 transition-duration
的時(shí)長(zhǎng)。
關(guān)于“如何使用純CSS實(shí)現(xiàn)多行文本的漸隱動(dòng)畫”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。