css-变形动画

基础知识

坐标系统

要使用元素变形操作需要掌握坐标轴,然后通过改变不同坐标来控制元素的变形。
共有三个轴,就跟高中学的立体坐标系类似。

  • X轴是水平轴
  • Y轴是垂直轴
  • Z轴是纵深轴

变形操作

使用 transform 来控制元素变形操作,包括控制移动、旋转、倾斜、3D转换等
选项说明
none定义不进行转换
translate(x,y)定义2D转换
translate3d(x,y,z)定义3D转换
translateY(y)定义转换,只是用y轴的值
translateZ(z)定义转换,只是用z轴的值
scale(x,y)定义2D缩放转换
scale3d(x,y,z)定义3D缩放转换
scaleX(x)通过设置X轴的值来进行缩放转换
scaleY(y)通过设置y轴的值来进行缩放转换
scaleZ(z)通过设置z轴的值来进行缩放转换
rotate(angle)定义2D旋转,在参数中规定角度
rotate3D(x,y,z,angle)定义3D选择
rotateX(angle)定义沿着X轴的3D旋转
rotateY(angle)定义沿着Y轴的3D旋转
rotateZ(angle)定义沿着Z轴的3D旋转
shew(x-angle,y-angle)定义沿着X和Y轴的2D倾斜转换
shewX(angle)定义沿着X轴的2D倾斜转换
shewY(angle)定义沿着Y轴的2D倾斜转换
perspective(n)为3D转换元素定义透视视图

变形叠加

重复设置变形操作时只在原形态上操作。

默认处理
transform:translateX(n);   用translate设置时,如果重复设置移动距离,只有后面一个会生效
位类叠加
使用hover伪类操作时,会回到伪类中设置的位置

行级元素

行级元素不产生变形效果,将其转为 inline-block 或 block 以及弹性元素时都可以产生变化效果。


位类状态

伪类说明
:hover鼠标移动上后发生改变
:target鼠标点击发生变化

移动元素

  • 沿X轴移动时正值向右移动、负值向左移动
  • 沿Y轴移动时正值向下移动、负值向上移动
  • 如果使用百分数将控制元素的原尺寸计算百分比然后移动
  • 可同时设置多个值,解析器会从左向右依次执行
  • 变形是在原基础上更改,即第二次设置值时不是在第一次值上变化

translateX

正值向右移动、负值向左移动。

translateY

正值向下移动、负值向上移动。

translate

使用 translate 可以控制按X、Y同时移动操作,第一个值控制X移动,第二个值控制Y移动。

百分比移动

元素宽度为100px设置50%时将移动50px,即百分比是指元素的尺寸的百分比。

元素居中

居中可以使用多种方式,如弹性布局、定位操作,下面来看使用移动操作居中。

position: absolute;
 left: 50%;
 top: 50%;        /*position定位的是左上角,所以需要用transform移动来修正位置。
 transform: translate(-50%, -50%);

translateZ

控制Z轴移动,正数向外、负数向里移动。因为Z轴是透视轴没有像X/Y一样的固定尺寸,所以不能使用百分数。

transform-style: preserve-3d;  这一条语句可以让视角变成3D,否则观察不到z轴变化的效果。
transform: perspective(900px) rotateY(60deg);   这条语句进行透视 和绕Y轴旋转60度

translate3d

用于同时控制X/Y/Z轴的移动,三个值必须输入如果某个轴不需要移动时设置为零。


缩放元素

举例:数值为2时,表示为原尺寸的两倍。

scaleX

沿X轴缩放一半

transform:scaleX(.5);

scaleY

沿Y轴缩放一半

transform:scaleY(.5);

scale

同时设置X、Y轴缩放

scaleZ

沿Z轴缩放,需要3D透视才可见

scale3D

沿XYZ三个轴绽放元素,这个绽放用的很经典。


旋转操作

利用CSS可以控制元素按照不同的坐标轴进行旋转。

rotateX

控制元素安装X轴进行基本的旋转。

基本使用

transform:rotateX(90deg);   元素不可见
父级透视

当X轴旋转90deg后将无法看到元素,这时可以控制父级旋转从上看子元素。

稍后详解

rotateYrotateZ同理

参数顺序

参数顺序会对旋转方向产生影响。

transform:rotateX(60deg) rotateY(90deg);
transform:rotateY(90deg) rotateX(60deg);
效果不一样

例子:

  • 旋转文字
  • 电子时钟

倾斜操作

skewX
沿X轴倾斜元素

例子:

  • 按钮特效
  • 立体按钮

变形基点

使用transform-origin 设置元素的X、Y、Z操作的基点,用于控制旋转、倾斜等操作。

  • 默认以元素中心进行旋转,改变基点后可以照任意点进行旋转
  • 元素移动不受变形基点影响 例如 transform:translateX(90deg)
  • 基点是元素原始空间位,而不是translate移动之后的位置

例子:

  • 平面旋转
  • 倾斜控制
  • 三维旋转

变形顺序的影响

设置transform变形的前后顺序对变形结果是有影响
若设置origin在 rotate之前,则会按照新的rotate旋转,在之后则不会
例子:

  • 变形顺序的影响
  • 新年贺卡
  • 动感菜单

透视景深

perspective

  • 使用perspective来控制元素的透视景深
  • perspective规则为舞台控制景深,perspective属性为单个元素设置景深

舞台透视

perspective规则将整个父级作为透视元素,会造成里面每个元素的透视是不一样的。

单独透视

perspective函数为元素单独设置透视,所有应用相同函数的元素看起来透视都一个样


3D透视

transform-style 控制3dtous

  • 应用于舞台即变形元素的父级元素
  • 设置overflow:visible 时,preserve-3d无效
选项说明
flat2D平面舞台
preserve-3d3D透视舞台

例子:

  • 三维图集

观看视角

perspective-origin 用于控制视线的落点,就像我们眼睛看物体时的聚焦点。
需要设置perspective透视后才可以看到效果

  • 一般用于在舞台上控制子元素

位置参数

取值说明
x-axis定义该视图在X轴上的位置。 默认:50% 合理值:% left 等
y-axis定义该视图在Y轴上的位置。 默认:50% 合理值:% left 等

例子:

  • 参数位置效果体验
  • 立方体

隐藏背面

backface-visibility 控制是否可以看到元素的背面

  • 一般设置在元素上,而不是舞台上
  • 设置在舞台上(父元素) 时,需要给父元素设置transform-style:preserve-3d 有效
选项说明
visible背面可见
hidden背面隐藏

例子:

  • 翻转卡片

常见问题

如果发现元素不能点击,可能是父元素设置了 transform-style:preserve-3d属性,且同级元素设置了3D变化特性,造成对点击元素被遮挡。

解决办法:

  • 对变形元素设置 pointer-events: none; 让他不接受点击事件
  • 删除父级的 transform-style:preserve-3d 属性

本博客提到的例子,请访问我的github查看 https://github.com/shuaijiumei

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值