CSS3 2D变形 3D变形 过渡 动画

CSS3 2D变形 3D变形 过渡 动画

在CSS3中,动画效果包括4个部分:变形(transform)、3D变形、过渡(transition)、动画(animation)。

transform(2D变形)

概述

可以使用transform属性来实现元素的各种变形效果,如平移、缩放、旋转、倾斜等。

位移变形和相对定位非常像,也会在“老家留坑”,“行影分离”。

方法说明
translate()平移
scale()缩放
skew()倾斜
rotate()旋转

translate() 平移

语法

transform: translateX(x);    /*沿x轴方向平移*/
transform: translateY(y);    /*沿y轴方向平移*/
transform: translate(x, y);   /*沿x轴和y轴同时平移*/

使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			div {
				width: 150px;
				height: 100px;
			}

			.box {
				border: 1px dashed silver;
			}

			.current {
				background-color: rgb(30, 170, 250);
				opacity: 0.5;
				transform: translate(20px, 20px);
			}
		</style>
	</head>
	<body>
		<div class="box">
			<div class="current"></div>
		</div>
	</body>
</html>

在这里插入图片描述

scale() 缩放

语法

transform: scaleX(x);    /*沿x轴方向缩放*/
transform: scaleY(y);    /*沿y轴方向缩放*/
transform: scale(x, y);   /*沿x轴和y轴同时缩放*/

使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			div {
				width: 150px;
				height: 100px;
			}

			.box {
				border: 1px dashed silver;
				margin: 50px auto;
			}

			.current {
				background-color: rgb(30, 170, 250);
				opacity: 0.5;
				transform: scale(1.2, 1.5);
			}
		</style>
	</head>
	<body>
		<div class="box">
			<div class="current"></div>
		</div>
	</body>
</html>

在这里插入图片描述

skew() 倾斜

语法

transform: skewX(x);    /*沿x轴方向倾斜*/
transform: skewY(y);    /*沿y轴方向倾斜*/
transform: skew(x, y);   /*沿x轴和y轴同时倾斜*/

使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			div {
				width: 150px;
				height: 100px;
			}

			.box {
				border: 1px dashed silver;
				margin: 50px auto;
			}

			.current {
				background-color: rgb(30, 170, 250);
				opacity: 0.5;
				transform: skewY(30deg);
			}
		</style>
	</head>
	<body>
		<div class="box">
			<div class="current"></div>
		</div>
	</body>
</html>

在这里插入图片描述

rotate() 旋转

语法

transform: rotate(angle);

说明

angle参数:表示元素相对于中心原点旋转的度数,单位为deg。如果度数为正,则表示顺时针旋转;如果度数为负,则表示逆时针旋转。

使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			div {
				width: 150px;
				height: 100px;
			}

			.box {
				border: 1px dashed silver;
				margin: 50px auto;
			}

			.current {
				background-color: rgb(30, 170, 250);
				opacity: 0.5;
				transform: rotate(30deg);
			}
		</style>
	</head>
	<body>
		<div class="box">
			<div class="current"></div>
		</div>
	</body>
</html>

在这里插入图片描述

transform-origin 中心原点

语法

transform-origin: 取值;

说明

transform-origin属性取值有两种:一种是“长度值”,另一种是“关键字”。

当取值为长度值时,单位可以为px、em和百分比等。

当取值为关键字时,transform-origin属性取值跟background-position属性取值是相似的。

在这里插入图片描述

使用

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
    <style type="text/css">
      div {
        width: 150px;
        height: 100px;
      }

      .box {
        border: 1px dashed silver;
        margin: 100px auto;
      }

      .current {
        background-color: rgb(30, 170, 250);
        opacity: 0.5;
        transform-origin: top right;
        transform: rotate(-90deg);
      }
    </style>
  </head>
  <body>
    <div class="box">
      <div class="current"></div>
    </div>
  </body>
</html>

