IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 【前端系列教程之CSS3】07_CSS3 2D转换、过渡、关键帧动画 -> 正文阅读

[游戏开发]【前端系列教程之CSS3】07_CSS3 2D转换、过渡、关键帧动画

CSS3从入门到精通视频直通车:

????????CSS3从入门到精通,超多案例实践,轻松上手,通俗易懂!

一、CSS3 2D和3D转换

????????CSS3 转换可以可以对元素进行移动、缩放、转动、拉长或拉伸。

它是如何工作?

????????转换的效果是让某个元素改变形状,大小和位置。

????????您可以使用 2D 或 3D 转换来转换您的元素。

浏览器支持

????????表格中的数字表示支持该属性的第一个浏览器版本号。

????????紧跟在 -webkit-, -ms- 或 -moz- 前的数字为支持该前缀属性的第一个浏览器版本号。

????????Internet Explorer 10, Firefox, 和 Opera支持transform 属性.

????????Chrome 和 Safari 要求前缀 -webkit- 版本.

????????注意: Internet Explorer 9 要求前缀 -ms- 版本.

浏览器坐标轴:

CSS3 2D 转换

新转换属性:

Property描述
transform适用于2D或3D转换的元素

2D 转换方法:

函数(transform样式值)描述
matrix(n,n,n,n,n,n)定义 2D 转换,使用六个值的矩阵。
translate(x,y)定义 2D 转换,沿着 X 和 Y 轴移动元素。x和y是像素值;可以是正数值,也可以是负数值
translateX(n)定义 2D 转换,沿着 X 轴移动元素。
translateY(n)定义 2D 转换,沿着 Y 轴移动元素。
scale(x,y)定义 2D 缩放转换,改变元素的宽度和高度。x和y是数值,表示放大或缩小的倍数;
scaleX(n)定义 2D 缩放转换,改变元素的宽度。
scaleY(n)定义 2D 缩放转换,改变元素的高度。
rotate(angle)定义 2D 旋转,在参数中规定角度。
skew(x-angle,y-angle)定义 2D 倾斜转换,沿着 X 和 Y 轴。
skewX(angle)定义 2D 倾斜转换,沿着 X 轴。
skewY(angle)定义 2D 倾斜转换,沿着 Y 轴。

translate() 方法

????????translate()方法,根据左(X轴)和顶部(Y轴)位置给定的参数,从当前元素位置移动。

????????translate值(50px,100px)是从左边元素移动50个像素,并从顶部移动100像素。

div {
    transform: translate(50px,100px);

    /* IE 9 */
    -ms-transform: translate(50px,100px);

    /* Safari and Chrome */
    -webkit-transform: translate(50px,100px);
}

rotate() 方法

????????rotate()方法,在一个给定度数顺时针旋转的元素。负值是允许的,这样是元素逆时针旋转。

rotate值(30deg)元素顺时针旋转30度。

div{
    transform: rotate(30deg);
    -ms-transform: rotate(30deg); /* IE 9 */
    -webkit-transform: rotate(30deg); /* Safari and Chrome */
}

scale() 方法

????????scale()方法,该元素增加或减少的大小,取决于宽度(X轴)和高度(Y轴)的参数:

????????scale(2,3)转变宽度为原来的大小的2倍,和其原始大小3倍的高度。

div { 
    -ms-transform:scale(2,3); /* IE 9 */
    -webkit-transform: scale(2,3); /* Safari */
    transform: scale(2,3); /* 标准语法 */
}

skew() 方法

语法:

transform:skew(<angle> [,<angle>]);

????????包含两个参数值,分别表示X轴和Y轴倾斜的角度,如果第二个参数为空,则默认为0,参数为负表示向相反方向倾斜。

????????skewX(<angle>);表示只在X轴(水平方向)倾斜。

????????skewY(<angle>);表示只在Y轴(垂直方向)倾斜。

div{
    transform: skew(30deg,20deg);
    -ms-transform: skew(30deg,20deg); /* IE 9 */
    -webkit-transform: skew(30deg,20deg); /* Safari and Chrome */
}

????????skew(30deg,20deg) 元素在X轴和Y轴上倾斜20度30度。

matrix() 方法(推荐多值写法,空格隔开)

