07. 變換和動畫

CSS3中的變換屬性:transform
CSS3中的漸變效果:transition

7.1 CSS3的變換類型


注:transform的兼容性如下

  • IE10、Firefox嘀粱、Opera支持transform屬性;
  • IE9支持替代的-ms-transform屬性刺啦,僅適用于2D轉(zhuǎn)換末患;
  • Safari和Chrome支持替代的-webkit-transform屬性;
  • Opera只支持2D轉(zhuǎn)換玫荣;

7.1.1 rotate旋轉(zhuǎn)變換

  1. 最簡單的2D旋轉(zhuǎn)
div{
    transfrom: rotate(7deg);
    -ms-transform: rotate(7deg);    /*IE9*/
    -moz-transform: rotate(7deg);   /*Firefox*/
    -webkit-transform: rotate(7deg);/*safari和Chrome*/
    -o-transform: rotate(7deg);     /*Opera*/
}

rotateX, rotateY, rotateZ: rotateZ相當于rotate
如果要在其他向量上旋轉(zhuǎn),可以使用rotate3d(x, y, z, deg)大诸,xyz的值建立三維向量捅厂,deg則是旋轉(zhuǎn)角度。

7.1.2 skew扭曲變換

div{
    transform: skew(20deg, 10deg);    /*在X軸方向偏轉(zhuǎn)20°资柔,Y軸方向偏轉(zhuǎn)10°*/
}

注意:skew沒有3D和skewZ選項

7.1.3 scale比例縮放

div{
    transform: scale(1.1, 1.1);
}

注:可以使用scaleX, scaleY, scaleZ進行單一方向上的縮放焙贷。

7.1.4 translate位移變換

div{
    transform: translate(100px, 20px);  /*在x方向移動100px,Y方向移動20px*/
}

注:可以使用translateX, translateY, translateZ進行單一方向上的位移贿堰。

7.2 使用transition制作交互動畫


用jquery實現(xiàn)動畫效果:

$(element).animate({width: "200px"}, 3000);
//$().animate(params, time, callback)

CSS3中的transition屬性可以平滑改變CSS屬性值

.content{
    height: 100px;
    width: 100px;
    -webkit-transition: height 600ms;
    -moz-transition: height 600ms;
    -o-transition: height 600ms;
    transition: height 600ms;
}
.content:hover{
    height: 300px;
}

上例即為高度為100px的正方形在hover下0.6s內(nèi)變?yōu)?00px的動畫辙芍。如果需要改變多個屬性,可以使用逗號隔開:

.content{
    transition: height 2s, width 2s, background 2s;
}

transition還可以包含設置漸進動畫的函數(shù)官边,可以選擇的函數(shù)有6種沸手。

  • ease: 勻速變慢
  • linear: 勻速
  • ease-in: 加速
  • ease-out: 減速
  • ease-in-out: 加速然后減速
  • cubic-bezier: 自定義時間曲線
transition: all 0.5s ease-in-out 1s;

四個參數(shù)依次表示:屬性、過渡時間注簿、過渡函數(shù)契吉、延遲時間

7.3 使用@keyframes制作動畫(關鍵幀)


7.3.1 @keyframes的基本語法

@keyframes spin{
    from{
        -webkit-transform: rotateY(0);
    }
    to{
        -webkiy-transform: rotateY(-360deg);
    }    /*from和to代表0%和100%*/
}

@keyframes spin{
    0% {
        -webkit-transform: rotateY(0);
    }
    50% {
        -webkit-transform: rotateY(-180deg);
    }
    100% {
        -webkit-transfor,: rotateY(-360deg);
    }
}

@keyframes必須配合元素中定義的animation屬性,用于定義動畫

animation: spin 8s infinite linear alternate;

spin: 動畫名稱
8s:動畫執(zhí)行一次所需要的時間
infinite: 動畫執(zhí)行的次數(shù)
linear: 動畫的速度函數(shù)诡渴,跟transition的速度函數(shù)相同
alternate: 表示動畫正向循環(huán)完畢后反向循環(huán)
如果想對動畫的運行進行控制捐晶,可以給元素增加animation-play-state屬性:

div{
    animation-play-state: paused;  /*paused為暫停*/
    animation-play-state: running; /*running為開啟動畫*/
}

可以通過js控制這個屬性來完成。

7.3.2 實例

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            div{
                width: 100px;
                height: 100px;
                background-color: red;
                position: relative;
                animation: firstAni 5s infinite;
                -webkit-animation: firstAni 5s infinite ;
            }
            @keyframes firstAni{
                0% {background: red; left: 0px; top: 0px;}
                25% {background: yellow; left: 200px; top: 0px;}
                50% {background: blue; left: 200px; top: 200px;}
                75% {background: green; left: 0px; top: 200px;}
                100%{background: red; left: 0px; top: 0px;}
            }
            @-webkit-keyframes firstAni{  /*適用于safari和chrome*/
                0% {background: red; left: 0px; top: 0px;}
                25% {background: yellow; left: 200px; top: 0px;}
                50% {background: blue; left: 200px; top: 200px;}
                75% {background: green; left: 0px; top: 200px;}
                100%{background: red; left: 0px; top: 0px;}
            }
        </style>
    </head>
    <body>
        <div></div>
    </body>
