1. 程式人生 > 其它 >CSS3的loading製作,讓頁面載入時不再單調

CSS3的loading製作,讓頁面載入時不再單調

頁面的loading效果一直都是個比較重要的製作,往往一個好的載入效果可以有效的提升使用者體驗。而實際開發中,loading效果具體該如何製作?前端工程師又會有哪些特殊的技能呢?

本文主要內容

1、效果展示

2、主要涉及到的知識點

3、基本實現思路

4、案例實現

5、總結

1、效果展示

CSS3效果的製作不在於那些語句、命令,而是在於如何把語句組合到一起來實現實際效果。換句話說,CSS3效果只有想不到的,但是沒有做不到的。下圖就是一個開發中常用到的loading效果展示。

2、主要涉及到的知識點

此效果的實現並不是很難,只需要藉助之前CSS3文章系列中講解過的圓角、變形、動畫,在配合上相應的位置定位即可實現,具體我們來分析下需要用到的知識點。

1)CSS3圓角

主要功能是為標籤新增圓角樣式,有如下的屬性:

border-radius : none | percent;

none代表的是不設定圓角,percent表示可以使用百分數實現圓角的設定,如下:

border-radius: 50%;

2)CSS3變形

CSS3的變形主要是transform提供的幾種方式,包含旋轉、平移、扭曲、縮放等等。在本例中主要使用到的是旋轉,用於實現圓環的變化效果。

其主要使用方式如下:

transform: rotate(30deg);

通過指定的角度引數對元素指定一個旋轉,其中angle是指旋轉角度,如果設定的值為正數表示順時針旋轉,如果設定的值為負數,則表示逆時針旋轉。

3)CSS3動畫

藉助CSS3的animation來實現圓環的轉動效果,配合關鍵幀keyframe,讓圓環在不同的旋轉時期發生不一樣的變化。其主要使用方式如下:

animation: fadeOut 1s linear 0.2s infinite;

上述程式碼中,屬性從左往右依次代表的是:動畫的名稱(由keyframe定義)、動畫的時間、動畫的速度曲線、動畫的延遲時間、動畫的播放次數(infinite表示無限迴圈)。

3、基本實現思路

利用兩個div來實現左右各半的位置大小製作,然後藉助圓角邊框實現圓環樣式的控制,讓原來是方形的塊變成圓形;之後控制不同方向上的邊框顏色,調整最佳的視覺效果;最後利用CSS3的動畫,實現圓環的轉動,以及顏色的變化效果。

4、案例實現

基本的HTML結構如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>H5course</title>
    <link rel="stylesheet" type="text/css" href="css/reset.css" />
    <style type="text/css">


    </style>
</head>
<body>
<div class="progress">
    <div class="wrapper right">
        <div class="circleProgress rightcircle"></div>
    </div>
    <div class="wrapper left">
        <div class="circleProgress leftcircle"></div>
    </div>
    <div class="loading">
        loading
        <em>.</em>
        <em>.</em>
        <em>.</em>
    </div>
</div>
</body>
</html>

相應的樣式書寫如下:

.progress {
    position: relative;
    width: 200px;
    height: 200px;
    margin: 150px auto;
    line-height: 200px;
    text-align: center;
    font-size: 25px;
}
.wrapper {
    position: absolute;
    top: 0;
    overflow: hidden;
    width: 100px;
    height: 200px;
}
.right {
    right: 0;
}
.left {
    left: 0;
}
.circleProgress {
    position: absolute;
    top: 0;
    width: 160px;
    height: 160px;
    border: 20px solid rgb(232, 232, 12);
    border-radius: 50%;
    transform: rotate(45deg);
}
.rightcircle {
    right: 0;
    border-top: 20px solid green;
    border-right: 20px solid green;
    animation: right 5s linear infinite;
}
.leftcircle {
    left: 0;
    border-bottom: 20px solid green;
    border-left: 20px solid green;
    animation: left 5s linear infinite;
}
@keyframes right {   
    0% {
        border-top: 20px solid #ed1a1a;
        border-right: 20px solid #ed1a1a;
        -webkit-transform: rotate(45deg);
    }
    50% {
        border-top: 20px solid rgb(232, 232, 12);
        border-right: 20px solid rgb(232, 232, 12);
        border-left: 20px solid rgb(81, 197, 81);
        border-bottom: 20px solid rgb(81, 197, 81);
        transform: rotate(225deg);
    }
    100% {
        border-left: 20px solid green;
        transform: rotate(225deg);
    }
}
@keyframes left {
    0% {
        border-bottom: 20px solid #ed1a1a;
        border-left: 20px solid #ed1a1a;
        transform: rotate(45deg);
    }
    50% {
        border-top: 20px solid rgb(81, 197, 81);
        border-right: 20px solid rgb(81, 197, 81);
        border-bottom: 20px solid rgb(232, 232, 12);
        border-left: 20px solid rgb(232, 232, 12);
        transform: rotate(45deg);
    }
    100% {   
        border-top: 20px solid green;
        border-right: 20px solid green;
        border-bottom: 20px solid green;
        border-left: 20px solid green;
        transform: rotate(225deg);
    }
}
.loading em:nth-child(1) { 
    animation: fadeOut 1s linear 0.2s infinite; 
}
.loading em:nth-child(2) {
    animation: fadeOut 1s linear 0.6s infinite; 
}
.loading em:nth-child(3) {
    animation: fadeOut 1s linear 1s infinite;
}
@keyframes fadeOut {
    0% {opacity: 1;}
    100% {opacity: 0;}
}

如上,CSS3效果就已經搞定了~很簡單的解決了loading的效果,同時適合在移動端中應用。

顯示的效果:

5、總結

此效果採用的是兩個div各佔父級一半大小的佈局方式,然後藉助定位實現兩個半圓的完美拼接,最後針對邊框的不同方向,給予不同的顏色變化,配合上動畫的效果,實現最終的圓環轉動與相應的顏色變換。