91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

怎么使用純CSS仿AntDesign的Logo彩蛋效果

發布時間:2022-02-05 10:11:27 來源:億速云 閱讀:166 作者:柒染 欄目:web開發

這篇文章的內容主要圍繞怎么使用純CSS仿AntDesign的Logo彩蛋效果進行講述,文章內容清晰易懂,條理清晰,非常適合新手學習,值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!

最近項目中 Ant Design 接入比較多,還是非常不錯的。不知道大家有沒有發現這樣的效果,在官網上,如果鼠標放在Logo上,字母i上的圖標會不停的變化,離開后停止,放上去重新變化,算得上是一個小彩蛋(可能我之前沒發現),演示如下:

怎么使用純CSS仿AntDesign的Logo彩蛋效果

不過沒發現也不意外,因為這個效果是 js 實現的,必須等待加載完成才能生效,而官網有時候又特別的慢,比如像這種還在加載的情況下,大概率是不會有以上的hover效果的

怎么使用純CSS仿AntDesign的Logo彩蛋效果

嗯,思考了一下,這種效果完全可以用純 CSS 來完成呀,實現成本又低,又能有效避免上述的加載問題,一起看看吧

一、CSS 實現原理

整個實現原理大致如下

  • 準備一個包含所有小圖標的素材

  • 創建一個改變背景位置的CSS逐幀動畫

  • 通過鼠標 hover 來控制動畫運行

二、素材準備

為了避免多次請求,也為了方便創建動畫,這里把所有小圖標素材組合在一塊(從官網另存下來的),就像以前的“雪碧圖”一樣,如下

怎么使用純CSS仿AntDesign的Logo彩蛋效果

假設 HTML 結構是這樣的

<h2 class="logo">Ant Design</h2>

為了更好的語義化,這里的文字建議保留,然后通過其他方式隱藏文字(比如透明度),可以將 logo 作為背景圖片,然后可變化的小圖標用偽元素生成(裝飾性的元素都可以用偽元素來生成,保證HTML的整潔),CSS 如下

.logo{
  width: 500px;
  height: 100px;
  position: relative;
  color: transparent;
  background: url('https://imgservices-1252317822.image.myqcloud.com/image/012420220165011/c0e82c29.svg') center/contain no-repeat;
  cursor: pointer;
}
.logo::after{
  content: '';
  position: absolute;
  width: 32px;
  height: 32px;
  background: url('https://imgservices-1252317822.image.myqcloud.com/image/012420220165415/b0005044.svg') 0 / cover no-repeat;
  right: 113px;
  top: -18px;
}

靜態布局就算出來了

怎么使用純CSS仿AntDesign的Logo彩蛋效果

二、CSS 逐幀動畫

然后是動畫,只需要利用 CSS  動畫函數中的 steps() 功能符,就可以實現逐幀動畫

首先定義一個關鍵幀,改變背景位置就行了

@keyframes random {
  to {
    background-position: 100%;
  }
}

這里小圖標總共有 11 張,相互之間的變化就是 10 步,所以動畫設置如下

.logo::after{
	/*其他樣式*/
  animation: random 1s steps(10) infinite;
}

這樣就得到了一個無限循環的逐幀動畫

怎么使用純CSS仿AntDesign的Logo彩蛋效果

三、CSS動畫的暫停與運行

默認情況下,CSS動畫是默認運行的,但是現在的需求是,只有鼠標 hover 上去才會動起來。

可能有同學會這樣做,默認情況下沒有動畫,hover 的時候創建動畫,如下

.logo::after{
	/*默認無動畫*/
}
.logo:hover::after{
  animation: random 1s steps(10) infinite;
}

但是這樣做會有兩個問題:

  • 每次實時創建動畫會有更多的性能消耗

  • 每次鼠標離開后位置就還原成初始狀態了

因此,這種方式并不可取

除了上述方式可以控制動畫運行之外,還可以通過animation-play-state主動設置暫停,如下

