CSS常见动画(transition)

1,945 阅读5分钟

transition过渡动画

先添加公共样式

             @charset "utf-8";
		*{
                   padding: 0;
                   margin: 0;
              }
		figure{
			width: 33.3%;
			height: 300px;
			float: left;
			overflow: hidden;
			position: relative;
		}
		ul,li{
			list-style: none;
		}
		h2,p,li,div{
			position: absolute;
			transition: all 0.5s;
			color: #000;
		}

一、平移动画(上下)

实现原理

    通过鼠标滑过元素,改变目标偏移量实现动画效果。

代码实现

CSS部分

	.example1 h2{
                /* 给h2设置初始位置 */
		left:10%;
		bottom:30%;
	}
	.example1 p{
                /* 给p设置初始位置 */
		left:10%;
		top:100%;
	}
	.example1:hover h2{
		/*  适应谷歌浏览器 */
		-webkit-transform: translateY(-15px);
		/* 适应火狐浏览器 */
		-moz-transform: translateY(-15px);
		/* 适应IE浏览器 */
		-ms-transform: translateY(-15px);
		/* 在Y轴的纵向偏移量 */
		transform: translateY(-15px);
	}
	.example1:hover p{
                   /* 通过改变p标签相对父元素的位置实现动画 */
		top:80%;
	}

body部分

    <figure class="example1">
	<h2>平移动画</h2>
	<p>滑动显示</p>
   </figure>

效果展示

从下至上.gif

二、平移动画(左右)

实现原理

通过鼠标滑过元素,改变目标偏移量和时间实现动画效果

代码实现

css部分

            .example2 h2{
                    /* 设置h2的初始位置 */
                    top:20%;
                    left:15%;
            }
            .example2 ul li:nth-child(1){
                    /* 设置滑动后元素的位置改变 */
                    top:45%;
                    left:15%;
                    /*  适应谷歌浏览器 */
                    -webkit-transform: translateX(-200px);
                    /* 适应火狐浏览器 */
                    -moz-transform: translateX(-200px);
                    /* 适应IE浏览器 */
                    -ms-transform: translateX(-200px);
                    transform: translateX(-200px);;
            }
            .example2 ul li:nth-child(2){
                    /* 设置滑动后元素的位置改变 */
                    top:55%;
                    left:15%;
                    /*  适应谷歌浏览器 */
                    -webkit-transition-delay: 0.2s;
                    /* 适应火狐浏览器 */
                    -moz-transition-delay: 0.2s;
                    /* 适应IE浏览器 */
                    -ms-transition-delay: 0.2s;
                    transition-delay: 0.2s;
                    /*  适应谷歌浏览器 */
                    -webkit-transform: translateX(-200px);
                    /* 适应火狐浏览器 */
                    -moz-transform: translateX(-200px);
                    /* 适应IE浏览器 */
                    -ms-transform: translateX(-200px);
                    transform: translateX(-200px);;
            }
            .example2:hover ul li{
                    /*  适应谷歌浏览器 */
                    -webkit-transform: translateX(0);
                    /* 适应火狐浏览器 */
                    -moz-transform: translateX(0);
                    /* 适应IE浏览器 */
                    -ms-transform: translateX(0);
                    transform: translateX(0);
            }

body部分

    <figure class="example2">
            <h2>平移动画</h2>
            <ul>
               <li>逐一飞入动画</li>
               <li>通过延时达到效果</li>
            </ul>
        </figure>

效果展示

从左至右.gif

三、底部滑出

实现原理

通过滑动元素,使目标改变其偏移量实现动画效果

代码展示

css部分

figure {
		width: 33.3%;
		height: 300px;
		float: left;
		overflow: hidden;
		position: relative;
	}

	img {
		height: 100%;
		transition: all 1s;
	}

	ul,
	li {
		list-style: none;
	}

	h2,
	p {
		/* 添加绝对定位属性 */
		position: absolute;
		transition: all 0.5s;
		color: #000;
	}

	.example3 h2 {
		top: 50%;
		left: 15%;
	}

	.example3 p{
		width: 100%;
		/* 设置p标签的初始位置 */
		bottom: 0;
		line-height: 24px;
		text-indent: 50px;
		/* 适应谷歌浏览器 */
		-webkit-transform: translateY(50px);
		/* 适应火狐浏览器 */
		-moz-transform: translateY(50px);
		/* 适应IE浏览器 */
		-ms-transform: translateY(50px);
		/* 设置默认偏移量 */
		transform: translateY(50px);
	}
	
	.example3:hover p{
		/* 适应谷歌浏览器 */
		-webkit-transform: translateY(0);
		/* 适应火狐浏览器 */
		-moz-transform: translateY(0);
		/* 适应IE浏览器 */
		-ms-transform: translateY(0);
		/* 恢复原始的偏移量 */
		transform: translateY(0);
	}

