首页 前端知识 CSS学习17--CSS3 过渡、2D变形、3D变形、动画

CSS学习17--CSS3 过渡、2D变形、3D变形、动画

2024-09-12 23:09:16 前端知识 前端哥 670 182 我要收藏

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

  • 一、过渡
  • 二、2D变形 transform
    • 1.移动 translate
    • 2.缩放 scale
    • 3. 旋转 rotate
    • 4. 倾斜 skew
  • 三、3D变形
    • 1. rotateX()rotateY() rotateZ()
    • 2. 体会透视 perspective
    • 3. translateX() translateY() translateZ()
    • 4. 开门大吉例子
    • 5. backface-visibility
  • 四、动画
    • 例子:无缝滚动

一、过渡

为元素从一种样式变为另一种样式时添加效果。

transition: 过渡属性 花费时间 运动曲线 何时开始;
前两个值不可省略,运动曲线默认ease,合适开始默认0s立即开始可以省略。

注意:transition需要写在div里而不是hover里;多个属性设置不同时,用逗号隔开;需要描述所有属性变化时,过渡属性值为all。

<html>
	<head>
		<style>
			div {
				width: 200px;
				height: 200px;
				background-color: pink;
				transition: width 0.2s ease 0s,height 0.3s ease-in 1s;
				/* transition: all 0.6s ease 0s; */
			}
			div:hover {
				width: 300px;
				height: 300px;
			}
		</style>
	</head>
	<body>
	<div></div>
</html>

二、2D变形 transform

做元素的变形、位移、缩放,可以和transition结合使用。

1.移动 translate

用translate平移

transform: translate(x,y)

<html>
	<head>
		<style>
			div {
				width: 200px;
				height: 200px;
				background-color: pink;
				transition: all 0.5s;
			}
			div:active { /*鼠标点击没有松开鼠标,相当于点击*/
				transform: translate(100px,200px);
				transform: translate(50%,100%);
			}
		</style>
	</head>
	<body>
	<div></div>
</html>

注意:

  • 只移动一个坐标可以把另一个坐标设为0;

  • 也可以写成:translateX(只跟一个参数);translateY(只跟一个参数)。

  • translate移动的距离如果是%,则以自己的宽度为准,而不是父亲为准。

    <html>
    	<head>
    		<style>
    			div {
    				width: 200px;
    				height: 200px;
    				background-color: pink;
    				position: absolute; /*盒子居中对齐*/
    				left: 50%; /*以父级宽度为准*/
    				margin-left: -100px; /*需要计算*/
    				top: 50%;
    				transform: translate(-50%,-50%);
    			}
    		</style>
    	</head>
    	<body>
    	<div></div>
    </html>
    

2.缩放 scale

transform: scale(x,y)
x和y的值小于1为缩小倍数,大于1为放大倍数。

<html>
	<head>
		<style>
			div {
				width: 200px;
				height: 200px;
				background-color: pink;
			}
			div:hover {
				transform: scale(1.2,1.5);
			}
		</style>
	</head>
	<body>
	<div></div>
</html>

注意:

  • 如果只写一个参数,宽高都缩放!

  • 谁做动画,谁加过渡!

    <html>
    	<head>
    		<style>
    			div {
    				width: 100px;
    				height: 50px;
    				background-color: pink;
    				overflow: hidden;
    			}
    			div img {
    				transition: all 0.3s;
    			}
    			div:hover img {
    				transform: scale(1.2,1.5);
    			}
    		</style>
    	</head>
    	<body>
    	<div>
    		<img src="images/search.png" alt="">
    	</div>
    </html>
    

3. 旋转 rotate

transform: rotate(*deg)
正值是顺时针,负值是逆时针;比如90deg是顺时针旋转90度

<html>
	<head>
		<style>
			div {
				width: 100px;
				height: 50px;
				background-color: pink;
				overflow: hidden;
			}
			div img {
				transition: all 0.3s;
			}
			div:hover img {
				transform: rotate(90deg);
			}
		</style>
	</head>
	<body>
	<div>
		<img src="images/search.png" alt="">
	</div>
</html>

旋转中心点的设置:

	<html>
		<head>
			<style>
				div img {
					padding: 200px;
					transition: all 0.3s;
					transform-origin: bottom top;
				}
				div:hover img {
					transform: rotate(90deg);
				}
			</style>
		</head>
		<body>
		<div>
			<img src="images/search.png" alt="">
		</div>
	</html>

4. 倾斜 skew

transform: skew(x,y);

<html>
	<head>
		<style>
			div {
				font-size: 50px;
				font-weight: 700;
				transition: all 0.2s;
			}
			div:hover {
				transform: skew(20deg,0);
			}
		</style>
	</head>
	<body>
	<div>
		123
	</div>
</html>

三、3D变形

3D多了z轴,遵循左手法则。
在这里插入图片描述
在这里插入图片描述

1. rotateX()rotateY() rotateZ()

<html>
	<head>
		<style>
			div img {
				transition: all 0.2s;
			}
			div:hover img {
				transform: rotateX(180deg);
			}
		</style>
	</head>
	<body>
	<div>
		<img src="images/course.png" alt="">
	</div>