????????matrix()方法把2D变换方法合并成一个。

????????matrix 方法有六个参数,包含旋转,缩放,移动(平移)和倾斜功能。

????????接收 6 个参数:a、b、c、d、e、f

????????其计算规则为:

????????其中,x 和 y 表示变换前矩阵偏移元素中心点的坐标;x‘ = ax + cy + e 和 y‘ = bx + dy + f 分别表示变换后的坐标。

????????中心点的坐标固定为(0, 0),这个值与 transform-origin 的值无关;也就是说,即使 transform-origin 的值从默认的 50% 50% 被指定为 (假设)30px 30px ,其意为坐标 (0, 0) 从 50% 50% 的位置移动到 30px 30px 的位置; 30px 30px 这个点是新的中心点,其坐标为 (0, 0) 。

????????假设 matrix(1,0,0,1,30,30) ;

????????那么 x‘ 和 y‘ 分别等于 x + 30 和 y +30 ;

????????也就是说,经过矩阵转换之后,(0, 0) 变成 (30, 30) ,(1, 1) 变成 (31, 31) ,以此类推。。。直到变换元素所有的坐标都经过变化之后,在新的位置上组成了一个新的图形。

????????其结果与 translate(30px, 30px) 完全相同。

????????利用matrix()方法旋转div元素30°

div { 
	transform:matrix(0.866,0.5,-0.5,0.866,0,0); 
}

div { 
    transform:scale(2,3); 
    rotate(30deg); 
}

????????深入理解矩阵:理解CSS3 transform中的Matrix(矩阵)

transform-origin

????????transform-Origin属性允许您更改转换元素的位置。

????????2D转换元素可以改变元素的X和Y轴。 3D转换元素,还可以更改元素的Z轴。

语法

transform-origin: x-axis y-axis z-axis;
描述
x-axis定义视图被置于 X 轴的何处。可能的值:left/center/right/length/%
y-axis定义视图被置于 Y 轴的何处。可能的值:left/center/right/length/%
z-axis定义视图被置于 Z 轴的何处。可能的值:length

案例演示(理解):

<!DOCTYPE html>
<html>
<head>
<style>
#div1
{
    position: relative;
    height: 200px;
    width: 200px;
    margin: 50px;
    padding:10px;
    border: 1px solid black;
}

#div2
{
    padding:50px;
    position: absolute;
    border: 1px solid black;
    background-color: red;
    transform: rotate(45deg);
    transform-origin:20% 40%;
    -ms-transform: rotate(45deg); /* IE 9 */
    -ms-transform-origin:20% 40%; /* IE 9 */
    -webkit-transform: rotate(45deg); /* Safari and Chrome */
    -webkit-transform-origin:20% 40%; /* Safari and Chrome */
    -moz-transform: rotate(45deg); /* Firefox */
    -moz-transform-origin:20% 40%; /* Firefox */
    -o-transform: rotate(45deg); /* Opera */
    -o-transform-origin:20% 40%; /* Opera */
}
</style>
<script>
function changeRot(value)
{
    document.getElementById('div2').style.transform="rotate(" + value + "deg)";
    document.getElementById('div2').style.msTransform="rotate(" + value + "deg)";
    document.getElementById('div2').style.webkitTransform="rotate(" + value + "deg)";
    document.getElementById('div2').style.MozTransform="rotate(" + value + "deg)";
    document.getElementById('div2').style.OTransform="rotate(" + value + "deg)";
    document.getElementById('persp').innerHTML=value + "deg";
}

function changeOrg()
{
    var x=document.getElementById('ox').value;
    var y=document.getElementById('oy').value;
    document.getElementById('div2').style.transformOrigin=x + '% ' + y + '%';
    document.getElementById('div2').style.msTransformOrigin=x + '% ' + y + '%';
    document.getElementById('div2').style.webkitTransformOrigin=x + '% ' + y + '%';
    document.getElementById('div2').style.MozTransformOrigin=x + '% ' + y + '%';
    document.getElementById('div2').style.OTransformOrigin=x + '% ' + y + '%';
    document.getElementById('origin').innerHTML=x + "% " + y + "%";            
}
</script>
</head>

<body>

<p>Rotate the red div element, try changing its X-axis and Y-axis:</p>

