Copy:让两层内容交接
直接把 Copy 替换成 Copied,再给新文字加淡入,旧状态会突然消失。这里保留两层内容:Copy 向上离开,✓ Copied 从下方进入,两者在同一个裁切窗口里交接。
按钮固定为 92px 宽,文字轨道固定为 18px 高;变化只发生在内部的 transform 和 opacity 上。文字长短改变时,按钮和旁边的链接都不必重新让位。
查看 Copy 的核心 CSS
简化示意:状态切换时保留旧层,为新旧两层分别加上进入、退出类;退出动画完成后再移除旧层。
.copy-window {
display: grid;
height: 18px;
overflow: hidden;
}
.copy-face { grid-area: 1 / 1; }
.copy-enter {
animation: enter 340ms
cubic-bezier(.2, .85, .25, 1.12) both;
}
.copy-leave {
animation: leave 340ms
cubic-bezier(.22, 1, .36, 1) both;
}
@keyframes enter {
from { transform: translateY(110%); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
@keyframes leave {
from { transform: translateY(0); opacity: 1; }
to { transform: translateY(-110%); opacity: 0; }
}实际实现还会从被打断时的可见位置继续退出,并在重复点击时保留当前 Copied 状态。