【HTML+CSS】042.自定義加載動畫(學習打卡!)

效果展示

在這里插入圖片描述

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: #263238;
}

section {
  width: 650px;
  height: 300px;
  padding: 10px;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  /* 紅色邊框僅作提示 */
  border: 2px solid red;
}

span {
  width: 96px;
  height: 96px;
  display: inline-block;
  position: relative;
  color: white;
  animation: rotation 1s linear infinite;
}

span::before, span::after {
  content: '';
  position: absolute;
  width: 48px;
  height: 48px;
  top: 50%;
  left: 50%;
  transform: scale(0.5) translate(0, 0);
  background-color: white;
  border-radius: 50%;
  animation: animloader 2s infinite ease-in-out;
}

span::before {
  background-color: red;
  transform: scale(0.5) translate( -96px, -96px);
}

@keyframes rotation {
  0% {
    transform: rotate(0deg)
  }
  100% {
    transform: rotate(360deg)
  }
}

@keyframes animloader {
  50% {
    transform: scale(1) translate(-50%, -50%)
  }
}

原理詳解

步驟1

使用span標簽啦桌,設置為

  • 寬度、高度均為96px
  • 背景色:quamarine(這里只是為了先顯示span及皂,后面會刪除的)
  • 相對定位
span {
  width: 96px;
  height: 96px;
  position: relative;
  background-color: aquamarine;
}

效果圖如下

在這里插入圖片描述

步驟2

使用span::before甫男、span::after偽類元素

設置

  • 絕對定位(top:50% left:50%)
  • 寬度、高度均為48px
  • 背景色:白色
span::before, span::after {
  content: '';
  position: absolute;
  width: 48px;
  height: 48px;
  top: 50%;
  left: 50%;
  background-color: white;
}

效果圖如下

在這里插入圖片描述

步驟3

將span::before验烧、span::after同比例縮小為原來的50%

transform: scale(0.5) ;

效果圖如下

在這里插入圖片描述

步驟4

分離span::before板驳、span::after

再對span::before進行設置

  • 背景色變?yōu)榧t色
  • 向左上角移動
span::before {
  background-color: red;
  /*這里有點需要注意*/
  /*下面代碼并不是先縮小50% 再左移、上移96px*/
  /*而是縮小50% 再左移碍拆、上移48px*/
  transform: scale(0.5) translate( -96px, -96px);
}

效果圖如下

在這里插入圖片描述

步驟5

對span::before若治、span::after圓角化

border-radius: 50%;

效果圖如下

在這里插入圖片描述

步驟6

取消span背景色

效果圖如下

在這里插入圖片描述

步驟7

為span::before、span::after添加動畫

動畫需要實現(xiàn)的效果

  • 紅色小球向右下角移動 白色小球向左上角移動 倔监,在原兩小球距離中間點重合直砂,然后再原路返回
  • 初始大小為0.5 再不斷變大 到重合的位置為1 (相對于原大小)浩习,然后再逆向變化
span::before, span::after {
   animation: animloader 2s infinite ease-in-out; 
}
@keyframes animloader {
  50% {
    transform: scale(1) translate(-50%, -50%)
  }
}

效果圖如下(僅該動畫生效時)

在這里插入圖片描述

動畫理解

對于白球來說

  • 開始(0%) 是位于translate(0, 0)静暂,也就是不移動,待在原來位置谱秽;
  • 50% 時位于translate(-50%, -50%)洽蛀,也就是向左移摹迷、上移相對于自身寬度(或高度)的50%,也就是左移郊供、上移24px峡碉;
  • 100%時,又回到原位置

對于紅球來說

  • 開始(0%) 由ranslate(0, 0)的位置移動至驮审;ranslate(-96px, -96px)鲫寄,也就是已經(jīng)左移、上移96px疯淫;
  • 50% 時位于translate(-50%, -50%)地来,意思是相對于translate(0, 0)的位置,只需要左移熙掺、上移自身的50%未斑,也就是24px;
  • 100%時币绩,又回到原位置

記住translate(-50%, -50%)執(zhí)行時蜡秽,參照的是元素的最開始的位置

步驟8

為span添加動畫

  • 順時針旋轉(zhuǎn)(0-360度) 無限循環(huán)

效果圖如下(僅該動畫生效時)

在這里插入圖片描述

步驟9

將步驟8、步驟9的動畫同時疊加

效果圖如下

在這里插入圖片描述

疑點

步驟4中的 transform: scale(0.5) translate( -96px, -96px);為什么實際只移動了48px缆镣?

這里海轟還是有一點點的懵 芽突, 不是非常確定真正的理由是什么

下面就說說自己的理解吧

首先,若執(zhí)行 transform: scale(1) translate( -96px, -96px);

注:span邊長為96px 费就, 紅色诉瓦、白色部分邊長為48px

原after不縮放的情況下


在這里插入圖片描述

當原after縮放50%時


在這里插入圖片描述

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

對于span::before, span::after中設置的縮放不影響之后單獨對before設置的影響

代碼的執(zhí)行原理

執(zhí)行 transform: scale(.5) translate( -96px, -96px);(原after不縮放時)

在這里插入圖片描述

可以理解為

scale(.5) 不僅對圖像的大小進行了縮放,還對translate( -96px, -96px);進行了等比例的縮放

也就是實際左移力细、上移都是48px

在這里插入圖片描述

然后再執(zhí)行 scale(.5)對原來圖像的縮放

在這里插入圖片描述

不知道這樣理解對不對~

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末睬澡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子眠蚂,更是在濱河造成了極大的恐慌煞聪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逝慧,死亡現(xiàn)場離奇詭異昔脯,居然都是意外死亡,警方通過查閱死者的電腦和手機笛臣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門云稚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沈堡,你說我怎么就攤上這事静陈。” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵鲸拥,是天一觀的道長拐格。 經(jīng)常有香客問我,道長刑赶,這世上最難降的妖魔是什么捏浊? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮撞叨,結(jié)果婚禮上金踪,老公的妹妹穿的比我還像新娘。我一直安慰自己谒所,他們只是感情好热康,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布沛申。 她就那樣靜靜地躺著劣领,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铁材。 梳的紋絲不亂的頭發(fā)上尖淘,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音著觉,去河邊找鬼村生。 笑死,一個胖子當著我的面吹牛饼丘,可吹牛的內(nèi)容都是我干的趁桃。 我是一名探鬼主播皮获,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼包雀,長吁一口氣:“原來是場噩夢啊……” “哼煌贴!你這毒婦竟也來了刚操?” 一聲冷哼從身側(cè)響起比庄,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碰缔,失蹤者是張志新(化名)和其女友劉穎腺律,沒想到半個月后侈玄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逮诲,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡帜平,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了梅鹦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裆甩。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖齐唆,靈堂內(nèi)的尸體忽然破棺而出嗤栓,到底是詐尸還是另有隱情,我是刑警寧澤蝶念,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布抛腕,位于F島的核電站芋绸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏担敌。R本人自食惡果不足惜摔敛,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望全封。 院中可真熱鬧马昙,春花似錦、人聲如沸刹悴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽土匀。三九已至子房,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間就轧,已是汗流浹背证杭。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妒御,地道東北人解愤。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像乎莉,于是被迫代替她去往敵國和親送讲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

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