You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Grid布局的展开添加平滑动画效果?

Grid布局展开动画实现方案

需求说明

默认显示Grid布局中的前两个div,勾选checkbox后平滑滑出包含div3和div4的第二行;要求无需JavaScript,保持网格尺寸与边距不变,动画为向下展开效果。

解决方案

核心是替换不可动画的display: none,改用可过渡的CSS属性配合Grid行高变化实现平滑效果:

HTML代码(无需修改)

<!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="div3">Hello3</div>
        <div class="div4">Hello4</div>
    </div>
</body>
</html>

修改后的CSS代码

.toggle {
    width: 100%;
}

.grid {
    display: grid;
    width: 20%;
    border: solid black 2px;
    grid-template-columns: 1fr 1fr; /* 明确列宽,避免布局偏移 */
    grid-template-rows: auto 0; /* 默认第二行高度为0 */
    transition: grid-template-rows 0.3s ease; /* 行高过渡动画 */
    overflow: hidden; /* 隐藏第二行超出内容 */
}

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

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

.div3, .div4 {
    opacity: 0;
    max-height: 0;
    overflow: hidden;
    transition: opacity 0.3s ease, max-height 0.3s ease;
}

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

.div4 {
    grid-column: 2;
    grid-row: 2;
}

/* 勾选状态触发动画 */
.toggle:checked ~ .grid {
    grid-template-rows: auto auto; /* 第二行高度恢复为auto */
}

.toggle:checked ~ .grid > .div3,
.toggle:checked ~ .grid > .div4 {
    opacity: 1;
    max-height: 100px; /* 设为足够容纳内容的高度,可按需调整 */
}

关键实现细节

  • 放弃display: none:该属性无法参与CSS过渡,改用opacity控制透明度、max-height控制元素高度,配合overflow: hidden隐藏未展开内容
  • Grid容器高度过渡:通过grid-template-rows从0到auto的变化,实现容器向下展开的平滑动画
  • 元素同步动画:div3和div4的透明度、高度动画与Grid容器的行高动画保持时长一致,保证视觉连贯
  • 纯CSS触发:依靠CSS兄弟选择器:checked ~ .grid感知checkbox状态,全程无需JavaScript

内容的提问来源于stack exchange,提问作者Hugo Lundqvist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:17:51