如何制作网格布局扩展的动画?
P粉937382230
P粉937382230 2023-08-31 21:09:37
[CSS3讨论组]
<p>我想知道如何为网格布局的扩展设置动画。正如你在代码中看到的,我有 4 个 div。其中两个会显示,另外两个仅在选中该复选框时才显示。</p> <p>选中该复选框后,将添加另一行,其中包含 div3 和 div4。我如何使扩展动画化?最好保持网格的大小。我不希望动画影响(不存在的)边距。我也想在没有 JavaScript 的情况下做到这一点。可能吗?</p> <pre class="brush:php;toolbar:false;">&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot;&gt; &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt; &lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot;&gt; &lt;title&gt;Website&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;input class=&quot;toggle&quot; type=&quot;checkbox&quot;&gt; &lt;div class=&quot;grid&quot;&gt; &lt;div class=&quot;div1&quot;&gt;Hello&lt;/div&gt; &lt;div class=&quot;div2&quot;&gt;Hello2&lt;/div&gt; &lt;div class=&quot;div3&quot;&gt;Hello3&lt;/div&gt; &lt;div class=&quot;div4&quot;&gt;Hello4&lt;/div&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt;</pre> <pre class="brush:php;toolbar:false;">.toggle { width: 100%; } .grid { display: grid; width: 20%; border: solid black 2px; } .div1 { grid-column: 1; grid-row: 1; } .div2 { grid-column: 2; grid-row: 1; } .div3 { display: none; } .div4 { display: none; } .toggle:checked ~ .grid &gt; .div3 { display: block; grid-column: 1; grid-row: 2; } .toggle:checked ~ .grid &gt; .div4 { display: block; grid-column: 2; grid-row: 2; }</pre> <p>我希望 div 容器向下滑动,为添加的行腾出空间。感谢您的帮助。</p>
P粉937382230
P粉937382230

全部回复(1)
P粉529581199

解决方案非常简单。我将我的网格放入另一个网格中。然后我简单地使用 fr 作为调整主网格所在 div 上的行大小的方法。这导致了将网格行从 0fr 转换为 1fr 的可能性。就是这样。

.toggle {
    width: 100%;
}

.grid {
    display: grid;
    width: 20%;
    border: solid black 2px;
}

.div1 {
    grid-column: 1;
    grid-row: 1;
}

.div2 {
    grid-column: 2;
    grid-row: 1;
}

.wrapper {
    grid-column: 1 / 3;
    grid-row: 2;
    display: grid;
    grid-template-rows: 0fr;
    overflow: hidden;
    transition: grid-template-rows 200ms;
}

.div3 {
    grid-column: 1;
    grid-row: 1;
    min-height: 0;
}

.div4 {
    grid-column: 2;
    grid-row: 1;
    min-height: 0;
}

.toggle:checked ~ .grid > .wrapper {
    grid-template-rows: 1fr;
}
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="style.css">
    <title>Website</title>
</head>
<body>
    <input class="toggle" type="checkbox">
    <div class="grid">
        <div class="div1">Hello</div>
        <div class="div2">Hello2</div>
        <div class="wrapper">
            <div class="div3">Hello3</div>
            <div class="div4">Hello4</div>
        </div>
    </div>
</body>
</html>

此外,如果您的网格中有不同大小的不同行。例如,一个为 0.05fr,一个为 1fr,动画将变得“滞后”。您可以做的就是将包装网格放入另一个包装网格中。然后,您不会使用实际行来为该网格设置动画,而是使用相同的方法为第一个网格的子级或实际网格的父级设置动画。

这是一种奇怪的解决方法,但它是解决问题的一种方法,而无需重做太多。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号