Pablo Alejandro Carravetti@pabloalejandrocarravetti

El efecto máquina de escribir solo con CSS está muy piola y es recontra simple, es aconsejable utilizar SASS…

La idea es "jugar" con los pseudoelementos ::beffore y ::after. Voy a dar un ejemplo con la palabra "hola":

1@keyframes](https://ed.team/u/ 2@keyframes)](https://ed.team/u/ 3@keyframes) maquina { 4 0% { 5 content: "H" 6 } 7 20% { 8 content: "HO" 9 } 10 40% { 11 content: "HOL" 12 } 13 0% { 14 content: "HOLA" 15 } 16} 17 18.escribir::beffore { 19 content: ""; 20 animation: maquina 5s infinite; 21}

Lo que nos faltaría es agregar en el documento HTML una etiqueta con la clase escribir:

1<div class="escribir"></div>

Pero, si deseamos añadirle el efecto a una frase grande, es preferible generarlo con SASS:

Primero creamos la variable $content.

Segundo, en el @keyframe recorremos con un @for donde el índice recorre de 0 a 100.

Tercero, los porcentajes será interpolando la variable: ${i}%

Cuarto, en SASS existen dos módulos que utilizaremos:

  • str-length($variable) devuelve la cantidad de caracteres que tiene una variable, en JavaScript sería: variable.lenght
  • str-slice($variable, principio, final) devuelve el rango deseado de una variable, en JavaScript sería: variable.slice(principio, fin)

Quinto, añadimos una condición que, si el índice es menor a la cantidad de caracteres que contiene la variable $content, solo se muestre desde el primer caracter hasta el número del índice y, en caso contrario, muestre la variable completa.

1$content: "Comienza a estudiar gratis en EDteam y descubre porqué en español nadie te explica mejor"; 2 3@keyframes maquina { 4 [@for](https://ed.team/u/for) $i from 0 through 100 { 5 #{$i}% { 6 [@if](https://ed.team/u/if) $i < str-length($content) { 7 content: str-slice($content, 1, $i); 8 } 9 [@else](https://ed.team/u/else) { 10 content: $content; 11 } 12 } 13 } 14 } 15 16div::before { 17 content: ""; 18 animation: maquina 5s infinite; 19}

Escribe una respuesta