【CSS3】CSS3新特性——2D转换

什么是转换(transform)

转换可以理解为变形,可以实现元素的移动(translate)、旋转(rotate)、缩放(scale)等效果
 

移动translate

transform: translate(x,y);		/*总写*/
transform: translateX(n);
transform: translateY(n);		/*分开写也行*/
  1. 作用:改变元素在页面中的位置,类似定位
  2. translate最大的优点:不会影响其他元素的位置
  3. 百分比写法是自身元素的百分比:translate:(50%, 50%);
  4. 对行内标签无效

 
旋转rotate

transform: rotate(度数);
  1. 度数的单位是deg(度)
  2. 正值表示顺时针负值表示逆时针
  3. 默认旋转中心是元素的中心点

 
缩放scale

transform: scale(x, y);
  1. x和y用逗号隔开而不是空格
  2. transform: scale(0.5);等价于transform: scale(0.5, 0.5);
  3. scale缩放的最大优势:不影响其他元素可以设置中心点
     

变换中心transform-origin

tansform-origin: x y;		/* 2D转换中心点 */
  1. x和y参数之间用空格隔开
  2. 默认中心点当然是(50% 50%)
  3. x和y也可以是方位名词top bottom left right center
     

综合性写法(连写)

transform: translate() rolate() scale()...
  1. 空格隔开
  2. 顺序会影响转换的效果。比如先旋转会改变坐标轴方向
  3. 当同时有位移(translate)和其他属性的时候,记得将位移放在最前面
     

 

 

什么是动画(animation)

可通过多个节点来精确控制一个或一组动画,相较于过渡,变化效果更多
 

基本使用
 

  1. 用keyframe(关键帧)定义动画@keyframes+名字+自定义动序列)
  2. 调用动画animation-name + animation-duration,即名字+持续时间)(必须写的属性)

另: 关于动画序列,from/to等价于 0% / 100%
 

动画属性

animation-timing-function动画的速度曲线ease(默认),linear
animation-delay动画延迟多少后开始0(默认)
animation-iteration-count动画播放次数1(默认),infinite(无限)…
animation-direction动画下一周期是否反方向normal(默认),alternate(逆播放)…
animation-fill-mode动画结束后的状态backwards(默认跳回原处),forwards(保持位置)…
animation-play-state动画的运行or暂停running(默认),paused

连写:动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 结束的状态( animation-play-state 不在连写之中)

即:animation: name duration timing-function delay iteration-count direction fill-mode;
 

补充知识——关于速度曲线

上面提到过 animation-timing-function 的默认值是ease,还可以取linear;其实还有:

ease加快,在结束前变慢
ease-in动画以低速开始,加快
ease-out动画以低速结束,减慢
ease-in-out开始和结束低速,中间快
steps()指定了时间函数中的间隔数量(步长)

steps()就是分几步完成动画;有了steps就不要再写ease和linear了

 

 

 
一个案例
在这里插入图片描述

/* 基本思路是: */
/* 1.精灵图当做一个div盒子的背景,精灵图的background-position分步进行移动————hana的贴图摇动 */
/* 2.div设置为绝对定位(由于没有有定位的祖先,因此以浏览器为基准),利用left做一个动画————hana的移动 */
        
div {
    position: absolute;
    width: 200px;
    height: 200px;
    background: url(hana.png) no-repeat;
    /* 元素可以添加多个动画,用逗号隔开 */
    animation: hana 1.5s steps(7) infinite, move 4s forwards;
    /* infinite用于让hana一直摇动;forward让hana走到中间后保持位置 */
    }
        
@keyframes hana {
	0% {
        background-position: 0 0;
    }
    100% {
        background-position: -1400px 0;
        /* 注意给background-position负值 */
    }
}
        
@keyframes move {
    0% {
         left: -200px;
     }
     100% {
         left: 50%;
         transform: translateX(-50%);
         /* 这样就行居中的修正,省去了计算 */
     }
}

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

☀ 注

文章案例改编自《黑马程序员-web前端

&Lolisaikou

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值