溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何利用純CSS實現(xiàn)旋轉(zhuǎn)React圖標(biāo)的動畫效果

發(fā)布時間:2022-01-06 11:09:22 來源:億速云 閱讀:162 作者:柒染 欄目:web開發(fā)

如何利用純CSS實現(xiàn)旋轉(zhuǎn)React圖標(biāo)的動畫效果,針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

幾天前,小編在 codepen 看到一個劍氣加載效果,大為驚奇,再次被 CSS 折服。本來想和大家一起實現(xiàn)劍氣加載,搜索后小編發(fā)現(xiàn)同事已經(jīng)實現(xiàn)了。

絞盡腦汁,想到一個很有意思的圖案,簡直就是劍氣plus版。

react 圖標(biāo),太絕了,這不就是劍氣plus嗎?react 給小包動起來*!

如何利用純CSS實現(xiàn)旋轉(zhuǎn)React圖標(biāo)的動畫效果


react圖標(biāo)繪制

react 圖標(biāo)大家應(yīng)該都比較熟悉,由三個同樣大小的橢圓和一個中心圓組成。橢圓和圓使用 border-radius 實現(xiàn)。

  • 首先準(zhǔn)備三個橢圓和中心圓的 html 結(jié)構(gòu)

<div class="react">
    <div class="electron"></div>
    <div class="electron-alpha"></div>
    <div class="electron-omega"></div>
</div>
  • 三個橢圓是相同的,寫一個通用的橢圓樣式,得到三個重疊的橢圓。

.react > [class^="electron"] {
    border: #5ed3f3 solid 2px;
    border-radius: 100%;
    width: 100%;
    /* CSS變量 --electron-orbit-size值為72px */
    height: var(--electron-orbit-size); 
}

如何利用純CSS實現(xiàn)旋轉(zhuǎn)React圖標(biāo)的動畫效果

  • 設(shè)置第二個與第三個橢圓的傾角分別為 60deg-60deg

.electron-alpha {
    transform: rotate(60deg);
}
.electron-omega {
    transform: rotate(-60deg);
}
  • 使用 react: before 偽元素繪制中心圓,配合絕對定位,將中心圓定位至中心。react 圖標(biāo)繪制完成。

.react:before {
    position: absolute;
    top: 50%;
    left: 50%;
    width: var(--nucleus-size);
    height: var(--nucleus-size);
    margin-top: calc(var(--nucleus-size) / -2);
    margin-left: calc(var(--nucleus-size) / -2);
    background: var(--electron-color-hex);
}
.react > [class^="electron"] {
    position: absolute;
    top: 50%;
    margin-top: calc(var(--electron-orbit-size) / -2);
}

如何利用純CSS實現(xiàn)旋轉(zhuǎn)React圖標(biāo)的動畫效果

react圖標(biāo)動畫設(shè)計

天數(shù)五十,道衍四九,尚存一線生機,缺失有可能會形成特殊的美。

所以咱們就開始嘗試缺失一部分橢圓,看看是否會形成炫酷的動效?

假設(shè)開始狀態(tài)為 border-left 缺失,之后按照左下右上順序依次缺失,咱們來一起看一下動畫效果。

  • 設(shè)置動畫 electron-orbit 按順序切換缺失邊

@keyframes electron-orbit {
  0% {
    border-top: rgba(94, 211, 243, 1) solid 2px;
    border-right: rgba(94, 211, 243, 1) solid 2px;
    border-bottom: rgba(94, 211, 243, 1) solid 2px;
    border-left: rgba(94, 211, 243, 0) solid 2px;
  }
  25% {
    border-top: rgba(94, 211, 243, 1) solid 2px;
    border-right: rgba(94, 211, 243, 1) solid 2px;
    border-bottom: rgba(94, 211, 243, 0) solid 2px;
    border-left: rgba(94, 211, 243, 1) solid 2px;
  }
  50% {
    border-top: rgba(94, 211, 243, 1) solid 1px;
    border-right: rgba(94, 211, 243, 0) solid 2px;
    border-bottom: rgba(94, 211, 243, 1) solid 4px;
    border-left: rgba(94, 211, 243, 1) solid 2px;
  }
  75% {
    border-top: rgba(94, 211, 243, 0) solid 2px;
    border-right: rgba(94, 211, 243, 1) solid 2px;
    border-bottom: rgba(94, 211, 243, 1) solid 2px;
    border-left: rgba(94, 211, 243, 1) solid 2px;
  }
  100% {
    border-top: rgba(94, 211, 243, 1) solid 2px;
    border-right: rgba(94, 211, 243, 1) solid 2px;
    border-bottom: rgba(94, 211, 243, 1) solid 2px;
    border-left: rgba(94, 211, 243, 0) solid 2px;
  }
}

動畫的效果整體還是可以的,但是由于缺失部分為從 0 -> 1,透明度變化太大,導(dǎo)致動畫整體不連貫。

  • 降低顯示邊的透明度,分別為 0.5 0.35 0.2 0

降低透明度后,動畫連貫程度提升了很多,但線條感好差,接下來繼續(xù)修改線條的粗細。

  • 修改線條的粗細,粗細梯度分別為 4px 2px 1px 0px

三個橢圓使用同一個動畫,啟動時間相同,因此動畫節(jié)奏保持一致,看起來有幾分僵硬,咱們給每一個橢圓設(shè)置獨特的動畫節(jié)奏。

  • 給每個橢圓設(shè)置不同的動畫延遲時間,分別為 1.2s 1s 0.8s

添加小球動畫

只有線條動畫還是有幾分單調(diào),繼續(xù)來優(yōu)化,給缺少部分添加小球,小球隨著缺少部分移動,并且小球還伴有放大縮小效果。

@keyframes electron {
  0% {
    left: calc(var(--electron-size) / -1);
    transform: scale(1);
  }
  12.5% {
    top: 100%;
    transform: scale(1.5);
  }
  25% {
    left: 100%;
    transform: scale(1);
  }
  37.5% {
    top: 0%;
    transform: scale(0.25);
  }
  50% {
    left: calc(var(--electron-size) / -1);
    transform: scale(1);
  }
  62.5% {
    top: 100%;
    transform: scale(1.5);
  }
  75% {
    left: 100%;
    transform: scale(1);
  }
  87.5% {
    top: 0%;
    transform: scale(0.25);
  }
  100% {
    left: calc(var(--electron-size) / -1);
    transform: scale(1);
  }
}

如何利用純CSS實現(xiàn)旋轉(zhuǎn)React圖標(biāo)的動畫效果

怎么樣,看起來是不是有點東西了,別急,還有最后一步,讓圖標(biāo)動起來吧。

圖標(biāo)動起來

給圖標(biāo)整體添加旋轉(zhuǎn)和縮小放大動畫,完成最后的 react loading 效果吧

@keyframes react {
  0% {
    transform: rotate(0deg) scale(1);
  }
  12.5% {
    transform: rotate(-45deg) scale(0.9);
  }
  25% {
    transform: rotate(-90deg) scale(1);
  }
  37.5% {
    transform: rotate(-135deg) scale(0.9);
  }
  50% {
    transform: rotate(-180deg) scale(1);
  }
  62.5% {
    transform: rotate(-225deg) scale(0.9);
  }
  75% {
    transform: rotate(-270deg) scale(1);
  }
  87.5% {
    transform: rotate(-315deg) scale(0.9);
  }
  100% {
    transform: rotate(-360deg) scale(1);
  }
}

關(guān)于如何利用純CSS實現(xiàn)旋轉(zhuǎn)React圖標(biāo)的動畫效果問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI