用纯 css @keyframes 实现产品引导分步动画需拆解为蒙层渐显、高亮缩放、线条延伸三段,分别定义关键帧并用 animation-delay 错开时机,统一设 animation-fill-mode: forwards,推荐 transform: scalex() 而非 clip-path 实现线条延伸。

Composer 不是 CSS 动画相关工具,也没有 @keyframes 或“标签引出线动画”的原生概念——你实际想问的,是**用纯 CSS 的 @keyframes 实现类似产品引导中「高亮目标元素 + 引出箭头/线条 + 气泡提示」这类分步动画**,而误用了“Composer”这个词(可能混淆了 Figma 插件 Composer、Laravel 的 Composer 工具,或某低代码平台术语)。
下面直奔实操:
怎么用 @keyframes 分步控制引出线动画
引出线动画本质是三段协同:蒙层渐显 → 高亮区域缩放/位移 → 箭头/线条从起点向目标延伸(常靠 transform: scaleX() 或 clip-path 实现)。不能靠一个 @keyframes 一气呵成,必须拆开。
- 每一步单独定义
@keyframes,比如@keyframes overlay-fade-in、@keyframes highlight-pulse、@keyframes line-draw - 用
animation-delay错开各段启动时间,例如第二段延迟0.3s,第三段延迟0.6s - 所有动画统一设
animation-fill-mode: forwards,否则线一画完就缩回原形 - 线条延伸推荐用
transform: scaleX(0) → scaleX(1),比操作width更性能友好(不触发重排)
clip-path 绘制动态引出线容易踩的坑
用 clip-path: polygon() 做斜线或带箭头的引出线,看似灵活,但关键帧里写百分比坐标会失效——clip-path 的坐标单位是像素,不随容器缩放自动适配。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 别在
@keyframes里写clip-path: polygon(0% 0%, 100% 0%, ...),浏览器不认百分比值 - 真要用
clip-path,得预设固定尺寸容器,或用 JS 把getBoundingClientRect()结果转成具体像素值注入 CSS 变量 - 更稳妥的替代方案:用伪元素
::after画一条细长矩形,再用transform: rotate()+origin定向,配合scaleX()控制延伸
为什么 transform 和 opacity 必须错开时间
如果高亮蒙层淡入(opacity)、引出线伸展(transform: scaleX)、气泡弹出(transform: scale)全堆在同一个 0–100% 时间轴里,视觉上会糊成一团,用户看不出步骤逻辑。
- 典型节奏:蒙层 0–30% → 引出线 20–60% → 气泡 50–100%
- 用
animation-timing-function: cubic-bezier(.2,1,.5,1)让线条有“甩出感”,别全用ease - 所有动画加
will-change: transform, opacity,尤其在移动端避免卡顿
高亮区域怎么精准“套住”按钮或输入框
CSS 动画本身不会读 DOM 尺寸。所谓“套住”,其实是靠定位预设或 JS 注入。
- 最简方案:给目标元素加
position: relative,再用绝对定位伪元素覆盖,宽高用inset: 0或top/left/right/bottom: 0拉满 - 需要圆角高亮?伪元素加
border-radius: inherit,并确保父元素设置了border-radius - 若目标元素尺寸不固定(如响应式按钮),必须用 JS 获取
getBoundingClientRect(),然后设置 CSS 变量:style.setProperty('--hl-top', rect.top + 'px'),再在@keyframes中引用top: var(--hl-top)
animation-fill-mode: forwards,也别幻想一个 @keyframes 能管全场。










