Add typewriter effect
This commit is contained in:
64
snippets/typewriter-effect.md
Normal file
64
snippets/typewriter-effect.md
Normal file
@ -0,0 +1,64 @@
|
||||
---
|
||||
title: Typewriter effect
|
||||
tags: animation,advanced
|
||||
---
|
||||
|
||||
Creates a typewriter effect animation.
|
||||
|
||||
- Define two animations, `typing` to animate the characters and `blink` to animate the caret.
|
||||
- Use the `:after` pseudo-element to add the caret to the container element.
|
||||
- Use JavaScript to set the text for the inner element and set the `--characters` variable containing the character count. This variable is used to animate the text.
|
||||
- Use `white-space: nowrap` and `overflow: hidden` to make content invisible as necessary.
|
||||
|
||||
```html
|
||||
<div class="typewriter-effect">
|
||||
<div class="text" id="typewriter-text"></div>
|
||||
</div>
|
||||
```
|
||||
|
||||
```css
|
||||
.typewriter-effect {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
.typewriter-effect > .text {
|
||||
max-width: 0;
|
||||
animation: typing 3s steps(var(--characters)) infinite;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.typewriter-effect:after {
|
||||
content: " |";
|
||||
animation: blink 1s infinite;
|
||||
animation-timing-function: step-end;
|
||||
}
|
||||
|
||||
@keyframes typing {
|
||||
75%,
|
||||
100% {
|
||||
max-width: calc(var(--characters) * 1ch);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
0%,
|
||||
75%,
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
25% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```js
|
||||
const typeWriter = document.getElementById('typewriter-text');
|
||||
const text = 'Lorem ipsum dolor sit amet.';
|
||||
|
||||
typeWriter.innerHTML = text;
|
||||
typeWriter.style.setProperty('--characters', text.length);
|
||||
```
|
||||
Reference in New Issue
Block a user