<div id="div1">
<div id="div2">HELLO</div>
</div>

Rotate:
<input type="range" min="-360" max="360" value="45" onchange="changeRot(this.value)" />
transform: rotateY:(<span id="persp">45deg</span>);
<br><br>
X-axis:<input type="range" min="-100" max="200" value="20" onchange="changeOrg()" id="ox" /><br>
Y-axis:<input type="range" min="-100" max="200" value="40" onchange="changeOrg()" id="oy" />
transform-origin: <span id="origin">20% 40%</span>;

</body>
</html>

CSS3 3D 转换(了解)

????????CSS3 允许您使用 3D 转换来对元素进行格式化。

浏览器支持

????????表格中的数字表示支持该属性的第一个浏览器版本号。

????????紧跟在 -webkit-, -ms- 或 -moz- 前的数字为支持该前缀属性的第一个浏览器版本号。

函数描述
matrix3d(n,n,n,n,n,n, n,n,n,n,n,n,n,n,n,n)定义 3D 转换,使用 16 个值的 4x4 矩阵。
translate3d(x,y,z)定义 3D 转化。
translateX(x)定义 3D 转化,仅使用用于 X 轴的值。
translateY(y)定义 3D 转化,仅使用用于 Y 轴的值。
translateZ(z)定义 3D 转化,仅使用用于 Z 轴的值。
scale3d(x,y,z)定义 3D 缩放转换。
scaleX(x)定义 3D 缩放转换,通过给定一个 X 轴的值。
scaleY(y)定义 3D 缩放转换,通过给定一个 Y 轴的值。
scaleZ(z)定义 3D 缩放转换,通过给定一个 Z 轴的值。
rotate3d(x,y,z,angle)定义 3D 旋转。
rotateX(angle)定义沿 X 轴的 3D 旋转。
rotateY(angle)定义沿 Y 轴的 3D 旋转。
rotateZ(angle)定义沿 Z 轴的 3D 旋转。

案例

????????多少像素的3D元素是从视图的perspective属性定义。这个属性允许你改变3D元素是怎样查看透视图。

????????定义时的perspective属性,它是一个元素的子元素,透视图,而不是元素本身。

????????注意:perspective 属性只影响 3D 转换元素。

????????值: 像素值,元素距离视图的距离,以像素计。

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
    #div0{
        width: 300px;
        margin: 30px;
        border: 2px solid red;
        perspective:1000px;
        background: red;
    }
    #div1,#div2,#div3{
        width: 200px;
        height: 150px;
        font-size: 50px;
        margin: 30px auto;
        background: green;
    }

    #div1:hover{
    /*transform: translate3d(0,0,-300px);*/
        transform:translateZ(-500px);
    }
    #div2:hover{
        transform: rotate3d(0,1,0,45deg);
        transform-origin:right;
    }

    #div3:hover{
        transform: scaleZ(2) rotateX(60deg);
        transform-origin:top;
    }

    body{
        perspective:1000px;
    }

    #div0:hover{
        transform:rotateX(45deg);
        -webkit-transform:rotateX(45deg);
        -moz-transform:rotateX(45deg);
        -o-transform:rotateX(45deg);
        -ms-transform:rotateX(45deg);
    }
  </style>
 </head>
 <body>
  <div id="div0">
      <div id="div1">3D平移</div>
      <div id="div2">3D旋转</div>
      <div id="div3">3D缩放</div>
    </div>
 </body>
</html>

二、CSS3 过渡

????????CSS3中,我们为了添加某种效果可以从一种样式转变到另一个的时候,无需使用Flash动画或JavaScript。

它是如何工作?

????????CSS3 过渡是元素从一种样式逐渐改变为另一种的效果。

????????要实现这一点,必须规定两项内容:

  • 指定要添加效果的CSS属性

  • 指定效果的持续时间。

属性描述
transition简写属性,用于在一个属性中设置四个过渡属性。
transition-property规定应用过渡的 CSS 属性的名称。
transition-duration定义过渡效果花费的时间。默认是 0。(以秒或毫秒计)
transition-timing-function

规定过渡效果的时间曲线。默认是 "ease"。

linear:规定以相同速度开始至结束的过渡效果。

