自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

純 CSS 實(shí)現(xiàn)的三種掃光效果

開發(fā) 前端
由于掃光在文本內(nèi)部,所以需要將這個(gè)漸變作為文本的顏色。文本漸變色,可以用backgrond-clip:text來實(shí)現(xiàn),假設(shè)HTML是這樣的。

介紹一個(gè)比較常見的動(dòng)畫效果。

在日常開發(fā)中,為了強(qiáng)調(diào)凸顯某些文本或者元素,會(huì)加一些掃光動(dòng)效,起到吸引眼球的效果,比如文本的:

圖片圖片

或者是一個(gè)卡片容器,里面可能是圖片或者文本或者任意元素。

圖片

除此之外,還有那種不規(guī)則的圖片,比如獎(jiǎng)品圖案:

圖片

這些是如何實(shí)現(xiàn)的呢?一起看看吧!

一、CSS 掃光的原理

CSS掃光動(dòng)畫的原理很簡(jiǎn)單,就是一個(gè)普通的、從左到右的、無限循環(huán)的位移動(dòng)畫。

圖片圖片

位移動(dòng)畫可以選擇transform或者改變background-position都行。

至于掃光,我們只需要繪制一條斜向上45deg的線性漸變就可以了,示意如下:

圖片圖片

用CSS實(shí)現(xiàn)就是

background: linear-gradient(45deg, rgba(255,255,255,0) 40%, rgba(255, 255, 255, 0.7), rgba(255,255,255,0) 60%);

準(zhǔn)備工作做好了,下面看 3 種不同場(chǎng)景的實(shí)現(xiàn)。

二、文本掃光

首先來看文本掃光。

由于掃光在文本內(nèi)部,所以需要將這個(gè)漸變作為文本的顏色。文本漸變色,可以用backgrond-clip:text來實(shí)現(xiàn),假設(shè)HTML是這樣的。

<h1 class="shark-txt">前端偵探</h1>

為了讓效果看起來更加明顯,我們用一個(gè)比較粗的字體。

h1{
  font-size: 60px;
  font-family: "RZGFDHDHJ";
  font-weight: normal;
  color: #9747FF;
}

效果如下:

圖片圖片

現(xiàn)在我們通過background-clip來添加掃光,由于是裁剪背景,所以需要將當(dāng)前文本顏色設(shè)置透明,建議通過-webkit-text-fill-color: transparent來設(shè)置,這樣可以保留文本原有顏色,好處是其他地方,比如background-color可以直接使用原有文本顏色currentColor,具體實(shí)現(xiàn)如下:

.shark-txt{
  -webkit-text-fill-color: transparent;
  background: linear-gradient(45deg, rgba(255,255,255,0) 40%, rgba(255, 255, 255, 0.7), rgba(255,255,255,0) 60%) -100%/50% no-repeat currentColor;
  -webkit-background-clip: text;
}

效果如下:

圖片

最后就是讓這個(gè)掃光動(dòng)起來了。

由于是在文本內(nèi)部,所以這里可以通過改變background-position來實(shí)現(xiàn)掃光動(dòng)畫了,動(dòng)畫很簡(jiǎn)單,如下:

@keyframes shark-txt {
  form{
    background-position: -100%;
  }
  to {
    background-position: 200%;
  }
}

但是這樣做沒有動(dòng)畫效果,完全不會(huì)動(dòng)。

這是因?yàn)楸尘澳J(rèn)尺寸是100%,根據(jù)背景偏移百分比的計(jì)算規(guī)則,當(dāng)背景尺寸等于容器尺寸時(shí),百分比完全失效,具體規(guī)則如下

給定背景圖像位置的百分比偏移量是相對(duì)于容器的。值 0% 表示背景圖像的左(或上)邊界與容器的相應(yīng)左(或上)邊界對(duì)齊,或者說圖像的 0% 標(biāo)記將位于容器的 0% 標(biāo)記上。值為 100% 表示背景圖像的 右(或 下)邊界與容器的 右(或 下)邊界對(duì)齊,或者說圖像的 100% 標(biāo)記將位于容器的 100% 標(biāo)記上。因此 50% 的值表示水平或垂直居中背景圖像,因?yàn)閳D像的 50% 將位于容器的 50% 標(biāo)記處。類似的,background-position: 25% 75% 表示圖像上的左側(cè) 25% 和頂部 75% 的位置將放置在距容器左側(cè) 25% 和距容器頂部 75% 的容器位置。

https://developer.mozilla.org/zh-CN/docs/Web/CSS/background-position


(container width - image width) * (position x%) = (x offset value)
(container height - image height) * (position y%) = (y offset value)

所以這種情況下,我們可以手動(dòng)改小一點(diǎn)背景尺寸,比如50%

.shark-txt {
    -webkit-text-fill-color: transparent;
    background: linear-gradient(45deg, rgba(255, 255, 255, 0) 40%, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0) 60%) -100% / 50% no-repeat currentColor;
    -webkit-background-clip: text;
    animation: shark-txt 2s infinite;
}

這樣就能完美實(shí)現(xiàn)文本掃光效果了。

圖片圖片

三、卡片容器掃光

還有一種比較常見的是容器內(nèi)的掃光動(dòng)效,通常是在一個(gè)圓角矩形的容器里。

像這種情況下就不能直接用背景漸變了,因?yàn)闀?huì)被容器內(nèi)的其他元素覆蓋。所以我們需要?jiǎng)?chuàng)建一個(gè)偽元素,然后通過改變偽元素的位移來實(shí)現(xiàn)掃光動(dòng)畫了。

