【動畫消消樂|CSS】 單span標簽實現(xiàn)自定義簡易過渡動畫 076

前言

Hello!小伙伴瘦真!

非常感謝您閱讀海轟的文章属铁,倘若文中有錯誤的地方憎夷,歡迎您指出~

?

自我介紹 ?(?ˊ?ˋ)?

昵稱:海轟

標簽:程序猿|C++選手|學生

簡介:因C語言結(jié)識編程,隨后轉(zhuǎn)入計算機專業(yè)躬柬,有幸拿過國獎耐床、省獎等,已保研楔脯。目前正在學習C++/Linux(真的真的太難了~)

學習經(jīng)驗:扎實基礎(chǔ) + 多做筆記 + 多敲代碼 + 多思考 + 學好英語撩轰!

?
<font color="red" font-wight="800">【動畫消消樂】</font> 平時學習生活比較枯燥,無意之間對一些網(wǎng)頁、應(yīng)用程序的過渡/加載動畫產(chǎn)生了濃厚的興趣堪嫂,想知道具體是如何實現(xiàn)的偎箫? 便在空閑的時候?qū)W習下如何使用css實現(xiàn)一些簡單的動畫效果,文章僅供作為自己的學習筆記皆串,記錄學習生活淹办,爭取理解動畫的原理,多多“消滅”動畫恶复!

效果展示

在這里插入圖片描述

Demo代碼

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
    <section><span></span></section>
</body>
</html>

CSS

html, body {
  margin: 0;
  height: 100%;
}

body {
  display: flex;
  justify-content: center;
  align-items: center;
  background: #ed556a;
}

section {
  width: 650px;
  height: 300px;
  padding: 10px;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 2px solid white;
}

span {
  width: 5px;
  height: 5px;
  display: inline-block;
  position: relative;
  border-radius: 4px;
  background: white;
  animation: loading 1s 0s linear infinite alternate;
}

span::before, span::after {
  content: '';
  width: 5px;
  height: 5px;
  border-radius: 4px;
  background: white;
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  top: 15px;
  animation: loading 1s 0.6s linear infinite alternate;
}

span::after {
  top: -15px;
  animation-delay: 0.9s;
}

@keyframes loading {
  0% {
    width: 5px;
  }
  100% {
    width: 48px;
  }
}

原理詳解

步驟1

使用span標簽 設(shè)置為

  • 相對定位
  • 寬度怜森、高度均為5px
  • 背景色:白色
  • border-radius: 4px;
 span {
    width: 5px;
    height: 5px;
    position: relative;
    border-radius: 4px;
    background: white;
  }

效果圖如下


在這里插入圖片描述

步驟2

使用span::before、span::after偽元素

同時設(shè)置為

  • 絕對定位
  • 寬度谤牡、高度均為5px
  • 背景色:白色
  • border-radius: 4px;
  span::before, span::after {
    content: '';
    width: 5px;
    height: 5px;
    border-radius: 4px;
    background: white;
    position: absolute;
    
    /* 重點 */
    left: 50%;
    transform: translateX(-50%);
    top: 15px;
  }

效果圖如下

在這里插入圖片描述

特別注意副硅,這里絕對位置關(guān)系為

    left: 50%;
    transform: translateX(-50%);
    top: 15px;

具體這樣設(shè)置的原因后面說明一下

步驟3

分離before和after

使after位于span之上

與after形成關(guān)于span對稱

  span::after {
    top: -15px;
  }

效果圖如下


在這里插入圖片描述

步驟4

為span添加動畫

動畫很簡單

只是span的寬度屬性隨著時間而變化

  • 初始狀態(tài):寬度為5px
  • 末尾狀態(tài):寬度為48px
  @keyframes loading {
    0% {
      width: 5px;
    }
    100% {
      width: 48px;
    }
  }  
  span {
    animation: loading 1s 0s linear infinite alternate;
  }

效果圖如下

在這里插入圖片描述

步驟5

對span::after、span::before使用同樣的動畫

