【问题标题】:Change value of translateX and size of element based on size of parent element OR size of window根据父元素的大小或窗口的大小更改 translateX 的值和元素的大小
【发布时间】:2016-05-25 09:03:55
【问题描述】:

我希望这个问题不要太具体,以便与其他问题相关...

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

<div class="planet">

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

</div>

月亮动画设置为月亮将加载到行星顶部的相同位置,但被 translateX 推出然后旋转,如下所示:

@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 是一个更好的解决方案......

如果我有什么不清楚的地方,请告诉我。

谢谢!

【问题讨论】:

标签: javascript jquery html css


【解决方案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}
}

示例 -> here

您可能需要添加一些媒体查询来处理不同的屏幕纵横比。当前视口单位支持 -> caniuse.com

【讨论】:

  • 啊,谢谢你,这真是太好了。一个问题:为什么要在 from 和 to 中添加 z-index?还有没有办法让 translateX 从@keyframes 和一般样式规则中取出?所以我可以用jquery控制它
  • z-index 是强制浏览器在调整大小时计算尺寸(它强制计算和绘制)。是的,您可以将 translateX 移到动画之外。
  • 如果我把 translateX 拿出来,它似乎会破坏动画。如果我把它放在 .moon { transform: translateX(20vw); } 它似乎不喜欢它。我一定是在这里做错了
猜你喜欢
  • 2017-08-31
  • 2011-03-07
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 2016-10-08
  • 2016-06-08
相关资源
最近更新 更多