前言:这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方,请大家指正,我会持续更新!

  有段时间我是没理清 transform、translate、transition 和 animation之间的关系的,现在整理一下:

  • translate:平移;是 transform 的一个属性;
  • transform:变形;是一个静态属性,可以改变元素的形状或位置,做出 2d 或 3d 效果;
  • transition:过渡,转变;使 css 属性值在一段时间内平滑的变化,需要有触发条件(如 hover 等),是 animation 的简化版;
  • animation:动画;可以设置多帧效果,然后把它们组合变换,按动画效果展示出来;

    

  • transform,可设置 translate(位移)  rotate(旋转)  scale(缩放)  skew(倾斜);接受多值,用空格分开,并按照从前往后的顺序执行
  • transform-origin,可更改转换元素的基准点(默认值,元素中心,50% 50% 0);
  • transform-style,可设置 flat(默认值,2d展示)还是 preserve-3d(3d展示);此属性必须在 transform 之后使用;
  • perspective,设置元素距离视图的距离,默认为0;
  • perspective-origin,设置视点(默认值,元素中心,50% 50%),必须和 perspective 结合使用;
  • backface-visibility,设置元素不面向屏幕时是否可见;

translate

  translate(位置平移)

  • 可以为负值,向右向下是正值,向上向左是负值;
  • 可以为百分比,百分比是基于元素自身宽高的(我们可以利用这一点实现 未知宽高的元素的垂直居中);
  • 2d效果可以拆开写成 translateX(x)、translateY(y),也可以直接写成translate(x,y),缩写中如果只写了一个值,默认是x;
  • 3d效果还有 translateZ(z),缩写 translate3d(x,y,z),3d效果中缩写的话,就必须得写3个值,少一个都不行,没有的值可以设为0;

rotate

  rotate(旋转)

  • 可以设负值;正值是顺时针旋转,负值是逆时针旋转;
  • 可以写成 rotateX(deg)、rotateY(deg)、rotateZ(deg);(角度的单位,负30度就是-30deg)

scale

  scale(缩放)

  • 可以是整数,也可以是小数,也可以设置负值;
  • 可以写成 scaleX(x)、scaleY(y)、scaleZ(z),也可以缩写成 scale(x,y) 或者 scale3d(x,y,z);
  • 当某值设为0时,就看不见元素了,但是空间还在,和 visibility:hidden 效果一样;
  • 当设置负值的时候,会发生翻转的效果
  • 缩放看起来虽然大小变化了,但占据的空间不变,不会影响布局;
      <style type="text/css">
    * {
    padding: 0;
    margin: 0;
    } .wrapper {
    width: 300px;
    margin: 100px 0 0 100px;
    border: 10px solid red;
    } .test {
    width: 200px;
    height: 200px;
    display: inline-block;
    background: #0ff;
    transform: scale(.5, -1);
    border: 1px solid #f60;
    } .test img {
    max-width: 100%;
    }
    </style>
    <div class="wrapper">
    <span class="test"><img src="data:images/1.jpg" /></span>
    <span>scale可以设置小数,也可以设置负值;虽然大小看起来变化了,但占据的空间不变,不会影响布局</span>
    </div>

skew

  • 可以写成 skewX(deg)、skewY(deg),也可以缩写成 skew(x,y),缩写如果只写了一个值,那就默认仅仅只是 x 轴;
  • 目前没有 Z 轴的倾斜;
  • 围绕 X 轴倾斜,会保持高度不变,拉长元素,产生变形;
  • 围绕 Y 轴倾斜,会保持宽度不变
  • 可以写负值,(下图为X轴的正值和负值);

  

  

  <style type="text/css">
* {
padding: 0;
margin: 0;
} .wrapper {
width: 300px;
height: 300px;
position: relative;
margin: 100px 0 0 100px;
border: 1px solid red;
background: #0ff;
} .test {
width: 150px;
height: 60px;
position: absolute;
left: 30%;
top: 30%;
background: #f60;
transform: skewX(-45deg);
}
</style>
<div class="wrapper">
<div class="test"></div>
</div>

transform-origin

  设置转换元素的基准点,然后元素的变形就围绕这个点展开;

  • 默认值是元素中心(50% 50% 0);
  • X 和 Y 轴可以设置单位值、百分比、left | center | right | top | bottom;Z轴只能设置具体单位值;
  • 可以设置1-3个值,用空格隔开,如果只写了1个,那么仅仅只是X轴;2个的话,就是 X 轴和 Y 轴;

