CSS3新特性学习之Transform Transition Animation总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31490071/article/details/85063655

1.transition介绍

transition是指元素的过渡,指元素从一个状态过渡到另外一个状态。这里的状态要和形态区分开,状态比如说hover,focus,active等都算是元素的状态,所以往往我们会将transition定义在初始状态中,只在最终状态中定义它需要改变的属性,就可以看到过渡效果。

transition的相关属性:

transition-property:需要实现过渡效果的属性名称(比如background-color,width,height,text-shadow等,也可以使用all来应用到所有可过渡的属性)

transition-duration:定义过渡效果持续的时长(用秒进行定义,可以使用.3s、2s或1.5s来定义)

transition-timing-function:定义过渡期间的速度变化(例如ease、linear、ease-in、ease-out、或者cubic-bezier)

transition-delay:可选,用于定义过渡开始前的延迟时间。相反,如果将值设置为负数,可以让过渡效果立即开始,但过度进行到一半会提前结束,同样采用秒来定义。

简写写法:

transition:all 1s ease 0.5s.

当简写时,第一个出现的时间相关的值会被赋予给transition-duration,第二个与时间相关的值则会被赋予transition-delay上,所以以上的顺序也可以变化,不一定严格按照这个顺序来写。

同时实现多个过渡属性:

如果我们存在这样的需求,想要同时实现宽,颜色等属性的过渡,但持续时间不一致,也是可以实现的,实现方式如下:

.inner{
    transition-property:width,color,text-shadow;
    transition-duration:2s,3s,5s;
}

属性顺序和时间顺序是一一对应的关系。

2.transform

transform指变形,可以对元素的形态进行改变,比如缩放、旋转、移动、斜切等。

它包含以下几种变换形式:

scale:用来缩放元素(放大或缩小,使用数值来表示,比如1.5表示放大至原来的1.5倍,0.5表示缩小至原来的一半)

translate:在屏幕上移动元素(上下左右方向),因为应用translate属性不会改变元素在文档中占得流的大小,所以移动元素不会使旁边的元素错位。我们也可以很轻松的使用translate元素来实现我们的元素居中定位。

举个例子:

.inner{
    position:absolute;
    width:200px;
    background-color:#999;
    top:50%;
    left:50%;
    transform:translate(-50%,-50%);    //这里的数值是相对于元素的长和宽乘以50%,而不是根元素

}

rotate:按照一定角度旋转元素(单位为deg)

skew:延X轴和Y轴对元素进行斜切(单位是deg)

matrix:允许用户以像素精度来控制变形效果,看这个解释感觉很抽象,其实就有点像我们在三维空间,通过坐标来定位图形一样,不过这个是一个二维图形,不是三维。

transform-origin:默认情况下,我们的变形原点是在元素中心,元素X轴的50%和Y轴的50%,我们可以通过这个属性来修改变形原点。(可以使用百分比%或者px为单位,使用百分比计算长度是以元素长宽为基数计算)比如:transform-origin:0px 0px;

分享一个可随意变形的傻瓜式的矩形变形工具:http://www.useragentman.com/matrix/

transform3d:前面介绍的属性都是属于2D的属性,而这个属性允许元素进行3D变换,使用这个属性可以在X轴、Y轴、Z轴(与屏幕垂直的方向上)移动元素。举个例子:

.flipper:hover{
     transform:rotate(180deg) translated3d(0,0,-120opx)
}

在这个例子中,我们可以发现X和Y轴都没有变化,Z轴视觉上会感觉向垂直屏幕的方向上向里推动了120PX的感觉,效果如图:

transition和transform的对比:

transition我们可以看到是对元素本身属性的状态改变,进而达到一个过渡变化的过程,可能一些结果看起来和transform带来的效果是一样的。

transform是对整个元素的改变,主要是操作整个元素在文档流中的形状变化。

transition可以设置变化时间和延迟时间,而transform单独不提供变化时间和变化函数,如果需要实现的话,需要结合transition来使用。

比如:

.flipper-object {
	position: absolute;
	width: 100%;
	height: 100%;
	transition: transform 3s linear 5s;
	transform-style: preserve-3d;
}

.flipper-object :hover  {
	transform:  translate3d(0, 0, -120px);
}

为了让效果更明显一点,我把时间设置的很长,就可以看到鼠标移到元素上后,元素在5s以后,开始向Z轴负值方向(即屏幕向里的方向)移动,3s后移动完成并停留在这个状态,变化后结果和上面的图是一样的。

3.animation

动画是使元素从一种样式逐渐变化为另一种样式的效果,您可以改变任意多的样式任意多的次数。

CSS3中广泛使用的是动画关键帧技术,它的应用首先需要先声明,然后再引用。

使用方法:

使用百分比来规定变化发生的时间,或用关键词 "from" 和 "to",等同于 0% 和 100%。

0% 是动画的开始,100% 是动画的完成。

与transition的区别:

transition只能从一组css属性变成另一组css属性。animation则可以在多组属性之间变换。

transition必须使用触发器触发,animation可以使用触发器,也可以在页面加载完成的时候自动触发。

支持的属性如下:

animation 所有动画属性的简写属性,除了 animation-play-state 属性。 3
animation-name 规定 @keyframes 动画的名称。 3
animation-duration 规定动画完成一个周期所花费的秒或毫秒。默认是 0。 3
animation-timing-function 规定动画的速度曲线。默认是 "ease"。 3
animation-delay 规定动画何时开始。默认是 0。 3
animation-iteration-count 规定动画被播放的次数。默认是 1。 3
animation-direction 规定动画是否在下一周期逆向地播放。默认是 "normal"。 3
animation-play-state 规定动画是否正在运行或暂停。默认是 "running"。 3
animation-fill-mode 规定对象动画时间之外的状态。

支持性:

Internet Explorer 10、Firefox 以及 Opera 支持 @keyframes 规则和 animation 属性。Chrome 和 Safari 使用的是weblit内核,需要前缀 -webkit-

举个例子:

.animation-property{
    animation-name:warning;
    animation-duration:1.5s;
    animation-timing-function:ease-out;   
    animation-delay:.5s;
    animation-iteration-count:infinite;  
    animation-direction:alternate | normal | reverse | alternatereverse;
    animation-paly-state:running | pause;
    animation-fill-mode:none | forwards | backwards |both;
}

猜你喜欢

转载自blog.csdn.net/qq_31490071/article/details/85063655