css旋转div,div位置发生偏移

本文解决了一个常见问题:在实现网页上旋转加载动画时,元素旋转过程中出现的位置偏移。通过调整CSS定位属性,避免了transform属性在旋转和居中定位时的冲突,确保了加载动画的正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现下图的遮罩层loading旋转。

 

但是旋转的时候却发现旋转块发生了位置偏移。

代码如下

<div class="mask">
  <div class="load-circle">
  </div>
</div>
/* 遮罩层 */
.mask {
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
  background: #3958fe;
  z-index: 999;
}
/* 旋转圆圈 */
.mask .load-circle {
  width: 29px;
  height: 29px;
  border-radius: 50%;
  border: 5px solid #fff;
  border-right: 5px solid #3958fe;
  position: absolute;
  top: 50%;
  left: 50%;
  transform:translate(-50%,-50%);   /******* 导致发生偏移的问题代码 *******/
  -webkit-transition-property: -webkit-transform;
  -webkit-transition-duration: .9s;
  -moz-transition-property: -moz-transform;
  -moz-transition-duration: .9s;
  -webkit-animation: rotate .9s linear infinite;
  -moz-animation: rotate .9s linear infinite;
  -o-animation: rotate .9s linear infinite;
  animation: rotate .9s linear infinite;
}

/* 旋转动画 */
@-webkit-keyframes rotate {
  from{ -webkit-transform: rotate(0deg) }
  to{ -webkit-transform: rotate(360deg) }
}
@-moz-keyframes rotate {
  from{ -moz-transform: rotate(0deg) }
  to{ -moz-transform: rotate(360deg) }
}
@-o-keyframes rotate {
  from{ -o-transform: rotate(0deg) }
  to{ -o-transform: rotate(360deg) }
}
@keyframes rotate {
  from{ transform: rotate(0deg) }
  to{ transform: rotate(360deg) }
}

 

把问题代码揪出来

position: absolute;
top: 50%;
left: 50%;
transform:translate(-50%,-50%);

是我常用的居中css样式。怎知在这里就成了bug。

 

 

看看css手册。旋转用到了 transform,我居中定位也用到了transform,两个搅在一起不打架才奇怪。

这个时候只能放弃 transform的居中写法。采用其他居中写法。

因为旋转的div宽高固定,可以改写为这样子居中

position: absolute;
top: 50%;
left: 50%;
margin-left: -17px;
margin-top: -17px;

 

 

 

旋转的动画如下(有时候为了浏览器兼容,会加上浏览器内核前缀重复定义动画)

@keyframes rotate {
  from { transform: rotate(0deg) }
  to   { transform: rotate(360deg)}
}

为一个div添加无限旋转(有时候为了浏览器兼容,会加上浏览器内核前缀重复定义动画)

div {
  animation: rotate 1s linear infinite;
  -webkit-animation: rotate 1s linear infinite; /* Safari 和 Chrome */
}

 

 

animation语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值