Имитация печатной машинки при наведении на текст

Имитация печатной машинки при наведении на текст

Имитация печатной машинки при наведении на текст

Пропишем внутри ссылок data*-атрибуты с названиями ссылок. Это нужно для передачи этих названий в функцию attr для получения hover-эффекта.


<ul>
    <li><a href="#" data-text="Home">Home</a></li>
    <li><a href="#" data-text="About">About</a></li>
    <li><a href="#" data-text="Services">Services</a></li>
</ul>

Разместим меню в центре страницы и стилизуем ссылки в меню навигации.


*{
    margin: 0;/*обнуление отступов*/
    padding: 0;/*обнуление полей*/
    font-family: consolas;/*шрифт*/
}
body{
    display: flex;/*подключение flexbox*/
    justify-content: center;/*горизонтальное выравнивание*/
    align-items: center;/*вертикальное выравнивание*/
    height: 100vh;/*на всю высоту*/
    background: #1c234a;/*цвет фона*/
}
ul{
    position: relative;/*относительное позиционирование*/
}
ul li{
    list-style: none;/*удаление черных маркеров*/
    margin: 0 20px;/*отступы для списков*/
    font-size: 4em;/*размер шрифта*/
}
ul li a{
    position: relative;
    color: rgba(255,255,255,.1);/*полупрозрачный цвет ссылок*/
    text-decoration: none;/*без подчеркивания*/
    font-weight: 700;/*толщина шрифта*/
}

Имитация печатной машинки при наведении на текст

Передадим в функцию attr значения data-атрибутов.


ul li a:before{
    content: attr(data-text);/*функция с аргументом*/
    position: absolute;/*абсолютное позиционирование*/
    top: -1px;/*позиция сверху*/
    overflow: hidden;/*спрятать лишнее*/
    color: #1bfaad;/*цвет ссылок*/
    transition: 0.5s ease-in-out;/*плавный переход*/
    white-space: nowrap;/*не переносить пробелы*/
}
ul li a:after{
    content: '';/*нет контента*/
    position: absolute;
    top: -1px;
    overflow: hidden;
    color: #1bfaad;
    transition: 0.5s ease-in-out;
    white-space: nowrap;
}

Имитация печатной машинки при наведении на текст

Выберем из меню самое длинное слово — «Services», посчитаем сколько у него символов и передадим это число в аргументы функции steps. Таким образом мы добьемся скачкообразной анимации с паузами между символами, похожей на печатную машинку.


ul:hover li a:before{
    animation: animate2 0.5s steps(8) forwards;
}
ul li:hover a:before{
    animation: animate 2s steps(8) forwards;
}

Создание покадровой анимации — при наведении на пункт меню, происходит побуквенное пропечатывание слова. В то время, как остальные пункты меню остаются в тени.


@keyframes animate{
    0%
    {
        width: 0;
    }
    100%
    {
        width: 387.063px;
    }
}
@keyframes animate2{
    0%
    {
        width: 387.063px;
    }
    100%
    {
        width: 0;
    }
}

Имитация печатной машинки при наведении на текст

Посмотрите пример на CodePen

Источник