变形与动画相关属性

变形与动画相关属性

一、transform

css3引入了一些可以对网页元素进行变换的属性,比如旋转,缩放,移动,或者沿着水平或者垂直方向扭曲(斜切变换)等等。这些的基础都是transform属性

transform属性有一项奇怪的特性,就是它们对于其周围的元素不会产生影响。换句话说,如果将一个元素旋转45度,它实际上是重叠在元素的上方,下方或者旁边。而不会移动其周围的内容。

旋转:transform:rotate(-45deg);

缩放:transform:scale(.5);scaleX(2);scaleY(3)。如果给了负值,能够达到翻转的效果:scaleX(-1)

移动:transform:translate(1px,2px).使用其他单位:em,%也是可以的。

倾斜:transform:skew(45deg,0);

当然,以上多个tranform的属性可以结合使用;

transform-origin:一般来说,当对一个元素使用transform时,web浏览器就会以元素的中心点作为变黄点。该属性可以指定变换点,可以提供关键字,以pixel为单位的绝对值,以及em,%等等。

<body>
	<div>文字</div>旋转30<div style="position:absolute;left:80px; top:30px; transform-origin:left top; transform: rotate(30deg);">文字</div><br>
	<div>文字</div>旋转45<div style="transform:rotateZ(45deg);">文字</div><br>
	<div>文字</div>X轴旋转30<div style="transform:rotateX(30deg);">文字</div><br>
	<div>文字</div>Y轴旋转30<div style="transform:rotateY(30deg);">文字</div><br>
	<div>文字</div>Z轴旋转30<div style="transform:rotateZ(30deg);">文字</div><br>
	<div>文字</div>X,Z同时轴旋转30<div style="transform:rotateX(30deg) rotateZ(30deg);">文字</div><br>
	<div>文字</div>Y,Z同时轴旋转30<div style="transform:rotateY(30deg) rotateZ(30deg);">文字</div><br>

	<!-- 位移 -->
	<div>文字</div>未变形<div>文字</div><br>
	<div>文字二</div>沿X轴平移120px<div style="transform:translate(120px);">文字二</div><br>

	<!-- 缩放 -->
	<div>文字</div>沿X轴缩放1.9<div style="transform:scaleX(1.9);">文字</div><br>
	<div>文字</div>沿Y轴缩放0.4<div style="transform:scaleY(0.4);">文字</div><br>
	<div>文字</div>缩放1.9,1.4<div style="transform:scale(1.9,1.4);">文字</div><br>
	<div>文字</div>缩放0.8,2.1<div style="transform:scale(0.8,2.1);">文字</div><br>
</body>

二、transition

transition可以实现动态效果,实际上是一定时间之内,一组css属性变换到另一组属性的动画展示过程。

为了使transition生效,需要做这么几件事:

2)两个样式:一个是最初的样式,一个是最终的样式,transition可以实现这两种演示见的转换过程。

2)transition属性:

transition使用4个属性控制:

要以动画展示哪些属性(transition-property):可以使用all关键字

动画过程有多久(transition–duration),

控制动画速度变化(transition-timing-function:linear,ease,ease-in,ease-out,ease-in-out,贝塞尔曲线等),动画是否延迟执行(transition-delay)等

 以下代码通过transition属性来实现 指定当鼠标移动到`<div/>`上时,实现背景颜色渐变的效果
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>背景变化</title>
	<style type="text/css">
		div{
			width:400px;
			height:50px;
			border:1px solid black;
			background-color: green;
			transition: background-color 4s linear;
		}
		div:hover{
			background-color: yellow;
		}
		
	</style>

</head>
<body>
	<div>鼠标移上来变色</div>
</body>
</html>

** 以平滑渐变的方式改变图片位置 **

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
	<style type="text/css">
		img#target{
			position:absolute;
			width:50px;
			height:50px;
			transition:left 1s linear,top 1s linear;
		}
	</style>
</head>
<body>

	<img id="target" src="balloon.jpg" alt="气球"/>
	<script type="text/javascript">
		var target=document.getElementById("target");
		target.style.left="0px";
		target.style.top="0px";
		// 为鼠标按下时间绑定监听
		document.onmousedown=function(evt){
			// 将鼠标事件的XY坐标付给气球图片的left,top
			target.style.left=evt.pageX+"px";
			target.style.top=evt.pageY+"px";
		}
	</script>
</body>
</html>
**以平滑渐变的方式修改HTML的宽度高度背景色等  **
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>背景变化</title>
	<style type="text/css">
		div{
			width:400px;
			height:50px;
			border:1px solid black;
			background-color: green;
		}
	</style>

</head>
<body>
	<div id="target1" style="transition:background-color 2s linear 2s,width 2s linear 2s,height 2s linear 2s"></div>
	<button onclick="zoom(2,'blue');">放大</button>
	<button onclick="zoom(0.5,'green');">缩小</button>
	<button onclick="zoom(1,'red');">还原</button>
	<script type="text/javascript">
		var originWidth=200;
		var originHight=160;
		var zoom=function(scale,bgColor){
			var target1=document.getElementById("target1");
			target1.style.width=originWidth * scale+"px";
			target1.style.height=originHight*scale+"px";
			target1.style.bgColor=bgColor;
		}
	</script>
</body>
</html>

三、animation

animation-name:和当初定义的动画名称相对应;
animation-duration:动画执行一次持续的时长;
animation-timing-function:动画速率变化函数;
animation-delay:动画延迟执行的时间长度;
animation-iteration-count:动画执行的次数,可以是数字,或者关键字:infinate(无限运行);
animation-direction:alternate; alternate(奇数次超前运行,偶数次后退运行).如希望动画从黄色到蓝色,并且再重复一次,使用alternate关键字就能够防止从蓝色突变为黄色
animation-fill-mode:告诉浏览器将元素的格式保持为动画结束时候的样子。

**关键帧的定义 **

@keyframes 关键帧名称{
from | to | 百分比{
属性1:属性值1;
属性1:属性值1;
属性1:属性值1;

}

}

定义关键帧时,不仅可以制定一个left属性,还可以制定多个css属性,包括前面介绍的transform属性,这样就可以实现更复杂的动画
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
	<style type="text/css">
		@keyframes complex{
			0%{
				transform: rotate(0deg) scale(1);
				background-color: #fff;
			}
			40%{
				transform: rotate(720deg) scale(0.1);
				background-color: #ff0;
			}
			80%{
				transform: rotate(1080deg) scale(4);
				background-color: #f0f;
			}
			100%{
				transform: rotate(0deg) scale(1);
				background-color: #00f;
			}
		}
		div{
			background-color: gray;
			border:1px solid black;
			position: absolute;
			left: 160px;
			top: 120px;
			width: 60px;
			height: 60px;
		}
		div:hover{
			animation-name: complex;
			animation-duration: 0.7s;
			animation-iteration-count: 100;
		}
	</style>
</head>
<body>
	<div>鼠标悬停。动画开始</div>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值