根据父元素的大小或窗口的大小更改translateX的值和元素的大小

时间:2016-02-14 14:04:13

标签: javascript jquery html css css3

我希望这个问题不是太具体,所以它可能与其他问题有关......

我有两个元素,一个子元素和一个父元素,子元素使用CSS动画围绕父元素旋转。

<div class="planet">

<div class="moon"></div>

</div>

设置卫星动画,以便月球将在同一位置加载到行星的顶部,但是会被翻译出来然后被摧毁,如下所示:

@keyframes myOrbit {
from { transform: rotate(0deg) translateX(200px) rotate(0deg); }
to   { transform: rotate(360deg) translateX(200px) rotate(-360deg); }
}

把它想象成一个月球在地球周围旋转的行星。

当用户调整窗口大小时,行星高度/宽度将调整大小,但我还需要卫星高度/宽度来调整大小,并且它与行星之间的距离需要降低。

我在这里设置了一个例子...... https://codepen.io/anon/pen/mVvYbR

这可能只用CSS来实现,还是需要javascript?如果需要的话我会使用jQuery,(虽然我不是很擅长)但是我认为纯CSS解决方案会更干净......也许我错了。

我还应该注意到它目前的设置方式(行星div持有月亮,这样我可以有多个孩子(多个卫星)。但是我也认为这意味着要有大量的需要不同translateX的卫星/行星的不同动画...所以也许jQuery是一个更好的解决方案...

如果我不清楚,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分:1)

你可以尝试用css来做。您可以使用视口单位,因此所有值都将取决于视口大小。

.planet {
    width: 10vw;
    height: 10vw;
      background: url(http://placehold.it/940x940) no-repeat center center;
    background-size: contain;
    z-index: 1;
}

.moon {
    position: absolute;
    background: url(http://placehold.it/140x140) no-repeat center center;
    background-size: contain;
    width: 5vw;
    height: 5vw;
    -webkit-animation: myOrbit 20s linear infinite;
       -moz-animation: myOrbit 20s linear infinite;
         -o-animation: myOrbit 20s linear infinite;
            animation: myOrbit 20s linear infinite;
}

@keyframes myOrbit {
    from { transform: rotate(0deg) translateX(20vw) rotate(0deg); z-index:1}
    to   { transform: rotate(360deg) translateX(20vw) rotate(-360deg); z-index:2}
}

样本 - &gt; here

可能您需要添加一些媒体查询来处理不同的屏幕宽高比。当前视口单元支持 - &gt; caniuse.com