【问题标题】:Endless Rotating DIV but with Absolute Positioning无限旋转 DIV 但具有绝对定位
【发布时间】:2017-12-24 03:23:20
【问题描述】:

我遇到了一个问题,我有一个具有绝对位置的 div,我正在尝试将它旋转 360 度并无​​限循环。但是如果我使用 transform: translate (-50%,-50%) 来使这个 div 完全居中,它将无法正常工作。

HTML

<div class="randomName"></div>

CSS

.randomName {
background-color: orange;
width: 1500px;
height: 1500px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
animation: orbita 2s linear infinite;
-webkit-animation: orbita 2s linear infinite;
-moz-animation: orbita 2s linear infinite;
-o-animation: orbita 2s linear infinite;
}

@keyframes orbita {
0%  {transform: rotate(0deg);}
100% {transform: rotate(360deg);}  
}

不知道为什么不工作。有人可以指导我吗?谢谢!

【问题讨论】:

    标签: html css css-animations css-transforms


    【解决方案1】:

    使用动画时,您通过指定一个新属性来覆盖初始变换属性。相反,您需要附加旋转来翻译,以使它们都能正常工作:

    .randomName {
      background-color: orange;
      width: 150px;
      height: 150px;
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
      animation: orbita 2s linear infinite;
      -webkit-animation: orbita 2s linear infinite;
      -moz-animation: orbita 2s linear infinite;
      -o-animation: orbita 2s linear infinite;
    }
    
    @keyframes orbita {
      0% {
        transform:translate(-50%, -50%) rotate(0deg);
      }
      100% {
        transform:translate(-50%, -50%) rotate(360deg);
      }
    }
    &lt;div class="randomName"&gt;&lt;/div&gt;

    另一种解决方案是使用另一种方式将元素居中并保持动画不变。

    这是一个使用 flex 使元素居中的示例:

    body {
      height: 100vh;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    
    .randomName {
      background-color: orange;
      width: 150px;
      height: 150px;
      animation: orbita 2s linear infinite;
      -webkit-animation: orbita 2s linear infinite;
      -moz-animation: orbita 2s linear infinite;
      -o-animation: orbita 2s linear infinite;
    }
    
    @keyframes orbita {
      0% {
        transform: rotate(0deg);
      }
      100% {
        transform: rotate(360deg);
      }
    }
    &lt;div class="randomName"&gt;&lt;/div&gt;

    【讨论】:

    • 感谢@Temani Afif 我今晚和你学到了很多:D!!太棒了!
    • 一个简单的问题@Temani Afif 现在已经更正了,为什么如果我将 Div 的大小增加到 4000px 高度和 4000px 宽度,同时旋转时,div 的正方形形状会在旋转时急剧减小看起来更像一个矩形? (所以你可以在旋转而不是覆盖整个背景时错误地看到背景)。我的想法是为 body 设置一个背景色,这个 div 将是一个模拟空间缓慢旋转的星星 png 图像,但是星星图像的 div(我们一直在努力完全居中的那个)在旋转时会减小尺寸?
    • @Eugenio 所以我假设你有一个大屏幕?至于可能的情况,如果我把 1500px 我看不到身体背景......首先我建议将overflow:hidden 添加到身体以避免一些不良影响,然后你可以使用 vh/vw 单位而不是 px 这样你就可以制作相对于视口的正方形大小(尝试例如 400vh(高度)和 400vw(宽度))
    • 真的很奇怪,我不明白这是怎么回事。已经有一个溢出的身体:隐藏;另外,用border-radius: 50% 舍入div;只是为了检查失真是否真的发生了。并发现是的,如果您将 div 的大小增加到屏幕大小的 2 倍,使用 200vw 和 200vh 它会不断扭曲元素,您可以从背景看到它周围的边框。让我给你看,我准备一个 JsFiddle:)
    • 但如果你将 div 的大小增加到大于屏幕。假设是 5000px X 5000px,即使它在旋转时一直在角落显示身体背景颜色jsfiddle.net/70Loxsvo/1@Temani Afif
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多