ease:规定慢速开始,然后变快,然后慢速结束的过渡效果。

ease-in:规定以慢速开始的过渡效果。

ease-out:规定以慢速结束的过渡效果。

ease-in-out:规定以慢速开始和结束的过渡效果。

transition-delay规定过渡效果何时开始。默认是 0。

????????应用于宽度属性的过渡效果,时长为 2 秒:

div {
	transition: width 2s;
}

/*注意:?如果未指定的期限,transition将没有任何效果,因为默认值是0。
指定的CSS属性的值更改时效果会发生变化。一个典型CSS属性的变化是用户鼠标放在一个元素上时:规定当鼠标指针悬浮(:hover)于 <div>元素上时:*/
div:hover {
	width: 400px;
}

多项改变:

????????要添加多个样式的变换效果,添加的属性由逗号分隔:

<style>
div {
    width: 100px;
    height: 100px;
    background: red;
    -webkit-transition: width 2s, height 2s, -webkit-transform 2s; /* For Safari 3.1 to 6.0 */
    transition: width 2s, height 2s, transform 2s;
}

div:hover {
    width: 200px;
    height: 200px;
    -webkit-transform: rotate(180deg); /* Chrome, Safari, Opera */
    transform: rotate(180deg);
}
</style>

<p><b>注意:</b>该实例无法在 Internet Explorer 9 及更早 IE 版本上工作。</p>

<div>鼠标移动到 div 元素上,查看过渡效果。</div>

在一个例子中使用所有过渡属性:

<style>
div
{
    width:100px;
    height:100px;
    background:red;
    transition-property:width;
    transition-duration:1s;
    transition-timing-function:linear;
    transition-delay:2s;
    /* Safari */
    -webkit-transition-property:width;
    -webkit-transition-duration:1s;
    -webkit-transition-timing-function:linear;
    -webkit-transition-delay:2s;
}

div:hover
{
    width:200px;
}

<p><b>注意:</b>该实例无法在 Internet Explorer 9 及更早 IE 版本上工作。</p>

<div></div>

<p>鼠标移动到 div 元素上,查看过渡效果。</p>
<p><b>注意:</b> 过渡效果需要等待两秒后才开始。</p>

????????与上面的例子相同的过渡效果,但是使用了简写的 transition 属性:

div{
    transition: width 1s linear 2s;
    /* Safari */
    -webkit-transition:width 1s linear 2s;
}

三、CSS3 动画(关键帧动画)

????????CSS3 可以创建动画,它可以取代许多网页动画图像、Flash 动画和 JavaScript 实现的效果。

CSS3的动画属性

????????下面的表格列出了 @keyframes 规则和所有动画属性:

属性描述
@keyframes规定动画。
animation所有动画属性的简写属性,除了 animation-play-state 属性。
animation-name规定 @keyframes 动画的名称。
animation-duration规定动画完成一个周期所花费的秒或毫秒。默认是 0。
animation-timing-function

规定动画的速度曲线。默认是 "ease"。

linear:动画从头到尾的速度是相同的。

ease:默认。动画以低速开始,然后加快,在结束前变慢。

ease-in:动画以低速开始。

ease-out:动画以低速结束。

ease-in-out:动画以低速开始和结束。

animation-fill-mode规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式(不设置)。
animation-delay规定动画何时开始。默认是 0。定义动画开始前等待的时间,以秒或毫秒计。
animation-iteration-count规定动画被播放的次数。默认是 1。 n:一个数字,定义应该播放多少次动画 infinite 指定动画应该播放无限次(永远)
animation-direction

规定动画是否在下一周期逆向地播放。默认是 "normal"。

normal 默认值。动画按正常播放。

reverse 动画反向播放。

alternate 动画在奇数次(1、3、5...)正向播放,在偶数次(2、4、6...)反向播放。 alternate-reverse 动画在奇数次(1、3、5...)反向播放,在偶数次(2、4、6...)正向播放。

animation-play-state规定动画是否正在运行或暂停。默认是 "running"。

CSS3 @keyframes 规则

????????要创建 CSS3 动画,你需要了解 @keyframes 规则。

????????动画是使元素从一种样式逐渐变化为另一种样式的效果。

????????您可以改变任意多的样式任意多的次数。

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

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

