使用CSS時間打點的Loading效果的教程

基于box-shadow實現的打點效果
理論上,box-shadow可以實現任意的圖形效果,自然我們可以利用box-shadow生成我們的點效果,然后通過animation控制不同時間點點的數目就可以實現點點點... loading效果了~
您可以狠狠地點擊這里:CSS3 animation box-shadow漸進實現打點動畫demo
1. 漸進兼容
支持CSS3 animation動畫的瀏覽器顯示的就是打點動畫效果;對于不支持的瀏覽器,IE7/IE8顯示的是真實的字符..., IE9瀏覽器雖然也是CSS3生成,但是是靜態(tài)的,沒有動畫效果;此乃漸進兼容。
2. 實現原理
首先HTML非常簡單,就是一個標簽一個類名(標簽里面一定要空空如也),其他什么都不需要關心,就可以游刃幾乎各種場景,如下:
- 訂單提交中<span class="dotting"></span>
上面代碼這個類名為dotting的span就是我們所有的玄機所在,頁面任意地方,只要有這一小撮HTML就可以有打點動畫,與文字混排良好,且顏色自動匹配。例如,本文“標題一”和“標題二”后面的點點點動畫就是添加了這么點HTML.
下面是萬眾矚目的CSS代碼了:
- .dotting {
- display: inline-block; min-width: 2px; min-height: 2px;
- box-shadow: 2px 0 currentColor, 6px 0 currentColor, 10px 0 currentColor; /* for IE9+, ..., 3個點 */
- animation: dot 4s infinite step-start both; /* for IE10+, ... */
- *zoom: expression(this.innerHTML = '...'); /* for IE7. 若無需兼容IE7, 此行刪除 */
- }
- .dotting:before { content: '...'; } /* for IE8. 若無需兼容IE8, 此行以及下一行刪除*/
- .dotting::before { content: ''; } /* for IE9+ 覆蓋 IE8 */
- :root .dotting { margin-right: 8px; } /* for IE9+,FF,CH,OP,SF 占據空間*/
- @keyframes dot {
- 25% { box-shadow: none; } /* 0個點 */
- 50% { box-shadow: 2px 0 currentColor; } /* 1個點 */
- 75% { box-shadow: 2px 0 currentColor, 6px 0 currentColor; /* 2個點 */ }
- }
上面每行CSS都有其存在的道理(詳見注釋),這里我們又看到了currentColor這個關鍵字,IE9+瀏覽器支持,其可以讓CSS生成的圖形的顏色跟所處環(huán)境的color屬性值一樣,也就是跟文字顏色一樣,具體可參考我不久前寫的“currentColor-CSS3超高校級好用CSS關鍵字”一文。
我們動畫一個周期4秒鐘,每秒分別顯示的是0~3個點,使用step-start讓動畫不連續(xù)(animation所有關鍵字“CSS3 animation漸進實現點點點等待提示效果”這篇文章后面深藏詳細介紹,如有疑問,可參考),于是就有個類似gif打點動畫效果,相信不難理解。
3. 美中不足
雖然幾乎所有瀏覽器都有模有樣,但是,從效果上講,還是有瑕疵的,IE10+以及FireFox瀏覽器下的點的邊緣有些虛(參見下截圖),雖然CSS代碼并沒有設置盒陰影模糊。這種羽化現象可以讓IE以及FireFox在大數值盒陰影時候效果更接近photoshop的陰影效果;但是,在小尺寸陰影時候,并不是我們想要的。
苛刻的設計師、完美主義的處女座顯然是不能對這個置若罔聞的。好在,我又想了另外一種方法實現
基于border + background實現的打點效果
我們除了可以使用box-shadow生成三個點,還可以使用border + background-color實現等寬3點效果(如本標題)。
您可以狠狠地點擊這里:animation border+background漸進實現打點動畫demo
1. 漸進兼容
IE9以及IE10+以及FireFox的點再也不是模糊的,而是清清楚楚的小方點!
2. 實現原理
HTML還是那個HTML:
- 訂單提交中<span class="dotting"></span>
CSS代碼如下:
- .dotting {
- display: inline-block; width: 10px; min-height: 2px;
- padding-right: 2px;
- border-left: 2px solid currentColor; border-right: 2px solid currentColor;
- background-color: currentColor; background-clip: content-box;
- box-sizing: border-box;
- animation: dot 4s infinite step-start both;
- *zoom: expression(this.innerHTML = '...'); /* IE7 */
- }
- .dotting:before { content: '...'; } /* IE8 */
- .dotting::before { content: ''; }
- :root .dotting { margin-left: 2px; padding-left: 2px; } /* IE9+ */
- @keyframes dot {
- 25% { border-color: transparent; background-color: transparent; } /* 0個點 */
- 50% { border-right-color: transparent; background-color: transparent; } /* 1個點 */
- 75% { border-right-color: transparent; } /* 2個點 */
- }
一些說明:
- 同樣是4秒動畫,每秒鐘顯示1個點;
IE7/IE8實現原理跟上面box-shadow方法一致,都是內容生成,如果無需兼容IE7/IE8, 可以按照第一個例子CSS代碼注釋說明刪除一些CSS;
currentColor關鍵字可以讓圖形字符化,必不可少;
最大功臣是CSS3 background-clip屬性,可以讓IE9+瀏覽器下左右padding沒有背景色,于是形成了等分打點效果。CSS3 Background博大精深,有興趣可參考一篇很贊的文章“CSS3 Backgrounds相關介紹”,很多圖,移動端非wifi慎點;
box-sizing是讓現代瀏覽器和IE7/IE8占據寬度完全一樣的功臣:IE7/IE8實際寬度是width+padding-right為12像素,其他現代瀏覽器為width+margin-left也是12像素;
這里CSS代碼主要用來展示原理,故沒有顯示-webkit-animation以及@-webkit-keyframes私有前綴,實際目前還是需要的;
3. 優(yōu)勢所在
- CSS生成的點沒有虛化,效果更好;
占據的尺寸各個瀏覽器完全一致,都是12像素寬度;
顏色繼承;
天然字符化顯示,與文字渾然天成;
相關文章
- 這篇文章主要介紹了CSS 實現各種 Loading 效果附帶解析過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-19
- 這篇文章主要介紹了CSS loading效果之 吃豆人的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習2019-09-09
- 這篇文章主要介紹了CSS3動畫之DIY Loading動畫的相關資料,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-27
- 這是一款基于css3齒輪loading動畫特效,使用font-awesome字體圖標的齒輪圖標作為圖案,通過CSS3 animation來制作三個齒輪的運動效果。感興趣的朋友跟隨小編一起看看吧2018-09-27
- CSS的animation可以做出大多數的loading效果,今天腳本之家小編給大家?guī)砹嘶贑SS實現一個簡單loading動畫效果,非常不錯,需要的朋友參考下吧2018-04-17
- 本篇文章主要介紹了一份純CSS loading效果代碼示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-16
- 這篇文章主要介紹了用純CSS實現餅狀Loading等待圖效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-23
- 這篇文章主要為大家介紹了css實現葉子形狀loading效果的方法,通過修改border-radius的參數實現的該效果,非常具有實用價值,需要的朋友可以參考下2015-01-30
- 現如今網頁越來越趨近于動畫,相信大家平時瀏覽網頁或多或少都能看到一些動畫效果,今天我們來做一個有意思的動畫效果,純 css 實現 loading 加載中(多種展現形式),下面2023-02-08