transform-style

  设定元素及其子元素怎样在三维空间中展示;

  • 默认值,flat,2d平面;设置为 preserve-3d,就是3d空间;
  • 当元素设置 overflow:hidden 的时候,preserve-3d 失效;
  • 一般我们在元素的父元素身上使用,因为此属性可以继承;

prespective

  设置元素距离视图的距离,

   

  • 默认为 none(0);可设置具体值,以像素为单位,不能为负值;
  • 我们看远处的物体,会发现看不清,当我们走近一点的时候,就看得清除了,此属性可以理解为我们站的位置离物体的距离;
  • 我们一般在变形元素的父元素身上使用,因为浏览器会为其子元素产生透视效果,不会为它本身产生透视效果;设置了此属性的元素我们也叫透视元素;

prespective-origin

    设置视点;

  

  • 默认值(50% 50%),可设置单位值、百分比、left | center | right | top | center | bottom ;
  • 可以设置1-2个值,设置1个值时,另一个默认为 center;
  • 可以理解为我们看妹子的时候看的哪个位置,脸?腿?胸?
  • 此属性必须定义在设置了 prespective 属性的元素身上;

backface-visibility

  设置当元素不面向屏幕时,是否可见;如果旋转元素不希望看见其背面时,此属性很好用;

  • 默认 visible,可设置 hidden;

  

  正方体后面要绕 Y 轴旋转180度,我一开始没想起来,调了很久;

  <style type="text/css">
* {
padding: 0;
margin: 0;
} li {
list-style: none;
} /*定义舞台容器*/
.panel {
width: 800px;
margin: 100px auto;
perspective: 1300px;
/*定义视距*/ } .panel:hover ul {
transform: rotateY(60deg)rotateZ(45deg);
} /*立方体*/
ul {
width: 100px;
height: 100px;
margin: auto;
position: relative;
transform-style: preserve-3d;
/*定义该立方体是个3D元素*/
transform: rotateX(-30deg) rotateY(20deg);
transition: all 2s;
cursor: pointer;
} /*立方体六个面*/
li {
width: 100px;
height: 100px;
position: absolute;
top: 0;
left: 0; font: 30px/100px "微软雅黑";
text-align: center;
color: #fff;
backface-visibility: hidden;
} .front {
transform: translateZ(50px);
background: rgba(0, 255, 0, .6);
} .back {
transform: translateZ(-50px) rotateY(180deg);
/*后面要旋转绕Y轴180度,我一开始没想起来,调了很久*/
background: rgba(255, 0, 255, .6);
} .left {
transform: translateX(-50px) rotateY(-90deg);
background: rgba(0, 0, 255, .6);
} .right {
transform: translateX(50px) rotateY(90deg);
background: rgba(255, 255, 0, .6);
} .top {
transform: translateY(-50px) rotateX(90deg);
background: rgba(255, 0, 0, .6);
} .bottom {
transform: translateY(50px) rotateX(-90deg);
background: rgba(0, 255, 255, .6);
}
</style>
<div class="panel">
<ul>
<li class="top">上</li>
<li class="bottom">下</li>
<li class="left">左</li>
<li class="right">右</li>
<li class="front">前</li>
<li class="back">后</li>
</ul>
</div>

  大神还整理了 transform 的副作用请点击

  • 设置了 transform:非none; 的元素,可以覆盖标准流元素和低级别的定位元素;
  • webkit 内核浏览器下,如果父元素设置了 transform:非none; 那么子元素的fixed效果会变成 absolute 效果;
  • 更改定位父级 position:absolute; 定位的是祖先元素中第一个 position:非static 的元素;但是如果祖先元素中有设置了 transform:非none;也可以被定位为父级

