可以在关键帧中设置子元素的属性吗

Posted

技术标签:

【中文标题】可以在关键帧中设置子元素的属性吗【英文标题】:Can a property of a child element be set in a keyframe 【发布时间】:2014-12-21 21:34:12 【问题描述】:

我已经使用 @keyframes 成功地为 div 设置了动画,但我需要同时更改该 div 的子元素的属性。有没有办法从关键帧中处理子元素?

html

<div class="layoutBlocks" id="layoutBlock1">
    <div class="Wrappers">
      <div class="transparentBG"> <!--semi=transparent underlay-->
    </div>
</div>
<div class="Wrappers">
    <div class="articles" id="article1">
        <table>
            <tr><th>heading</th></tr>
            <tr><td>article</td></tr>
        </table>
    </div>
</div>

CSS

#layoutBlock1 
    left: 0%;
    top: 0%;
    width: 49.75%;
    height: 49.25%;
    -webkit-animation: LlB1 1s;
    animation: LlB1 1s;


@-webkit-keyframes LlB1 
    0%   width:50%; height:50%; z-index: 1;
    100% width:100%; height:100%; z-index: 100;

@keyframes LlB1 
    0%   width:50; height:50%; z-index: 1;
    100% width:100%; height:100%; z-index: 100;

(所有额外的包装都是为了让半透明背景和圆角在 android 上工作。)

(我认为这里的变换可能比关键帧更容易,但我的最终目标是添加更多效果。)

当我的关键帧移动和调整 layoutBlock1 div 的大小时,我想让半透明的底层不透明,但由于它是一个子元素,我不知道如何解决它。这可能吗?

【问题讨论】:

我的复制粘贴有点草率... layoutBlock1 的宽度和高度是 50%,而不是 49.whatever 基本上...不!动画适用于它们所附加的元素。它们不能直接影响其他元素的属性。 你能不能同时让孩子和父母一起制作动画? 【参考方案1】:

从关键帧寻址子节点是不可能的。

但是,可能会有一些黑客:

拥有另一个具有相同持续时间的动画,但具有子节点的动画和设置 实现此目的的另一种方法是使用一些 JS 库来制作动画。例如:https://animejs.com

【讨论】:

【参考方案2】:

您不能从关键帧中更改子元素,除非该关键帧已在该元素上调用。您可以制作另一个动画,您可以将其分配给子元素并将其设置为具有相同的持续时间。

如果您希望子元素发生相同的动画,您只需调用子元素上的关键帧即可。

【讨论】:

以上是关于可以在关键帧中设置子元素的属性吗的主要内容,如果未能解决你的问题,请参考以下文章

Objective C:如何在当前可见帧中设置子视图显示? (UITableView)

css 多个关键帧变形如何衔接

无法在“元素”上执行“动画”:不支持部分关键帧

我们如何在道场 TreeGrid 中设置子级?

vue中设置子组件的点击事件不影响父组件的点击事件

在 matplotlib 中设置子图的大小