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

求助:CSS Grid+animate-css-grid实现四格点击展开布局的问题

解决Grid方块展开的间距丢失与卡顿问题

嘿,你已经离目标很近啦!咱们来搞定这两个小问题,让你的方块展开效果既美观又丝滑:

问题1:绝对定位图片展开后丢失间距

原因分析

当方块展开时,你设置了padding: 0%,同时父容器的grid-gap是作用于网格项之间的间距,展开后的网格项占满整个网格后,原来的间距自然消失;如果图片是绝对定位,它会忽略父元素的内边距,直接贴到容器边缘。

解决方案

给展开后的网格项添加与grid-gap匹配的内边距,同时确保绝对定位的图片基于父元素的内边距定位:

const MilestoneMainSection = styled(Section)`
  width: 100%;
  height: 100%;
  font-family: 'Electro-Shackle', sans-serif;
  justify-content: center;
  display: grid;
  grid-template-columns: fit-content(20%) fit-content(20%);
  grid-template-rows: fit-content(20%) fit-content(20%);
  grid-gap: 5vw 20vw;
  // 移除手动transition,避免和animate-css-grid的内置动画冲突
`;

const BoardMainSection = styled(Section)`
  position: relative;
  padding: 5%;
  overflow: hidden;
  height: auto;
  
  // 优化未选中状态:用opacity和pointer-events替代width/height:0,避免布局跳变
  ${(props) => !props.isClicked && props.selected && css`
    opacity: 0;
    pointer-events: none;
    grid-column: 1 / 1;
    grid-row: 1 / 1;
  `}
  
  ${(props) => props.isClicked && css`
    grid-column: 1 / span 2;
    grid-row: 1 / span 2;
    // 用grid-gap的一半作为内边距,保留和原布局一致的间距
    padding: calc(5vw / 2) calc(20vw / 2);
  `}
`;

// 假设你的图片组件样式(如果有)
const StyledImage = styled.img`
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  // 提示浏览器提前优化动画性能
  will-change: transform;
`;

问题2:过渡效果卡顿不流畅

原因分析

  1. 手动添加的transition: 1s all ease-in和animate-css-grid的内置动画冲突,导致布局计算混乱;
  2. 使用width: 0; height: 0会触发频繁的重绘回流,造成卡顿;
  3. 绝对定位的图片没有做性能优化,动画时浏览器无法高效处理。

解决方案

  1. 移除父容器的手动transition,让animate-css-grid全权负责网格过渡;
  2. 用opacity和pointer-events替代width/height:0来隐藏未选中元素,减少布局跳变;
  3. 给绝对定位的元素添加will-change: transform,让浏览器提前做好动画优化;
  4. 尽量避免在动画中修改box-shadow、color等会触发重绘的属性,优先使用transform和opacity。

另外,确保你正确初始化了animate-css-grid的wrapGrid函数,比如在组件挂载时调用:

useEffect(() => {
  if (gridRef.current) {
    const unwrap = wrapGrid(gridRef.current);
    return unwrap;
  }
}, []);

这样调整后,你的方块展开应该就能保持正确的间距,并且动画流畅啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:17:56