為了實現(xiàn)不同步的效果

分別設(shè)置不同的動畫開始延時時間即可

 span::before, span::after {
    animation: loading 1s 0.6s linear infinite alternate;
  }
    
  span::after {
    animation-delay: 0.9s;
  }

效果圖如下

在這里插入圖片描述

疑難解釋

關(guān)鍵代碼為

    left: 50%;
    transform: translateX(-50%);
    top: 15px;

這三句代碼的意思是:

  • after翅萤、before位于span下方15px
  • 再向左移動 相當于span自身50%寬度的距離
  • 再向右移動 相當于span::after/before自身50%寬度的距離

如果只是

    left: 50%;
    top: 15px;

效果圖如下

在這里插入圖片描述

為什么會出現(xiàn)這種效果呢恐疲?

首先span是海轟事先設(shè)置一直位于整個容器正中的,如果只有left: 50%;套么,說明before培己、after在橫軸方向一直是相對于span最左端移動了相對于span自身50%的距離,無論span寬度怎么變化胚泌,它的50%一直都是在中間省咨,所以before、after最左端相當于固定了

而使用 就可以實現(xiàn)span和span::after/before的中心處于同一直線上

    left: 50%;
    transform: translateX(-50%);
    top: 15px;

只需要記诅枋摇:

  • left: 50%;是向左移動相當于span50%寬度的距離
  • transform: translateX(-50%);是指向右移動相當于自身50%寬度的距離


    在這里插入圖片描述

可以發(fā)現(xiàn)

通過使用

    left: 50%;
    transform: translateX(-50%);

可以使得span和span::after/before中心處于同一條直線上(始終處于 動畫運行時也始終保持 因為設(shè)置的是百分比)

結(jié)語

文章僅作為學習筆記零蓉,記錄從0到1的一個過程

希望對您有所幫助,如有錯誤歡迎小伙伴指正~

我是 <font color="#0984e3">海轟?(?ˊ?ˋ)?</font>

如果您覺得寫得可以的話阵苇,請點個贊吧

謝謝支持??


在這里插入圖片描述
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市感论,隨后出現(xiàn)的幾起案子绅项,更是在濱河造成了極大的恐慌,老刑警劉巖比肄,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件快耿,死亡現(xiàn)場離奇詭異,居然都是意外死亡芳绩,警方通過查閱死者的電腦和手機掀亥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妥色,“玉大人搪花,你說我怎么就攤上這事。” “怎么了撮竿?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵吮便,是天一觀的道長。 經(jīng)常有香客問我幢踏,道長髓需,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任房蝉,我火速辦了婚禮僚匆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搭幻。我一直安慰自己咧擂,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布粗卜。 她就那樣靜靜地躺著屋确,像睡著了一般。 火紅的嫁衣襯著肌膚如雪续扔。 梳的紋絲不亂的頭發(fā)上攻臀,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音纱昧,去河邊找鬼刨啸。 笑死,一個胖子當著我的面吹牛识脆,可吹牛的內(nèi)容都是我干的设联。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼灼捂,長吁一口氣:“原來是場噩夢啊……” “哼离例!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悉稠,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤宫蛆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后的猛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耀盗,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年卦尊,在試婚紗的時候發(fā)現(xiàn)自己被綠了叛拷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡岂却,死狀恐怖忿薇,靈堂內(nèi)的尸體忽然破棺而出裙椭,到底是詐尸還是另有隱情,我是刑警寧澤煌恢,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布骇陈,位于F島的核電站,受9級特大地震影響瑰抵,放射性物質(zhì)發(fā)生泄漏你雌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一二汛、第九天 我趴在偏房一處隱蔽的房頂上張望婿崭。 院中可真熱鬧,春花似錦肴颊、人聲如沸氓栈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽授瘦。三九已至,卻和暖如春竟宋,著一層夾襖步出監(jiān)牢的瞬間提完,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工丘侠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留徒欣,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓蜗字,卻偏偏與公主長得像打肝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子挪捕,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容