在这里插入图片描述

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
    <style type="text/css">
      div {
        width: 150px;
        height: 100px;
      }

      .box {
        border: 1px dashed silver;
        margin: 100px auto;
      }

      .current {
        background-color: rgb(30, 170, 250);
        opacity: 0.5;
        transform-origin: right center;
        transform: rotate(-90deg);
      }
    </style>
  </head>
  <body>
    <div class="box">
      <div class="current"></div>
    </div>
  </body>
</html>

在这里插入图片描述

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
    <style type="text/css">
      div {
        width: 150px;
        height: 100px;
      }

      .box {
        border: 1px dashed silver;
        margin: 100px auto;
      }

      .current {
        background-color: rgb(30, 170, 250);
        opacity: 0.5;
        transform: scale(0.5, 0.5);
        transform-origin: center center;
      }
    </style>
  </head>
  <body>
    <div class="box">
      <div class="current"></div>
    </div>
  </body>
</html>

在这里插入图片描述

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
    <style type="text/css">
      div {
        width: 150px;
        height: 100px;
      }

      .box {
        border: 1px dashed silver;
        margin: 100px auto;
      }

      .current {
        background-color: rgb(30, 170, 250);
        opacity: 0.5;
        transform: scale(0.5, 0.5);
        transform-origin: center top;
      }
    </style>
  </head>
  <body>
    <div class="box">
      <div class="current"></div>
    </div>
  </body>
</html>

在这里插入图片描述

3D变形

开启3D空间