transform做2d和3d变形(css动画一)的更多相关文章

  1. Mathcad 是一种工程计算软件,主要运算功能:代数运算、线性代数、微积分、符号计算、2D和3D图表、动画、函数、程序编写、逻辑运算、变量与单位的定义和计算等。

    Mathcad软件包Mathcad是由MathSoft公司(2006 年4 月被美国PTC收购)推出的一种交互式数值计算系统. Mathcad 是一种工程计算软件,作为工程计算的全球标准,与专有的计算 ...

  2. css3 2d转换3d转换以及动画的知识点汇总

    css3 2d转换 2d转换的方法: 1.移动 translate(x, y) 可以改变元素的位置,x.y可为负值: 2.缩放 scale(x, y) 可以对元素进行水平和垂直方向的缩放,x.y的取值 ...

  3. transform的2D和3D变换

    transform取值 none:默认值,即是无转换 matrix(,,,,,): 以一个含六值的(a,b,c,d,e,f)变换矩阵的形式指定一个2D变换,相当于直接应用一个[a,b,c,d,e,f] ...

  4. CSS3—— 2D转换 3D转换 过渡 动画

    2D转换 对元素进行移动.缩放.转动.拉长或拉伸 ————>  ————>   移动 顺时针旋转 扩大/缩小 倾斜 2D变换合并  3D转换 绕x轴 绕y轴 过渡 从一种样式逐渐改变为另一 ...

  5. 关于transform的2D

    在transform的学习中,自己总结了一点经验. 我们知道transform有2D和3D的两大类变换,这里分享下关于2D的属性简单示例: 一.2D变换:  (x为水平,y为垂直) 1.skew(斜拉 ...

  6. css 动画(一)transform 变形

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 有段时间我是没理清 transform.translate.transition 和 animation之 ...

  7. 9.css3动画-2D/3D变形--trasform

    transform: None不转换. Translate(x,y)通过设置X轴的值进行移动. translateY(y)通过设置Y轴的值进行移动. Scale(x,y)定义2D缩放. ScaleX( ...

  8. transition和animation做动画(css动画二)

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! translate:平移:是transform的一个属性: transform:变形:是一个静态属性,可以 ...

  9. css—动画(transform, transition, animation)

    transform 静态属性,一旦写进style里面,会立即显示作用,无任何变化过程.(类似于left, right, top, bottom这类属性) 主要用来做元素的变形 改变元素样式的属性主要有 ...

随机推荐

  1. PAT-L2-007-gplt真题

    题目分析: 1. 首先,题目说一个家庭有孩子爸爸妈妈等几辈人,可以利用并查集将一个家庭里的所有人变成一个集合: 2. 刚好题目的目的也是这样,输出的是一个家庭人数,人均房产面积,人均房产套数等: 3. ...

  2. Redis学习笔记(三)常用命令整理

    Redis 常用命令 1.DEL key 删除key2.EXISTS key 检查key是否存在3.KEYS * 查看所有的key4.EXPIRE key seconds 设置key的过期时间5.TT ...

  3. color 圆盘染色

    Color 圆盘染色 题目大意:给你一个圆盘,等分成n个扇形,有m种颜色,每两个相邻的扇形不能相交,求染色方案数. 注释:m,n<=$10^6$. 想法:这题是小圆盘染色的加强版(小圆盘染色?) ...

  4. linux设置代理修改接口数据

    其实很简单,希望看到的人可以一次搞定,所以我把所有步骤写一块儿了. 1.首先在自己能上网的机器上安装fiddler,程序自己百度搜就可以,百度软件中心的程序就行. 2.安装fiddler后,管理员权限 ...

  5. 【总结】关于YUV-RGB格式转换的一些个人理解

    这段时间一直在研究YUV的格式问题例如YUV422.YUV420,在网上搜索了很多这方面的资料,发现很多资料讲的东西是重复的,没有比较深入的讲解,所以看了之后印象不是很深,过了一段时间之后又对它们有了 ...

  6. C语言第三次作业--嵌套循环

    一.PTA实验作业 题目1:硬币数 1. 本题PTA提交列表 2. 设计思路 步骤一:定义整型变量fen5,fen2,fen1,表示1分2分和5分,零钱数额x,总硬币数total,换法count 步骤 ...

  7. 201621123050 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallR ...

  8. fflush(stdin)与fflush(stdout)

    1.fflush(stdin): 作用:清理标准输入流,把多余的未被保存的数据丢掉.. 如: int main() { int num; char str[10]; cin>>num; c ...

  9. Ubuntu下tomcat或eclipse启动提示没有java环境问题

    tomcat和eclipse默认使用了openjdk,通过压缩包安装的jdk无法被识别,通过修改tomcat/bin下的catalina.sh添加jdk和jre路径即可 sudo gedit cata ...

  10. PostgreSQL 客户端乱码问题

    关于客户端和服务器端的乱码问题, POSTGRESQL字符集问题总结 总结的很详细, 特别棒. 这里让我头痛了很久的问题在于 终端 上字符编码的问题, 由于我的mbp上的 iterm2 的默认编码为 ...