CSS 3動畫介紹

原文:A Beginner’s Introduction to CSS Animationcss

譯文:一個初學者對CSS動畫的介紹html

譯者:dwqscss3

如今,愈來愈多的網站使用了動畫,而且形式多樣,如GIF、SVG、WebGL、背景視頻等等。當在web中恰當使用動畫時,它能夠給網站注入活力和良好的交互性,給用戶提供額外的一層反饋和體驗。web

在這篇文章,我將向你介紹CSS動畫,隨着瀏覽器對動畫支持的改善,一種高效率的作事方式變得愈來愈流行。考慮到基礎知識,我將快速創建一個從正方形變成圓形的動畫案例。chrome

先看看效果:http://jsfiddle.net/Web_Code/tchoafyh/embedded/result/瀏覽器

關於@keyframes和動畫的介紹

CSS動畫主要的組件是@keyframes,這個規則就是用來建立動畫的。將@keyframes看成是時間軸的不一樣階段,在其內部,你能夠自定義時間軸的不一樣階段,每一個階段有不一樣的CSS聲明。函數

而後,爲了使CSS動畫生效,須要將@keyframes和一個選擇器綁定。最後將會逐漸解析@keyframes內的所有代碼,以階段爲劃分,慢慢改變把最初的樣式變成新的樣式。工具

@keyframes元素

首先,定義動畫的分隔。@keyframes的屬性以下:動畫

一、選擇一個名字(在案例我選擇tutsFade)網站

二、階段劃分:0%–100%,從0%到100%

三、CSS樣式:你想要在每個階段用到的樣式

例如:

@keyframe tutsFade{
    0%{
        opacity:1;
    }
    100%{
        opacity:0;
    }
}


      或者:

@keyframe tutsFade{
     from{
           opacity:1;
     }
     to{
           opacity:0;
     }
}

還有一種簡寫形式:

@keyframe tutsFade{
     to{
           opacity:0;
     }
}

上述代碼將對元素的透明度應用一個過渡效果:從1到0,三種方式最終的效果相同。

動畫

Animation做爲一個選擇器去調用@keyframes。Animation有不少的屬性:

一、animation-name:@keyframes的名字(例如tutsFade)

二、animation-duration:動畫持續的時間

三、animation-timing-function:設置動畫的速度特效,能夠選擇linear/ease-in/ease/ease-out/ease-in-out/cubic-bezier

Center

四、animation-delay:動畫開始以前的時間延遲

五、animation-iteration-count:動畫循環的次數

六、animation-direction:規定動畫是否反向輪播,normal是默認值,正常播放;alternate表示動畫反向輪播

七、animation-fill-mode:規定動畫在播放以前或以後,其動畫效果是否可見(none/forwards/backwards/both)

Center

例如:

.element {
  animation-name: tutsFade;
  animation-duration: 4s;
  animation-delay: 1s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  animation-direction: alternate;
}

簡寫:

.element {
  animation: tutsFade 4s 1s infinite linear alternate;
}

添加私有前綴

須要添加特定瀏覽器的私有前綴以確保最好的瀏覽器支持:chrome&Safari:-webkit-;Firefox:-moz-;Opera:-o-;IE:-ms-
修改以下:

.element {
    -webkit-animation: tutsFade 4s 1s infinite linear alternate;
    -moz-animation: tutsFade 4s 1s infinite linear alternate;
    -ms-animation: tutsFade 4s 1s infinite linear alternate;
    -o-animation: tutsFade 4s 1s infinite linear alternate;
    animation: tutsFade 4s 1s infinite linear alternate;
}

@keyframes也同樣

@-webkit-keyframes tutsFade { /* your style */ }
@-moz-keyframes tutsFade { /* your style */ }
@-ms-keyframes tutsFade { /* your style */ }
@-o-keyframes tutsFade { /* your style */ }
@keyframes tutsFade { /* your style */ }

爲了獲得更多瀏覽器供應商的私有前綴,你能夠去http://css3please.com/,查找,上面提供了很是豐富的資源。

多動畫

能夠添加多個動畫,各個動畫之間用逗號分隔。

.element {
  animation: tutsFade 4s 1s infinite linear alternate,
             tutsRotate 4s 1s infinite linear alternate;
}
@keyframes tutsFade {
  to {
    opacity: 0;
  }
}
@keyframes tutsRotate {
  to {
    transform: rotate(180deg);
  }
}

方形到圓形的動畫教程

利用上面的規則,我將建立一個簡單的圖形動畫。總共會有5個階段,而且在每一個階段都會對元素定義不一樣的Border-radius,rotation和background-color。

一、基本元素

div {
  width: 200px;
  height: 200px;
  background-color: coral;
}

二、聲明Keyframes

建立一個名爲square-to-circle的keyframe元素,包含5個階段

@keyframes square-to-circle {
  0%  {
    border-radius:0 0 0 0;
    background:coral;
    transform:rotate(0deg);
  }
  25%  {
    border-radius:50% 0 0 0;
    background:darksalmon;
    transform:rotate(45deg);
  }
  50%  {
    border-radius:50% 50% 0 0;
    background:indianred;
    transform:rotate(90deg);
  }
  75%  {
    border-radius:50% 50% 50% 0;
    background:lightcoral;
    transform:rotate(135deg);
  }
  100% { 
    border-radius:50%;
    background:darksalmon;
    transform:rotate(180deg);
  }
}

三、應用動畫

將定義的動畫應用以前的div

div {
  width: 200px;
  height: 200px;
  background-color: coral;
  animation: square-to-circle 2s 1s infinite alternate; 
}

四、使用時間函數和添加私有前綴

最後要添加的一個動畫屬性是animation-timing-function,它對動畫元素的速度、加速和減速進行定義。一個相似的工具是:CSS Easing Animation Tool,可使用它來計算時間函數。

在案例中,我給動畫添加了一個cubic-bezier函數。

div {
  width: 200px;
  height: 200px;
  background-color: coral;
  animation: square-to-circle 2s 1s infinite cubic-bezier(1,.015,.295,1.225) alternate; 
}

爲了保證最好的瀏覽器支持,還必須添加私有前綴(沒有添加前綴的代碼以下)

div {
      width: 200px;
      height: 200px;
      background-color: coral;
      animation: square-to-circle 2s .5s infinite cubic-bezier(1,.015,.295,1.225) alternate;
    }


@keyframes square-to-circle {
  0%  {
    border-radius:0 0 0 0;
    background:coral;
    transform:rotate(0deg);
  }
  25%  {
    border-radius:50% 0 0 0;
    background:darksalmon;
    transform:rotate(45deg);
  }
  50%  {
    border-radius:50% 50% 0 0;
    background:indianred;
    transform:rotate(90deg);
  }
  75%  {
    border-radius:50% 50% 50% 0;
    background:lightcoral;
    transform:rotate(135deg);
  }
  100% { 
    border-radius:50%;
    background:darksalmon;
    transform:rotate(180deg);
  }
}

這個在FireFox顯示會有點異常,爲了在FireFox有絕佳的顯示效果,能夠給div添加以下樣式

outline: 1px solid transparent;

原文首發:http://www.ido321.com/1282.html

相關文章
相關標籤/搜索