元素进行 3D 变换的首要操作:父元素必须开启 3D 空间。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>3D变形</title>
    <style>
      .outer {
        width: 200px;
        height: 200px;
        border: 2px solid red;
        margin: 0 auto;
        margin-top: 100px;
        /* 开启3D空间 */
        transform-style: preserve-3d;
        /* 设置景深(产生立体效果) */
        perspective: 500px;
      }
      .inner {
        width: 200px;
        height: 200px;
        background-color: deepskyblue;
        transform: rotateX(30deg);
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="inner">hello world</div>
    </div>
  </body>
</html>

在这里插入图片描述

设置透视点位置

所谓透视点位置,就是观察者位置;默认的透视点在元素的中心。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>3D变形</title>
    <style>
      .outer {
        width: 200px;
        height: 200px;
        border: 2px solid red;
        margin: 0 auto;
        margin-top: 20px;
        /* 开启3D空间 */
        transform-style: preserve-3d;
        /* 设置景深(产生立体效果) */
        perspective: 500px;
      }
      .inner {
        width: 200px;
        height: 200px;
        background-color: deepskyblue;
        transform: rotateX(45deg);
      }
      .outer1 {
        /* 透视点位置 */
        perspective-origin: 102px 102px;
      }
      .outer2 {
        /* 透视点位置 */
        perspective-origin: left;
      }
      .outer3 {
        /* 透视点位置 */
        perspective-origin: right;
      }
    </style>
  </head>
  <body>
    <div class="outer outer1">
      <div class="inner">hello world</div>
    </div>
    <div class="outer outer2">
      <div class="inner">hello world</div>
    </div>
    <div class="outer outer3">
      <div class="inner">hello world</div>
    </div>
  </body>
</html>

在这里插入图片描述

平移

3D 位移是在 2D 位移的基础上,可以让元素沿 z 轴位移,具体使用方式如下:

  1. 先给元素添加 转换属性 transform。
  2. 编写 transform 的具体值, 3D 相关可选值如下:
属性值说明
translateZ设置 z 轴位移,需指定长度值,正值向屏幕外,负值向屏幕里,且不能写百分比。
translate3d第1个参数对应 x 轴,第2个参数对应 y 轴,第3个参数对应 z 轴,且均
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>3D平移</title>
    <style>
      .outer {
        width: 200px;
        height: 200px;
        border: 2px solid red;
        margin: 0 auto;
        margin-top: 100px;
        /* 开启3D空间 */
        transform-style: preserve-3d;
        /* 设置景深(产生立体效果) */
        perspective: 500px;
      }
      .inner {
        width: 200px;
        height: 200px;
        background-color: rgba(0, 191, 255, 0.356);
        transform: rotateX(45deg);
      }
      .inner1 {
        transform: translateZ(150px);
      }
      .inner2 {
        transform: translate3d(0, 0, 150px);
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="inner inner1">hello world</div>
    </div>
    <div class="outer">
      <div class="inner inner1">hello world</div>
    </div>
  </body>
</html>

在这里插入图片描述

旋转

3D 旋转是在 2D 旋转的基础上,可以让元素沿 x 轴和 y 轴旋转,具体使用方式如下:

  1. 先给元素添加 转换属性 transform。
  2. 编写 transform 的具体值, 3D 相关可选值如下:
属性值说明
rotateX设置 x 轴旋转角度,需指定一个角度值( deg ),面对 x 轴正方向:正值顺时针,负值逆时针
rotateY设置 y 轴旋转角度,需指定一个角度值( deg ),面对 y 轴正方向:正值顺时针,负值逆时针。
rotate3d前 3 个参数分别表示坐标轴: x , y , z ,第 4 个参数表示旋转的角度,参数不允许省略。
例如: transform: rotate3d(1,1,1,30deg) ,意思是: x 、 y 、 z 分别旋转
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>3D旋转</title>
    <style>
      .outer {
        width: 200px;
        height: 200px;
        border: 2px solid red;
        margin: 0 auto;
        margin-top: 100px;
        /* 开启3D空间 */
        transform-style: preserve-3d;
        /* 设置景深(产生立体效果) */
        perspective: 500px;
      }
      .inner {
        width: 200px;
        height: 200px;
        background-color: rgba(0, 191, 255, 0.356);
      }
      .inner1 {
        transform: rotateX(45deg);
      }
      .inner2 {
        transform: rotate3d(1, 0, 0, 45deg);
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="inner inner1">hello world</div>
    </div>
    <div class="outer">
      <div class="inner inner2">hello world</div>
    </div>
  </body>
</html>

在这里插入图片描述

3D缩放

3D 缩放是在 2D 缩放的基础上,可以让元素沿 z 轴缩放,具体使用方式如下:

  1. 先给元素添加 转换属性 transform

  2. 编写 transform 的具体值, 3D 相关可选值如下:

属性值说明
scaleZ设置 z 轴方向的缩放比例,值为一个数字, 1 表示不缩放,大于 1 放大,小于 1 缩小。
scale3d第1个参数对应 x 轴,第2个参数对应 y 轴,第3个参数对应 z 轴,参数不允许省略。
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>3D缩放</title>
    <style>
      .outer {
        width: 200px;
        height: 200px;
        border: 2px solid red;
        margin: 0 auto;
        margin-top: 100px;
        /* 开启3D空间 */
        transform-style: preserve-3d;
        /* 设置景深(产生立体效果) */
        perspective: 500px;
      }
      .inner {
        width: 200px;
        height: 200px;
        background-color: rgba(0, 191, 255, 0.356);
      }
      .inner1 {
        transform: scaleZ(2) rotateX(45deg);
      }
      .inner2 {
        transform: scale3d(1, 1, 2) rotateX(45deg);
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="inner inner1">hello world</div>
    </div>
    <div class="outer">
      <div class="inner inner2">hello world</div>
    </div>
  </body>
</html>

在这里插入图片描述

多重变形

多个变换,可以同时使用一个 transform 来编写。

transform: translateZ(100px) scaleZ(3) rotateY(40deg);

背部可见性

使用 backface-visibility 指定元素背面,在面向用户时是否可见,常用值如下:

属性值说明
visible默认值,元素背面可见,允许显示正面的镜像。
hidden元素背面不可见。
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>3D背部可见性</title>
    <style>
      .outer {
        width: 200px;
        height: 200px;
        border: 2px solid red;
        margin: 0 auto;
        margin-top: 100px;
        /* 开启3D空间 */
        transform-style: preserve-3d;
        /* 设置景深(产生立体效果) */
        perspective: 500px;
      }
      .inner {
        width: 200px;
        height: 200px;
        background-color: rgba(0, 191, 255, 0.356);
        transform: rotateY(118deg);
      }
      .inner1 {
        backface-visibility: visible;
      }
      .inner2 {
        backface-visibility: hidden;
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="inner inner1">hello world</div>
    </div>
    <div class="outer">
      <div class="inner inner2">hello world</div>
    </div>
  </body>
</html>

在这里插入图片描述

transition(过渡)

概述

在CSS3中,我们可以使用transition属性将元素的某一个属性从“一个属性值”在指定的时间内平滑地过渡到“另一个属性值”,从而实现动画效果。

CSS变形(transform)呈现的仅仅是一个“结果”,而CSS过渡(transition)呈现的是一个“过程”。这个所谓的“过程”,通俗来说就是一种动画变化过程,如渐渐显示、渐渐隐藏、动画快慢等

说明

语法

transition: 过渡属性 过渡时间 过渡方式 延迟时间;

transition子属性

属性说明
transition-property需要操作的属性
transition-duration过渡时间
transition-timing-function过渡速率
transition-delay延迟时间

transition-timing-function属性

在这里插入图片描述

使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			div {
				display: inline-block;
				padding: 5px 10px;
				border-radius: 5px;
				color: white;
				background-color: hotpink;
				cursor: pointer;
				transition: background-color 1s linear 0s;
			}

			div:hover {
				background-color: purple;
			}
		</style>
	</head>
	<body>
		<div>hello</div>
	</body>
</html>

在这里插入图片描述

transition-property取值为all

可以使用transition属性同时对多个CSS属性来实现过渡效果。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			div {
				display: inline-block;
				width: 100px;
				height: 100px;
				border-radius: 0%;
				background-color: lightskyblue;
				transition: all 1s linear 0s;
			}

			div:hover {
				border-radius: 50%;
				background-color: purple;
			}
		</style>
	</head>
	<body>
		<div></div>
	</body>
</html>

在这里插入图片描述

animation(动画)

概述

在CSS3中,我们可以使用animation属性来实现元素的动画效果。

transition属性(即CSS3过渡)只能实现一次性的动画效果,而animation属性(即CSS3动画)可以实现连续性的动画效果。

说明

语法

animation:动画名称 持续时间 动画方式 延迟时间 动画次数 动画方向;

说明

animation是一个复合属性,主要包括6个子属性。

animation的子属性

属性说明
animation-name动画名
animation-duration动画持续时间
animation-timing-function动画速率变化方式
animation-delay延迟时间
animation-iteration-count动画播放次数
取值:1.正整数;
2.infinite,循环播放。
animation-direction动画播放方向
取值:1.normal,正向播放(默认值);
2.reverse,反向播放;
3.alternate,奇数正向播放,偶数反向播放。
animation-fill-mode动画不播放时状态
取值:1.none,等待期间和完成后都为开始样式(默认值);
2.forwards,等待期间为开始样式,完成后保持在最后一帧;
3.backwards,等待期间为第一帧,完成后跳转到开始样式;
4.both,等待期间为第一帧,完成后保持在最后一帧。

使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			@keyframes mycolor {
				0% {
					background-color: red;
				}

				30% {
					background-color: blue;
				}

				60% {
					background-color: yellow;
				}

				100% {
					background-color: green;
				}
			}

			div {
				width: 100px;
				height: 100px;
				border-radius: 50px;
				background-color: red;
			}

			div:hover {
				animation: mycolor 5s linear;
			}
		</style>
	</head>
	<body>
		<div></div>
	</body>
</html>

在这里插入图片描述

animation-play-state 播放状态

语法

animation-play-state: 取值;

animation-play-state属性取值

属性值说明
running播放,默认值
paused暂停

使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			@keyframes mytranslate {
				0% {}

				50% {
					transform: translateX(160px);
				}

				100% {}
			}

			#container {
				display: inline-block;
				width: 200px;
				border: 1px solid silver;
			}

			#ball {
				width: 40px;
				height: 40px;
				border-radius: 50%;
				background-color: red;
				animation: mytranslate 2s linear infinite;
			}
		</style>
		<script>
			window.onload = function() {
				var ball = document.getElementById("ball");
				var btn_pause = document.getElementById("btn_pause");
				var btn_play = document.getElementById("btn_play");
				btn_pause.onclick = function() {
					ball.style.animationPlayState = "paused";
				}
				btn_play.onclick = function() {
					ball.style.animationPlayState = "running";
				}
			}
		</script>
	</head>
	<body>
		<div id="container">
			<div id="ball"></div>
		</div>
		<div>
			<button id="btn_pause">暂停</button>
			<button id="btn_play">播放</button>
		</div>
	</body>
</html>

在这里插入图片描述

animation-fill-mode 动画不播放时状态

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            @keyframes test {
                0% {
                    left: 0px;
                    background: red;
                }

                100% {
                    left: 300px;
                    background: blue;
                }
            }

            div {
                width: 100px;
                height: 100px;
                background: yellow;
                position: relative;
                margin: 10px 0px;
            }

            .box1 {
                animation: test 4s linear 2s 1;
                animation-fill-mode: none;
            }

            .box2 {
                animation: test 4s linear 2s 1;
                animation-fill-mode: forwards;
            }

            .box3 {
                animation: test 4s linear 2s 1;
                animation-fill-mode: backwards;
            }

            .box4 {
                animation: test 4s linear 2s 1;
                animation-fill-mode: both;
            }
        </style>
    </head>
    <body>
        <div class="box1"></div>
        <div class="box2"></div>
        <div class="box3"></div>
        <div class="box4"></div>
    </body>
</html>

在这里插入图片描述

动画案例

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSS3变形(transform)、过渡(transition)、动画(animation)是CSS3中非常重要的特性,可以为网页设计带来更加丰富的交互效果和视觉体验。 1. 变形(transform) 变形是指通过CSS3中的transform属性对元素进行平移、旋转、缩放、倾斜等操作,从而改变元素的形状和位置。具体的变形方式包括: 平移(translate):移动元素的位置。 旋转(rotate):以元素中心点为轴心进行旋转。 缩放(scale):缩放元素的大小。 倾斜(skew):倾斜元素。 矩阵变形(matrix):通过矩阵变换实现复杂的变形效果。 示例代码: ``` div { transform: translate(50px, 50px); } ``` 2. 过渡(transition) 过渡是指在元素属性改变时,通过CSS3中的transition属性设置过渡时间和过渡效果,从而实现平滑的转换效果。具体的过渡方式包括: 过渡时间(transition-duration):设置过渡动画的时间,单位可以是秒(s)或毫秒(ms)。 过渡效果(transition-timing-function):设置过渡效果,常用的有linear、ease-in、ease-out、ease-in-out等。 过渡属性(transition-property):设置需要过渡的属性,可以是单个属性或多个属性。 过渡延迟(transition-delay):设置过渡动画的延迟时间。 示例代码: ``` div { transition: all 1s ease-in-out; } ``` 3. 动画(animation) 动画是指通过CSS3中的animation属性对元素进行动画效果的设置。具体的动画方式包括: 关键帧动画(@keyframes):定义一组动画序列,可以设置元素在不同时间点上的样式。 动画时间(animation-duration):设置动画持续时间,单位可以是秒(s)或毫秒(ms)。 动画速度(animation-timing-function):设置动画速度,常用的有linear、ease-in、ease-out、ease-in-out等。 动画延迟(animation-delay):设置动画延迟时间。 动画方向(animation-direction):设置动画播放方向,可以是正方向(normal)、反方向(reverse)、交替播放(alternate)等。 动画次数(animation-iteration-count):设置动画播放次数,可以是无限次(infinite)。 示例代码: ``` div { animation: myanimation 2s ease-in-out infinite; } @keyframes myanimation { 0% { transform: scale(1); } 50% { transform: scale(1.5); } 100% { transform: scale(1); } } ``` 以上就是CSS3变形过渡动画的基本介绍和示例代码,希望对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值