用 top left 定位和 transform 的区别

链接:https://www.zhihu.com/question/334077465/answer/759985633
来源:知乎

最首要的区别是元素位置:
使用 top left 定位是直接改变元素真实位置的,简单来说你 top: 5px 那就真的是离父容器上端 5px 或者偏离顶部定位 5px(这里我们不讨论 position 各种定位的破事)

但是你用 transform: translateY(-5px) 只是改变了视觉位置,元素本身位置还是在 0px,只是视觉上向上偏移了 5px。这一点对于 css 布局是非常重要的,因为大多数情况下你不希望一个元素在动画的时候(比如飞离 fade off)会导致父元素大小改变然后导致 siblings 元素位置变动从而导致集体 shaking,所以很多时候我们用 transform。

其次的区别是这两种定位本身的语法:

做效果的时候 transform 相对来说是比较方便的,因为 transform 的视角是元素本身,所以比较直观。比如你希望一个元素向左飞 50px 那就是 transform: translateX(-50px),但是如果用 left 而你的父子元素都是 position: absolute,那可能你用 left 就要写成从 left: 100px 到 left: 30px,这就很不直观。

最后的区别是效率:
由于 transform 不改动 css 布局,因为渲染行为大多数情况下在元素本身,所以效率比 top left 要高。另外在早期的一些版本,用 transform: translateZ(0px) 强制开启硬件加速好像只能应用在 transform 上,不知道现在这个东西改了没。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值