body部分

<figure class="example3">
        <h2>底部滑出动画</h2>
	<p>
            划过显示
	</p>
</figure>

效果展示

底部滑出.gif

注意事项

* 底部滑出和平移的区别
   实现原理不用,平移利用改变元素位置,底部滑出是通过改变元素偏移量,可根据需求选择方法。

四、旋转动画

实现原理

通过旋转改变元转改变元素偏移量,使用rotate方法
*rotate();为一个角度值,单位deg,可以为正数或者负数,正数是顺时针旋转,负数是逆时针旋转。

代码实现

css部分

        .example5 h2 {
		left: 20%;
		top: 20%;
	}

	.example5 div {
		width: 70%;
		height: 70%;
		/* 设置盒子的初始位置 */
		left: 15%;
		top: 15%;
		border: 2px solid #f66;
		/* 适应谷歌浏览器 */
		-webkit-transform: translateY(-350px) rotate(0);
		/* 适应火狐浏览器 */
		-moz-transform: translateY(-350px) rotate(0);
		/* 适应IE浏览器 */
		-ms-transform: translateY(-350px) rotate(0);
		transform: translateY(-350px) rotate(0);
	}

	.example5:hover div {
		/* 适应谷歌浏览器 */
		-webkit-transform: translateY(0) rotate(360deg);
		/* 适应火狐浏览器 */
		-moz-transform: translateY(0) rotate(360deg);
		/* 适应IE浏览器 */
		-ms-transform: translateY(0) rotate(360deg);
		transform: translateY(0) rotate(360deg);
	}

body部分

<figure class="example5">
	<h2>旋转飞入</h2>
	<div></div>
</figure>

效果展示

旋转动画.gif

五、缩放

实现原理

通过缩放scale属性实现,改变原始缩放倍数实现动画效果
(1scaleX(x):元素仅水平方向缩放(X轴缩放倍数);
(2scaleY(y):元素仅垂直方向缩放(Y轴缩放倍数);
(3scale(x,y):元素水平方向和垂直方向同时缩放(X轴和Y轴同时缩放);

代码实现

css部分

        .example7 h2 {
		left: 40%;
		top: 40%;
	}

	.example7 div {
		width: 70%;
		height: 70%;
		border: 2px solid #000;
		left: 15%;
		top: 15%;
		/* 设置初始缩放倍数 */
		/* 适应谷歌浏览器 */
		-webkit-transform: scale(1.5);
		/* 适应火狐浏览器 */
		-moz-transform: scale(1.5);
		/* 适应IE浏览器 */
		-ms-transform: scale(1.5);
		transform: scale(1.5);
	}

	.example7:hover div {
		/* 滑过后改变缩放倍数 */
		/* 适应谷歌浏览器 */
		-webkit-transform: scale(0.75);
		/* 适应火狐浏览器 */
		-moz-transform: scale(0.75);
		/* 适应IE浏览器 */
		-ms-transform: scale(0.75);
		transform: scale(0.75);
	}

body部分

        <figure class="example7">
                <div></div>
		<h2>缩放</h2>
	</figure>

效果展示

缩放动画.gif

六、总结

*注意事项
    1.掌握 transition 属性
        (1transition: 属性是个复合属性
            transition-property: 规定设置过渡效果的 css 属性名称
            transition-duration: 规定完成过渡效果需要多少秒或毫秒
            transition-timing-function:指定过渡函数, 规定速度效果的速度曲线
            transition-delay: 指定开始出现的延迟时间
        (2)默认值为:transition: all 0 ease 0;
        (3)有多个 css 属性的过渡效果时:
            transition: background 0.8s ease-in 0.3s, color 0.6s ease-out 0.3s;

    2.添加对应浏览器前缀,避免不兼容情况