CSS中定位和transform的比较

探讨CSS中Position和Transform属性在移动元素时的区别。Position适用于相对定位,而Transform(尤其是translateX和translateY)在实现相同效果时,提供更优的浏览器性能,减少重绘时间,特别适合动画和大规模项目。

探讨对象


Position

CSS中我们想要改变一个元素的位置,我们可以采用的方法之一就是定位,这也是我们最先接触的方法。其主要用法就是给需要移动的元素的父元素或以上添加 position:relative; 再给自身添加 position:absolute; 然后通过改变方位(top,left,right,bottom)来实现元素的移动。

transform

CSS3中提供了transform属性,其中的translateX和translateY值可以实现元素的横向与纵向移动。


区别和选择

既然在已有移动功能存在的情况,为何CSS3需要新增一个transform属性呢?请大家看下面这个demo

  <style>
    .box {
      width: 100px;
      height: 100px;
      background: red;
      position: relative;
      animation: move1 3s;
    }
    @keyframes move1 {
      from {
        left: 0px;
      }
      to {
        left: 200px;
      }
    }
    @keyframes move2 {
      from {
        transform: translateX(0);
      }
      to {
        transform: translateX(200);
      }
    }
  </style>
  <body>
    <div class="box"></div>
  </body>

我们定义了一个div块,同时写了两个动画move1和move2,其中move1是采用position的方法让div块从左到右移动200px。move2是采用transform让div块从左到右也是移动200px。那么,既然都是同样的效果,主要差别体现在哪里呢?

这张图片展示了move1也就是postion方法移动div的浏览器的性能测试,我们可以看到在前3s内浏览器重绘时间为 26.9ms,25.8ms,24.7ms总共加起来有80ms多。让我们再来看看move2,也就是transform的测试结果我们可以明显看到,move2消耗的时间只用3.5ms,2.8ms,1.9ms,总过不过8ms多。性能消耗只有position的十分之一!可想而知,CSS3推出新的transform属性也是加快了浏览器的运行速度。


总结


总的来说,当我们能用transform实现预想的效果就不要去使用position了,一个小小的demo就能达到10倍的差距,可想而知在大型项目中差距会更加明显。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值