</html>

7.3.4 @keyframes小結(jié)

  • keyframes可以改變?nèi)我舛嗟臉邮酵纾我舛嗟拇螖?shù)惑灵;
  • 使用百分比來規(guī)定變化發(fā)生的時間,或者用from, to眼耀;
  • 為了得到最佳的瀏覽器支持英支,應始終定義0%和100%選擇器

注:IE10、Firefox哮伟、opera支持@keyframes和animation屬性干花;Chrome和Safari需要增加前綴-webkit-妄帘;IE9及之前不支持。

7.4 實例


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            .wahaha{
                width: 100px;
                height: 100px;
                text-align: center;
                background: #CCCCCC;
                line-height: 100px;
                font-family: "microsoft yahei";
                font-size: 50px;
                animation: rotateYdir 3s infinite alternate;
                -webkit-animation: rotateYdir 3s 2 alternate;
                animation-play-state: paused;
                -webkit-animation-play-state: paused;
                border-radius: 10px;
            }
            @keyframes rotateYdir{
                0%{transform: rotateY(0);}
                100%{transform: rotateY(-360deg);}
            }
            @-webkit-keyframes rotateYdir{
                0%{-webkit-transform: rotateY(0);}
                100%{-webkit-transform: rotateY(-360deg);}
            }
            .yunxing{
                animation-play-state: running;
                -webkit-animation-play-state: running;
            }
        </style>
    </head>
    <body>
        <div class="wahaha">6</div>
        <script>
            var div1=document.getElementsByClassName("wahaha");
            div1[0].onmouseover=function(){
                this.style.animationPlayState="running";
                this.style.webkitAnimationPlayState="running"
            }
        </script>
    </body>
</html>

7.6 小結(jié)


  • 元素的變換:應用transform屬性可以對元素進行旋轉(zhuǎn)rotate池凄,扭曲skew抡驼,位移translate,縮放scale肿仑;
  • 元素樣式改變的過渡效果致盟,應用transition屬性可以改變和添加過渡效果;幾個速度函數(shù):ease, ease-in, ease-out, ease-in-out, linear內(nèi)置函數(shù):transition: prop 0.5s linear 1s,prop是css屬性名尤慰;
  • 使用@ketframes和animation屬性設置動畫循環(huán)馏锡。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市割择,隨后出現(xiàn)的幾起案子眷篇,更是在濱河造成了極大的恐慌萎河,老刑警劉巖荔泳,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異虐杯,居然都是意外死亡玛歌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門擎椰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來支子,“玉大人,你說我怎么就攤上這事达舒≈蹬螅” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵巩搏,是天一觀的道長昨登。 經(jīng)常有香客問我,道長贯底,這世上最難降的妖魔是什么丰辣? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮禽捆,結(jié)果婚禮上笙什,老公的妹妹穿的比我還像新娘。我一直安慰自己胚想,他們只是感情好琐凭,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浊服,像睡著了一般统屈。 火紅的嫁衣襯著肌膚如雪摆马。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天鸿吆,我揣著相機與錄音囤采,去河邊找鬼。 笑死惩淳,一個胖子當著我的面吹牛蕉毯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播思犁,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼代虾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了激蹲?” 一聲冷哼從身側(cè)響起棉磨,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎学辱,沒想到半個月后乘瓤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡策泣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年衙傀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萨咕。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡统抬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出危队,到底是詐尸還是另有隱情聪建,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布茫陆,位于F島的核電站金麸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盅弛。R本人自食惡果不足惜钱骂,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挪鹏。 院中可真熱鬧见秽,春花似錦、人聲如沸讨盒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽返顺。三九已至禀苦,卻和暖如春蔓肯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背振乏。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工蔗包, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慧邮。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓调限,卻偏偏與公主長得像,于是被迫代替她去往敵國和親误澳。 傳聞我的和親對象是個殘疾皇子耻矮,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font忆谓,text-align裆装,li...
    love2013閱讀 2,303評論 0 11
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font倡缠,text-align哨免,li...
    wzhiq896閱讀 1,731評論 0 2
  • 看了很多視頻、文章毡琉,最后卻通通忘記了铁瞒,別人的知識依舊是別人的妙色,自己卻什么都沒獲得桅滋。此系列文章旨在加深自己的印象,因...
    DCbryant閱讀 1,854評論 0 4
  • 變形--旋轉(zhuǎn) rotate() 旋轉(zhuǎn)rotate()函數(shù)通過指定的角度參數(shù)使元素相對原點進行旋轉(zhuǎn)身辨。它主要在二維空間...
    阿振_sc閱讀 934評論 1 5
  • W3C標準中對css3的transition這是樣描述的:“css的transition允許css的屬性值在一定的...
    青春前行閱讀 1,406評論 0 5