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

修复纯CSS书本动画:闭合时书页残留侧边问题

修复纯CSS书本动画闭合时书页错位问题

问题根因

你移除原代码的基础transform后,丢失了书页在初始闭合状态下的3D定位基准,导致动画暂停或回到闭合状态时,书页无法回归到书本封面后方的正确位置,只能停留在两侧。

具体修复步骤

1. 给左右书页单独设置初始定位

不用恢复原有的全局transform,直接给两个书页添加初始状态的transform,确保闭合时它们贴合书本内部:

.book__page--left {
  /* 保留原有样式,新增初始变换 */
  transform: rotateY(0deg) translateZ(0);
}
.book__page--right {
  /* 保留原有样式,新增初始变换 */
  transform: rotateY(0deg) translateZ(0);
}

2. 对齐动画关键帧的首尾状态

调整翻页动画的关键帧,让0%(闭合)和100%(回到闭合)状态与书页的初始定位完全一致,避免动画复位时错位:

@keyframes open-book {
  0% {
    .book__page--left {
      transform: rotateY(0deg) translateZ(0);
    }
    .book__page--right {
      transform: rotateY(0deg) translateZ(0);
    }
  }
  50% {
    /* 保留完全打开时的原有变换逻辑 */
    .book__page--left {
      transform: rotateY(-180deg) translateZ(20px);
    }
    .book__page--right {
      transform: rotateY(180deg) translateZ(20px);
    }
  }
  100% {
    .book__page--left {
      transform: rotateY(0deg) translateZ(0);
    }
    .book__page--right {
      transform: rotateY(0deg) translateZ(0);
    }
  }
}

3. 强制闭合状态的书页定位(可选)

如果是通过animation-play-state: paused控制闭合,建议给书本加个.closed类,强制书页回到初始位置,避免动画帧偏移:

.book.closed {
  animation-play-state: paused;
}
.book.closed .book__page--left,
.book.closed .book__page--right {
  transform: rotateY(0deg) translateZ(0) !important;
}

核心逻辑

原代码的全局transform是给整个书本提供3D空间基准的,你移除后,书页的3D变换失去了参照,必须给每个书页单独定义初始的变换状态,让它们在闭合时处于书本的“内部”,动画过程中再通过关键帧改变旋转角度和Z轴位移,实现翻页的视觉效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:46:03