css3變化,動畫

css3可以實現(xiàn)一些動畫過渡之類的。先來研究下api

2D變化

css3提供可以更改元素的css方法,我們可以移動,比例化,反過來,旋轉(zhuǎn),和拉伸元素。
屬性: transform
transform就和width和height之類的屬性是一樣的。
屬性值可能為:

  1. translate() 移動
    根據(jù)左(X軸)和頂部(Y軸)位置給定的參數(shù),從當(dāng)前元素位置移動。
div
{
transform: translate(50px,100px);
-ms-transform: translate(50px,100px); /* IE 9 */
-webkit-transform: translate(50px,100px); /* Safari and Chrome */
}
  1. rotate() 旋轉(zhuǎn)
    給定度數(shù)順時針旋轉(zhuǎn)的元素。負(fù)值是允許的,這樣是元素逆時針旋轉(zhuǎn)。
div
{
transform: rotate(30deg);
-ms-transform: rotate(30deg); /* IE 9 */
-webkit-transform: rotate(30deg); /* Safari and Chrome */
}
  1. scale() 縮放
    該元素增加或減少的大小,取決于寬度(X軸)和高度(Y軸)的參數(shù)
    transform: scale(2,3); /* 標(biāo)準(zhǔn)語法 */
  2. skew() 傾斜
    包含兩個參數(shù)值,分別表示X軸和Y軸傾斜的角度,如果第二個參數(shù)為空,則默認(rèn)為0,參數(shù)為負(fù)表示向相反方向傾斜。
    *. skewX(<angle>);表示只在X軸(水平方向)傾斜。
    *. skewY(<angle>);表示只在Y軸(垂直方向)傾斜。


屬性transform-origin
默認(rèn)值: 50% 50% 0 表示變化的中心 2d變化前兩個參數(shù)代表x和y,3d變換第三個參數(shù)代表z軸。

但是僅僅在css中加上以上屬性,元素是不會動的。是靜態(tài)的。需要配合過渡屬性transition
屬性 : transition
我們?yōu)榱颂砑幽撤N效果可以從一種樣式轉(zhuǎn)變到另一個的時候,無需使用Flash動畫或JavaScript。
CSS3 過渡是元素從一種樣式逐漸改變?yōu)榱硪环N的效果。
要實現(xiàn)這一點,必須規(guī)定兩項內(nèi)容:
*. 指定要添加效果的CSS屬性
*. 指定效果的持續(xù)時間。

div
{
    transition: width 2s; // div的長度有變化是,過渡效果生效,過渡時間為2秒
    -webkit-transition: width 2s; /* Safari */
}

transition: width 1s linear 2s; 或者transition: transform1s linear 2s;
第三個參數(shù):規(guī)定過渡效果的時間曲線。默認(rèn)是 "ease"。
第四個參數(shù): 規(guī)定過渡效果何時開始。默認(rèn)是 0。
這樣就可以實現(xiàn)簡易的動畫了。要是我們想實現(xiàn)的動畫不僅僅是伸縮,平移之類的怎么辦,或者我們平移完成后還想伸縮呢,transform提供的只能說一種變化,復(fù)雜的變化需要提前規(guī)定好動畫的規(guī)則?css3也提供了動畫api@keyframes和animation
屬性: @keyframes
@keyframes規(guī)定動畫。 @keyframes規(guī)則內(nèi)指定一個CSS樣式和動畫將逐步從目前的樣式更改為新的樣式。 @keyframes內(nèi)部也可以規(guī)定transform為變化內(nèi)容。

@keyframes myfirst
{
    from {background: red;}
    to {background: yellow;}
}

當(dāng)在 @keyframes 創(chuàng)建動畫,必須把它綁定到一個選擇器,否則動畫不會有任何效果。
指定至少這兩個CSS3的動畫屬性綁定向一個選擇器:
*. 規(guī)定動畫的名稱
*. 規(guī)定動畫的時長

div
{
    animation: myfirst 5s;
    -webkit-animation: myfirst 5s; /* Safari 與 Chrome */
}

屬性:animation
規(guī)定動畫的時間,運動曲線,何時開始之類的。和transition相同的效果。

遇到的問題

一個div ,目標(biāo)實現(xiàn): 先沿著X軸旋轉(zhuǎn)180°再沿著Y軸旋轉(zhuǎn)180°。
效果如下


于是我就這么寫

@keyframes demo1run {
    0% {transform: rotateX(0deg) }
    50% {transform: rotateX(180deg) }
    100% {transform: rotateY(180deg) }
  
}

!想著先X軸變化了180°后。再Y軸變化180°。但這么寫的結(jié)果如下。


奇怪怎么成了先X軸變化了180°后。再Z軸變化180°了呢??
因為這么寫的話。從50%到100%的變化為 rotateX 180- 0deg, rotateY 0deg - 180 .此時表現(xiàn)的動畫相當(dāng)于rotateZ(180deg) 。旋轉(zhuǎn)變換所以修改成

@keyframes demo1run {
    0% {transform: rotateX(0deg) }
    50% {transform: rotateX(180deg) }
    100% {transform:  rotateX(180deg) rotateY(180deg) } // 加上X軸的變化。證明這個過程不要變化X軸
  
}

3D動畫

想要實現(xiàn)的動畫是3D效果的。必不可少perspective屬性

perspective : none?。【哂袉挝坏拈L度值
屬性的默認(rèn)值為none,表示無限的角度來看3D物體,但看上去是平的。另一個值<length>接受一個長度單位大于0的值。而且其單位不能為百分比值。<length>值越大,角度出現(xiàn)的越遠(yuǎn),從而創(chuàng)建一個相當(dāng)?shù)偷膹姸群头浅P〉?D空間變化。反之此值越小,角度出現(xiàn)的越近,從而創(chuàng)建一個高強度的角度和一個大型3D變化。比如你站在10英尺和1000英尺的地方看一個10英尺的立方體。在10英尺的地方,你距離立方體是一樣的尺寸。因此視角轉(zhuǎn)變遠(yuǎn)遠(yuǎn)大于站在1000英尺處的,立體尺寸是你距離立方體距離的百分之一。

依據(jù)上面的介紹,我們可對perspective
取值做一個簡單的結(jié)論:
*. perspective取值為none或不設(shè)置,就沒有真3D空間。
*. perspective取值越小,3D效果就越明顯,也就是你的眼睛越靠近真3D。
*. perspective的值無窮大,或值為0時與取值為none效果一樣。
張鑫旭 CSS3 3D transform變換

制作篩子

先實現(xiàn)靜態(tài)的效果圖,目標(biāo)如下

我怎么實現(xiàn)的結(jié)果如下呢?



首先需要給6個面的父元素設(shè)置高度和寬度為6個子div的寬和高。其次需要時元素居中。因為視角的問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    wzhiq896閱讀 2,103評論 0 2
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,423評論 0 11
  • 看了很多視頻、文章,最后卻通通忘記了,別人的知識依舊是別人的,自己卻什么都沒獲得。此系列文章旨在加深自己的印象,因...
    DCbryant閱讀 1,963評論 0 4
  • HTML5 1.HTML5新元素 HTML5提供了新的元素來創(chuàng)建更好的頁面結(jié)構(gòu): 標(biāo)簽描述 定義頁面獨立的內(nèi)容區(qū)域...
    L怪丫頭閱讀 2,901評論 0 4
  • 1、屬性選擇器:id選擇器 # 通過id 來選擇類名選擇器 . 通過類名來選擇屬性選擇器 ...
    Yuann閱讀 1,750評論 0 7

友情鏈接更多精彩內(nèi)容