效果展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
body {
margin: 0;
height: 100vh;
background: #ff9292;
display: flex;
justify-content: center;
align-items: center;
}
.text {
font-size: 20px;
/* background: red; */
border-right: 2px solid #fff;
white-space: nowrap;
overflow: hidden;
width: 0;
animation: grow 4s infinite steps(14) 2s,
blink 500ms infinite steps(44);
}
@keyframes grow {
40%,
60% {
width: 124px;
}
100% {
width: 0;
}
}
@keyframes blink {
from {
border-right-color: #fff;
}
to {
border-right-color: transparent;
}
}
</style>
</head>
<body>
<p class="text">Hello World!</p>
</body>
</html>
原理讲解
从宽度0到300px来显示标签内容,
宽度0时溢出的部分设置 overflow: hidden;
文本超出标签换行的属性设置为 white-space: nowrap;
设置边框作为光标,增加动画 有颜色到透明 持续时间500ms制造闪烁效果
出场grow关键帧中间顶峰时保持不变,40,60% 为300px最大值,
设置grow的delay属性为其增加停顿感
steps 为帧数, 越小越卡,越像光标闪烁