扫码关注官方订阅号
为什么运行动画后,原本居中的位置却发生了偏移?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
.box1 span:nth-child(1){ width: 80px; height: 80px; animation: span1 2s linear infinite ; margin: -40px 0 0 -40px; } .box1 span:nth-child(2){ width: 40px; height: 40px; animation: span2 1s linear infinite ; margin: -20px 0 0 -20px; }
这个坑我碰到过,你的定位转换别用transfrom,改成margin-left:-50%width;用了transfrom他会把初始位置定位到left:50%的地方。
transform-origin: center;
.box1 span{
position: absolute; border: 8px solid #fff; border-top: 8px solid transparent; border-radius: 999px; top: 50%; left: 50%; transform: translate(-50%,-50%); **transform-origin: 0 0;**
}@-webkit-keyframes span1{
0%{transform: rotate(360deg) **translate(-50%,-50%);** opacity: 1;} 50%{transform: rotate(180deg) **translate(-50%,-50%);** opacity: .5;} 100%{transform: rotate(0deg) **translate(-50%,-50%);** opacity: 0;}
}@-webkit-keyframes span2{
0%{transform: rotate(0deg) **translate(-50%,-50%);** opacity: .5;} 50%{transform: rotate(180deg) **translate(-50%,-50%);** opacity: 1;} 100%{transform: rotate(360deg) **translate(-50%,-50%);** opacity: .5;}
}
原因是楼上说的,因为用了css3动画,所上面设置偏移的时候不要用transfrom,顺手把具体的代码写出来:
transfrom
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> * { padding: 0px; margin: 0px; } .box1 { width: 600px; height: 200px; background: orange; position: relative; } .box1 span { position: absolute; border: 8px solid #fff; border-top: 8px solid transparent; border-radius: 999px; top: 50%; left: 50%; /*移除这里定位*/ } .box1 span:nth-child(1) { width: 80px; height: 80px; /*新增*/ margin-left: -40px; margin-top: -40px; animation: span1 2s linear infinite ; } .box1 span:nth-child(2) { width: 40px; height: 40px; /*新增*/ margin-left: -20px; margin-top: -20px; animation: span2 1s linear infinite ; } @keyframes span1 { 0% { transform: rotate(360deg); opacity: 1; } 50% { transform: rotate(180deg); opacity: .5; } 100% { transform: rotate(0deg); opacity: 0; } } @-webkit-keyframes span1 { 0% { transform: rotate(360deg); opacity: 1; } 50% { transform: rotate(180deg); opacity: .5; } 100% { transform: rotate(0deg); opacity: 0; } } @-webkit-keyframes span2 { 0% { transform: rotate(0deg); opacity: .5; } 50% { transform: rotate(180deg); opacity: 1; } 100% { transform: rotate(360deg); opacity: .5; } } </style> </head> <body> <p class="box1"> <span></span> <span></span> </p> </body> </html>
你需要用绝对定位将要旋转的元素的初始点定位到元素的中心,正常的初始点是在左上用left:50%;top:50%;margin-left:-20px/元素的二分之一/;margin-top:-20px/元素的二分之一/;这样元素的旋转就不会出现交错了。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
这个坑我碰到过,你的定位转换别用transfrom,改成margin-left:-50%width;用了transfrom他会把初始位置定位到left:50%的地方。
.box1 span{
}
@-webkit-keyframes span1{
}
@-webkit-keyframes span2{
}
原因是楼上说的,因为用了css3动画,所上面设置偏移的时候不要用
transfrom,顺手把具体的代码写出来:你需要用绝对定位将要旋转的元素的初始点定位到元素的中心,正常的初始点是在左上
用left:50%;top:50%;margin-left:-20px/元素的二分之一/;margin-top:-20px/元素的二分之一/;
这样元素的旋转就不会出现交错了。