????????为了得到最佳的浏览器支持,您应该始终定义 0% 和 100% 选择器。

????????@keyframes 规则是创建动画。

????????@keyframes 规则内指定一个 CSS 样式和动画将逐步从目前的样式更改为新的样式。

@keyframes myfirst {
	from {background: red;}
	to {background: yellow;}
}
@-webkit-keyframes myfirst /* Safari 与 Chrome */ {
	from {background: red;}
	to {background: yellow;}
}

CSS3 动画

????????当在 @keyframes 创建动画,把它绑定到一个选择器,否则动画不会有任何效果。

????????指定至少这两个CSS3的动画属性绑定向一个选择器:

  • 规定动画的名称

  • 规定动画的时长

????????把 "myfirst" 动画捆绑到 div 元素,时长:5 秒:

div {
    animation: myfirst 5s;
    -webkit-animation: myfirst 5s; /* Safari 与 Chrome */
}

????????注意: 您必须定义动画的名称和动画的持续时间。如果省略的持续时间,动画将无法运行,因为默认值是0。

百分比关键帧动画

????????动画是使元素从一种样式逐渐变化为另一种样式的效果。

????????您可以改变任意多的样式任意多的次数。

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

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

????????为了得到最佳的浏览器支持,您应该始终定义 0% 和 100% 选择器。

????????当动画为 25% 及 50% 时改变背景色,然后当动画 100% 完成时再次改变:

div{
    width:100px;
    height:100px;
    background:red;
    animation:myfirst 5s;
    -moz-animation:myfirst 5s; /* Firefox */
    -webkit-animation:myfirst 5s; /* Safari and Chrome */
    -o-animation:myfirst 5s; /* Opera */
}

@keyframes myfirst
{
    0%   {background:red;}
    25%  {background:yellow;}
    50%  {background:blue;}
    100% {background:green;}
}

????????改变背景色和位置:

div{
    width:100px;
    height:100px;
    background:red;
    position:relative;
    animation:myfirst 5s;
    -webkit-animation:myfirst 5s; /* Safari and Chrome */
}

@keyframes myfirst
{
    0%   {background:red; left:0px; top:0px;}
    25%  {background:yellow; left:200px; top:0px;}
    50%  {background:blue; left:200px; top:200px;}
    75%  {background:green; left:0px; top:200px;}
    100% {background:red; left:0px; top:0px;}
}

设置所有的属性

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>所有属性效果</title>
<style>
div
{
    width:100px;
    height:100px;
    background:red;
    position:relative;
    animation-name:myfirst;
    animation-duration:5s;
    animation-timing-function:linear;
    animation-delay:2s;
    animation-iteration-count:infinite;
    animation-direction:alternate;
    animation-play-state:running;
    /* Safari and Chrome: */
    -webkit-animation-name:myfirst;
    -webkit-animation-duration:5s;
    -webkit-animation-timing-function:linear;
    -webkit-animation-delay:2s;
    -webkit-animation-iteration-count:infinite;
    -webkit-animation-direction:alternate;
    -webkit-animation-play-state:running;
}

@keyframes myfirst
{
    0%   {background:red; left:0px; top:0px;}
    25%  {background:yellow; left:200px; top:0px;}
    50%  {background:blue; left:200px; top:200px;}
    75%  {background:green; left:0px; top:200px;}
    100% {background:red; left:0px; top:0px;}
}

@-webkit-keyframes myfirst /* Safari and Chrome */
{
    0%   {background:red; left:0px; top:0px;}
    25%  {background:yellow; left:200px; top:0px;}
    50%  {background:blue; left:200px; top:200px;}
    75%  {background:green; left:0px; top:200px;}
    100% {background:red; left:0px; top:0px;}
}
</style>
</head>
<body>

<p><b>注意:</b> 该实例在 Internet Explorer 9 及更早 IE 版本是无效的。</p>

<div></div>

</body>
</html>

????????与上面的动画相同,但是使用了简写的动画 animation 属性:

div{
    animation: myfirst 5s linear 2s infinite alternate;
    /* Safari 与 Chrome: */
    -webkit-animation: myfirst 5s linear 2s infinite alternate;
}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 18:01:41  更:2021-12-01 18:02:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 23:38:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码