</html>

2. 体会透视 perspective

  • 透视原理:近大远小。
  • 浏览器透视:把近大远小的所有图像,透视在屏幕上。
  • perspective:视距,表示视点距离屏幕的长短。视点,用于模拟透视效果时人眼的位置

注:并非任何情况下需要透视效果,根据开发需要进行设置。
perspective一般作为一个属性,设置给父元素,作用于所有3D转换的子元素

<html>
	<head>
		<style>
			div {
				perspective: 1000px;
			}
			div img {
				transition: all 0.2s;
			}
			div:hover img {
				transform: rotateX(180deg);
			}
		</style>
	</head>
	<body>
	<div>
		<img src="images/course.png" alt="">
	</div>
</html>

3. translateX() translateY() translateZ()

Z轴是物体到屏幕的距离,透视是一种展示形式。

<html>
	<head>
		<style>
			div {
				margin: 200px;
				perspective: 1000px;
			}
			div img {
				transition: all 0.2s;
			}
			div:hover img {
				transform: translateZ(100px);
			}
		</style>
	</head>
	<body>
	<div>
		<img src="images/course.png" alt="">
	</div>
</html>

transform: translate3d(x,y,z);
z轴只能是px单位

<html>
	<head>
		<style>
			div {
				margin: 200px;
				perspective: 1000px;
			}
			div img {
				transition: all 0.2s;
			}
			div:hover img {
				transform: translate3d(100px,100px,100px);
			}
		</style>
	</head>
	<body>
	<div>
		<img src="images/course.png" alt="">
	</div>
</html>

4. 开门大吉例子

<html>
	<head>
		<style>
			div {
				width: 200px;
				height: 180px;
				margin: 200px;
				background: url(images/course.png);
				perspective: 1000px;
				position: relative;
			}
			span {
				display: block;
				width: 100px;
				height: 180px;
				background-color: pink;
				border: 1px solid black;
				transition: all 0.2s;
			}
			span.door-l {
				position: absolute;
				top: 0;
				left: 0;
				transform-origin: left;
			}
			span.door-r {
				position: absolute;
				top: 0;
				right: 0;
				transform-origin: right;
			}
			div:hover .door-l   {
				transform: rotateY(-130deg);
			}
			div:hover .door-r  {
				transform: rotateY(130deg);
			}
		</style>
	</head>
	<body>
	<div>
		<span class="door-l"></span>
		<span class="door-r"></span>
	</div>
</html>

在这里插入图片描述

5. backface-visibility

用于设置图片不正向对着屏幕时是否可见。
可以用来写翻转图片,先translateY(180deg),当backface-visibility:hidden可以实现翻转时显示背面图片。

四、动画

animation: 动画名称 动画时间 运动曲线 何时开始 播放次数 是否反方向;

动画名称是自定义的

<html>
	<head>
		<style>
			div {
				width: 200px;
				height: 180px;
				margin: 200px;
				background: url(images/course.png);
				/*animation: name duration timing-function delay iteration-count direction fill-mode;*/
				animation: go 2s ease 0s 2 reverse;
			}
			@keyframes go { /*定义动画*/
				from{
					transform: translate(0);
				}
				to{
					transform: translate(600px);
				}
			}
		</style>
	</head>
	<body>
	<div>
	</div>
</html>

例子:无缝滚动

<html>
	<head>
		<style>
			* {
				margin: 0;
				padding: 0;
			}
			ul {
				list-style: none;
			}
			nav {
				width: 1200px;
				height: 20px;
			}
			nav li {
				float: left;
			}
			nav ul {
				width: 200%; /*两倍!!!*/
				animation: moving 2s linear infinite;
			}
			div {
				width: 200px;
				height: 20px;
			}
			@keyframes moving { /*定义动画*/
				from{
					transform: translate(0);
				}
				to{
					transform: translate(-1000px);
				}
			}
			nav:hover ul { /*鼠标经过nav,里面的ul不做动画*/
				animation-play-state: paused ;
			}
		</style>
	</head>
	<body>
	<nav>
		<ul>
			<li><div style="background-color: red;"></div></li>
			<li><div style="background-color: orange;"></div></li>
			<li><div style="background-color: yellow;"></div></li>
			<li><div style="background-color: green;"></div></li>
			<li><div style="background-color: blue;"></div></li>
			<li><div style="background-color: purple;"></div></li>
			<li><div style="background-color: red;"></div></li>
			<li><div style="background-color: orange;"></div></li>
			<li><div style="background-color: yellow;"></div></li>
			<li><div style="background-color: green;"></div></li>
			<li><div style="background-color: blue;"></div></li>
			<li><div style="background-color: purple;"></div></li>
		</ul>
	</nav>
</html>
转载请注明出处或者链接地址:https://www.qianduange.cn//article/18148.html
标签
评论
发布的文章

3.1 requests与JSON基础

2024-10-15 23:10:08

React 安装(NPM)

2024-10-15 23:10:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!