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

如何实现输入框placeholder的打字机式CSS动画?代码未生效

输入框Placeholder打字机CSS动画实现方案

你的代码未生效核心问题有两个:::placeholder 默认是行内元素,不支持 width 属性动画;另外你引用的 blink-caret 动画未定义。以下是修正后的完整实现:

完整代码示例

/* 输入框基础样式,方便观测效果 */
.typewriter {
  border: 1px solid #ccc;
  padding: 8px 12px;
  font-size: 16px;
}

.typewriter::placeholder {
  /* 关键:将placeholder转为行内块,支持width动画 */
  display: inline-block;
  overflow: hidden;
  white-space: nowrap;
  letter-spacing: .15em;
  /* 初始宽度设为0,确保动画从无到有展开 */
  width: 0;
  /* 绑定动画,forwards让动画结束后保持最终状态 */
  animation: typing 3.5s steps(18, end) forwards,
             blink-caret .75s step-end infinite;
}

/* 打字动画:宽度从0过渡到100% */
@keyframes typing {
  to {
    width: 100%;
  }
}

/* 光标闪烁动画 */
@keyframes blink-caret {
  from, to {
    border-right: 2px solid transparent;
  }
  50% {
    border-right: 2px solid #333;
  }
}
<input type="text" class="typewriter" placeholder="这是打字机效果的占位文本">

关键修正说明

  • 给 ::placeholder 加 display: inline-block:行内元素无法设置宽度,转为行内块后才能触发width动画
  • 初始设置 width: 0:保证动画起始状态为文本完全隐藏
  • 补充 blink-caret 动画定义:实现模拟光标闪烁的效果
  • 动画添加 forwards 属性:让动画结束后保持文本完全显示的状态

若需要循环播放打字效果,可将动画属性调整为 animation: typing 3.5s steps(18, end) infinite alternate, ...,但需注意循环时要重置宽度,可能需要调整动画逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:37:05