.logo::after{
	/*其他樣式*/
  animation: random 1s steps(10) infinite;
  animation-play-state: paused; /*動畫暫停*/
}

這樣下來,默認就不會動了,然后在hover的時候“運行”就行了

.logo:hover::after{
  animation-play-state: running; /*動畫運行*/
}


四、指定初始位置

現在默認是小圖標是第一個,如果想指定另外一個,比如

怎么使用純CSS仿AntDesign的Logo彩蛋效果

這種情況如何處理呢

首先我們想到,可以手動改變背景位置就行了,在第8個,所以

.logo::after{
  /*其他樣式*/
  background-position: -224px; /* 32 * 7 */
}

效果如下

怎么使用純CSS仿AntDesign的Logo彩蛋效果

這樣下來,問題更多,由于改變了動畫的起始位置,動畫從第 8 個的地方運動到最右側,左邊的都不經過了,step 也需要重新調整。

除了這種方式,還可以通過動畫的“負延遲”來實現,給動畫添加一個負的延遲后,動畫會提前運動到未來位置

比如這里想指定到未來第7幀的位置,就可以延遲負的總運動時長的 7/ 10 ,實現如下

.logo::after{
  /*其他樣式*/
  animation-delay: -.7s; /* 7 / 10 * 1s*/
}

這樣就不會影響原有的動畫了,完美實現

怎么使用純CSS仿AntDesign的Logo彩蛋效果

完整代碼可以訪問:Ant Design Logo (codepen.io)

https://codepen.io/xboxyan/pen/LYOPoxz

附上完整代碼(最近codepen貌似不太穩定)

.logo{
  width: 500px;
  height: 100px;
  position: relative;
  color: transparent;
  background: url('https://imgservices-1252317822.image.myqcloud.com/image/012420220165011/c0e82c29.svg') center/contain no-repeat;
  cursor: pointer;
}
.logo::after{
  content: '';
  position: absolute;
  width: 32px;
  height: 32px;
  background: url('https://imgservices-1252317822.image.myqcloud.com/image/012420220165415/b0005044.svg') 0 / cover no-repeat;
  right: 113px;
  top: -18px;
  animation: random 1s -.7s steps(10) infinite;
  animation-play-state: paused;
}
.logo:hover::after{
  animation-play-state: running;
}
@keyframes random {
  to {
    background-position: 100%;
  }
}

五、總結和說明

上面就是針對 Ant Design 官網 Logo 效果的 CSS 實現,代碼量非常少,而且也避免了 js 未加載完成時的問題,體驗更好,下面簡單總結一下

  • CSS 渲染是及時的,只要頁面可見,就不會影響 CSS 交互

  • 逐幀動畫可以通過 CSS 動畫 中的 step() 函數實現

  • CSS 動畫可以自動運行,也可以手動暫停

  • 通過設置負的延時,可以讓 CSS 動畫提前運行

當然,CSS 的優點還不只這些,打開 Ant Design 控制臺,讓我有點崩潰的是,居然是不斷更換svg鏈接實現的,如果一直放在 Logo 上就會源源不斷的請求圖片,小圖標也會出現“閃爍”的情況

怎么使用純CSS仿AntDesign的Logo彩蛋效果

感謝你的閱讀,相信你對“怎么使用純CSS仿AntDesign的Logo彩蛋效果”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關知識點,可以關注億速云網站!小編會繼續為大家帶來更好的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德庆县| 邯郸县| 河东区| 克拉玛依市| 贵溪市| 珲春市| 荆州市| 南汇区| 无为县| 宁波市| 阿拉善盟| 长春市| 普宁市| 崇义县| 泰宁县| 策勒县| 太湖县| 子长县| 盘山县| 长垣县| 习水县| 望都县| 石城县| 山东省| 壤塘县| 雅安市| 库车县| 呈贡县| 珠海市| 金沙县| 江城| 普洱| 边坝县| 双桥区| 巴东县| 朝阳县| 民丰县| 汉川市| 伊春市| 张北县| 长乐市|