CSS3--Transition,Transform和Animation

因为说的是动态效果,所以并没有截图,如果想看效果复制代码后即可以看到。不过还是建议大家手动操作。

一、Transition(过渡)
属性:
transition-property:用于指定过渡的性质,比如 transition-property:backgrond 就是指 对backgound的变化进行过渡。
transition-duration:用于指定这个过渡的时间。(多久将效果过渡完成)
transition-timing-function:用于指定过渡的类型(以一种什么性质变化,如渐变等)
transition-delay:指定延迟过渡的时间(多久后开始过渡,默认0立马开始)
他们是可以都写在transition下面的如:transition:background-color 0.5s linear 5s;

具体看个例子

.transStart{
    background-color:#eee;
    transition:background-color 5s linear;
}
.transEnd{
    background-color:yellow;
    transition:background-color 5s linear;
}
<div class="transStart">transition</div>
<button type="button" onclick="myclick()">click</button>
<script>
    var tranDiv = document.getElementsByClassName('transStart')[0];
    var btn = document.getElementsByTagName('button')[0];
    console.log(tranDiv);
    function myclick(){
        //tranDiv.style.backgroundColor = 'yellow';
     tranDiv.className = 'transEnd';
    }
</script>

当我点击按钮的时候,背景颜色会由#eee 变成黄色,而并非一蹴而就,是一点点变化(linear的效果是像透明度有0-100这样显示黄色)。
两种方式改变了背景颜色,第一种直接操作CSS,第二种修改className 都是可以触发的,但注意:更改className时一定要将transitions带上否则没有过渡效果

看一下transition-timing-function的各种效果(w3c)
这里写图片描述

二、Transform(转换)
transform 其实就是拉伸、压缩、旋转、偏移等一些图形的基本变换。
主要分量大类:2D转换和3D转换
2D转换

translate(x,y):沿着X和Y轴移动元素

transform:transalte(50px,100px)

将元素从左移动50px,从顶端移动100px

当然它有一些变体
translateX(n):沿着X轴移动
translateY(n):沿着Y轴移动

scale(x,y):改变元素的宽和高(填数字,变化为倍数:宽放大几倍,高放大几倍)

transform:scale(2,2)

width变为原来的2倍,height变为原来的两倍。

scaleX(n)
scaleY(n)

rotate(angel): 顺时针旋转给定的角度,负值为逆时针方向。

transform:rotate(30deg)

顺时针旋转30度

skew(x-angle,y-angle) 元素按X轴翻和Y轴翻转给定的角度。

transform:skew(30deg,-20deg)

沿X轴翻转30度,沿Y轴反方向(因为负值)翻转20度。
skewX(angle)
skewY(angle)

matrix(n,n,n,n,n,n)是对上面几种变换的集合,是以数学矩阵的形式定义距离角度等的。
相对来说微微有点复杂,不过看懂之后就会好很多。
具体请看http://www.zhangxinxu.com/wordpress/2012/06/css3-transform-matrix-%E7%9F%A9%E9%98%B5/

3D转换
基本上就是以上的东西变成了3D效果,如果你给2D图加3D效果,很多效果就会跟2D的一样。
translate3d(x,y,z)
scaleed(x,y,z)
rotate3d(x,y,z,angle)
perspective(n)

下面是我写的例子,可以每个都尝试一下看看效果

<head>
    <meta charset="UTF-8">
    <title>transform</title>
    <style>
        .div1{
            margin:100px 0 0 100px;
            width:200px;height:100px;background:#ddd;text-align: center;
        }
        .translate{
            transform: translate(50px,50px);
        }
        .scale{
            transform: scale(2,2);
        }
        .rotate{
            transform:rotate(30deg);
        }
        .skew{
            transform:skew(30deg,-20deg)
        }
        .translate3d{
            transform: translate3d(50px,50px,50px);
        }
        .scale3d{
            transform: scale3d(2,2,2);
        }
        .rotate3d{
            transform:rotate3d(1,1,1,30deg);
        }
    </style>
</head>
<body>
    <button onclick="myClick()">变换</button>
    <div class="div1">transform</div>
    <script>
        var btn = document.getElementsByTagName('button')[0];
        var myDiv = document.getElementsByClassName('div1')[0];
        console.log(btn);
        function myClick(){
            //myDiv.className += " translate"
            //myDiv.className += " scale"
            myDiv.className += " rotate"
            //myDiv.className += " skew"
            //myDiv.className += " translate3d"
            //myDiv.className += " scale3d"
            //myDiv.className += " rotate3d"
        }
    </script>
</body>

想看那个效果就把JS的注释去掉就可以。

并且将transform和transition结合使用就会产生类似旋转,缩放这样的效果。

Animation(卡通、动画)
先看一个栗子:

<style>
    div{
        width:100px;height:100px;background:red;margin:100px 0 0 100px;  position: relative;
    }
    .classMove{
        -webkit-animation-name: move;
        -webkit-animation-duration:3s;
        -webkit-animation-timing-function: linear;
        -webkit-animation-delay:1s;
        -webkit-animation-iteration-count: 2;
        -webkit-animation-direction: normal;
    }
    @keyFrames move{
        0%{
            left:0px
        }
        100%{
            left:200px;
        }
    }
</style>
</head>
<body>
    <div class="classMove"></div>
</body>

属性:
animation-name: 规定需要绑定到选择器的keyframe名称,上栗中的@keyframe
animation-duration:完成动画所需要的时间(秒或者毫秒)
animation-timing-function:动画的速度曲线
linear:从头到尾都是速度相同
ease:默认 开始慢后来快
ease-in动画以低速开始
ease-out:以低速结束
ease-in-out:以低速开始和结束
animation-delay:动画在开始之前延迟多久,默认0
animation-iteration-count:动画播放的次数(n)或者infinite(无限次)
animation-iteration-direction:是否轮流反向播放动画(normal:正常 , alternate:轮流反向播放)

另外在keyframe种我们也可以使用下面这种方式

@keyframes move
{
from {left:0px;}
to {left:200px;}
}

不过百分比的方式 可以让我们又更多的变化,具体看是应用。
并且以上属性都可以合写

-webkit-animation:move 5s infinite;

最后注意一下浏览器的支持情况,为了保险起见,属性还是加上浏览器前缀比较保险。
我用的chrome transition和transform不用浏览器前缀就可以实现,但Animation需要。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值