假設(shè)有一個(gè)容器,容器內(nèi)有一張圖片,HTML如下:

<div class="shark-wrap card">
    <img src="https://imgservices-1252317822.image.myqcloud.com/coco/b11272023/ececa9a5.7y0amw.jpg">
</div>

簡(jiǎn)單修飾一下:

.card{
  width: 300px;
  border-radius: 8px;
  background-color: #FFE8A3;
}
.card img{
  display: block;
  width: 100%;
}

效果如下:

圖片圖片

下面通過偽元素來創(chuàng)建一個(gè)掃光層,設(shè)置位移動(dòng)畫。

.shark-wrap::after{
  content: '';
  position: absolute;
  inset: -20%;
  background: linear-gradient(45deg, rgba(255,255,255,0) 40%, rgba(255, 255, 255, 0.7), rgba(255,255,255,0) 60%);
  animation: shark-wrap 2s infinite;
  transform: translateX(-100%);
}
@keyframes shark-wrap {
  to {
    transform: translateX(100%);
  }
}

效果如下:

圖片圖片

最后直接超出隱藏就行了。

.shark-wrap{
  overflow: hidden;
}

最終效果如下:

圖片圖片

也適合那種圓形頭像。

圖片圖片

四、不規(guī)則圖片掃光

其實(shí)前面兩種情況已經(jīng)適合大部分場(chǎng)景了,其實(shí)還有一種情況,就是那種不規(guī)則的圖片掃光。這種圖片無法直接通過overflow:hidden去隱藏多余部分,比如這樣。

圖片圖片

很明顯在圖片之外的地方也出現(xiàn)了掃光,無法做到掃光在圖形的"內(nèi)部"。

那么,有沒有辦法根據(jù)圖片的外形去裁剪呢?當(dāng)然也是有辦法的,這里需要用到CSS mask遮罩。

簡(jiǎn)單來說,就是直接將該圖片作為遮罩圖片,這樣只有形狀內(nèi)的部分可見,形狀外的直接被裁剪了

圖片圖片

在上一種場(chǎng)景的情況下,只需要在此基礎(chǔ)之上,添加一個(gè)完全相同的 mask遮罩就行了。

<div class="shark-wrap" style="-webkit-mask: url(https://imgservices-1252317822.image.myqcloud.com/coco/s09252023/3af9e8de.00uqxe.png) 0 0/100%">
  <img class="logo" src="https://imgservices-1252317822.image.myqcloud.com/coco/s09252023/3af9e8de.00uqxe.png">
</div>

這樣就可以把掃光多余的部分裁剪掉了。

圖片圖片

換張圖也能很好適配:

圖片圖片

以上所有 demo 可以查看以下鏈接

  • CSS shark animation (codepen.io)[1]
  • CSS shark animation (juejin.cn)[2]

五、總結(jié)一下

以上就本文的全部內(nèi)容了,共介紹了3種不同的掃光場(chǎng)景,你學(xué)到了嗎?下面總結(jié)一下重點(diǎn):

  1. 掃光樣式本身可以直接用線性漸變繪制而成
  2. 掃光動(dòng)畫原理很簡(jiǎn)單,就是一個(gè)水平的位移動(dòng)畫
  3. 文本掃光動(dòng)畫需要通過改變background-postion實(shí)現(xiàn)
  4. 當(dāng)背景尺寸等于容器尺寸時(shí),設(shè)置background-postion百分比無效
  5. 普通容器的掃光效果需要借助偽元素實(shí)現(xiàn),因?yàn)槿绻褂帽尘皶?huì)被容器內(nèi)的元素覆蓋
  6. 普通容器的掃光動(dòng)畫可以直接用transfrom實(shí)現(xiàn)
  7. 使用overflow:hidden裁剪容器外的部分
  8. 不規(guī)則圖片的掃光效果無法直接根據(jù)形狀裁剪
  9. 借助CSS mask可以根據(jù)圖片本身裁剪掉掃光多余部分

對(duì)了,這個(gè)屬于常規(guī)需求,只是普通的動(dòng)畫效果,沒有兼容性限制,放心使用,除了本文的樣式,還可以根據(jù)需求改變掃光的大小,角度,顏色等,這個(gè)就看具體需求了。

責(zé)任編輯:武曉燕 來源: 前端偵探
相關(guān)推薦

2022-03-16 14:27:49

CSS三角形前端

2021-01-19 12:16:10

CSS前端UI

2023-12-04 09:31:13

CSS卡片

2013-01-04 15:47:54

Android開發(fā)平鋪UI設(shè)計(jì)

2010-08-24 14:47:48

CSS居中

2010-09-07 16:31:27

CSS

2010-09-02 16:26:59

CSS命名

2010-08-26 16:19:41

DIV圓角

2023-10-08 20:32:59

CSS定義Loading

2010-09-06 10:04:31

CSS樣式表

2010-09-14 15:10:49

CSS注釋

2022-09-15 10:30:06

CSS

2010-09-08 13:29:48

CSS

2014-12-31 17:42:47

LBSAndroid地圖

2021-06-24 08:52:19

單點(diǎn)登錄代碼前端

2021-11-05 21:33:28

Redis數(shù)據(jù)高并發(fā)

2010-09-01 12:50:04

CSS清除浮動(dòng)

2022-11-30 15:15:48

2018-04-02 14:29:18

Java多線程方式

2024-07-01 12:42:58

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)