Эффект бегущей волны на чистом CSS

Эффект бегущей волны на чистом CSS

Эффект бегущей волны на чистом CSS

Мне очень нравится этот способ создания бегущей волны для последующей ее анимации. Почему? Здесь мы не используем никакой графики, только свойства CSS. А если нет http-запроса, то можно рассчитывать на быструю отработку анимации.

Создание рамок для волны

Бегущая волна двигается внутри жестко заданных рамок. Создадим блок div с классом wavy, разместим его в центре страницы и временно окрасим бокс в белый цвет.


<div class="wavy"></div>

*{
    margin: 0;/*обнуление отступов*/
    padding: 0;/*обнуление полей*/
    box-sizing: border-box;/*не учитывать рамки*/
}
body {
    display: flex;/*флексовый контейнер*/
    justify-content: center;/*горизонтальное центрирование*/
    align-items: center;/*вертикальное центрирование*/
    min-height: 100vh;/*на всю высоту экрана*/
    background: #222;/*цвет фона*/
}
.wavy {
    position: relative;/*относительное позиционирование*/
    width: 200px;/*ширина бокса*/
    height: 50px;/*высота бокса*/
    background: white;
    overflow: hidden;/*переполненность скрыть*/
    z-index: 1;/*на верхний слой*/
}

Эффект бегущей волны на чистом CSS

Создание волны

Создадим волну при помощи стилизации псевдоэлемента before. В качестве контента зададим строку «aaaaaaa», чтобы сработали три свойства: text-decoration-*. Волна — это подчеркивание текста со значением wavy. Поскольку сам текст нам не нужен, то зададим ему прозрачный цвет. Итак текст скрыт, а подчеркивание (волна) осталась.


.wavy::before{
    content: 'aaaaaaaaa';/*текстовая строка*/
    position: absolute;/*абсолютное позиционирование*/
    top: -42px;/*позиция сверху*/
    left: 0;/*позиция слева*/
    font-size: 4em;/*размер шрифта*/
    height: 50%;/*высота*/
    color: black;/*цвет текста*/
    text-decoration-style: wavy;/*стиль подчеркивания*/
    text-decoration-color: #1E88E5;/*цвет подчеркивания*/
    text-decoration-line: underline;/*включить подчеркивание*/
    animation: animate 1s linear infinite;/*название длительность стиль анимации*/
}

Эффект бегущей волны на чистом CSS

Меняем черный цвет текста на прозрачный.


color: transparent;

Эффект бегущей волны на чистом CSS

Анимация волны

Создадим бесконечное, горизонтальное, линейное движение волны внутри белой рамки. Затем поменяем белый цвет на цвет фона. Белый цвет был нужен только в обучающих целях для наглядности.


@keyframes animate{
    0%
    {
        transform: translateX(-1px);
    }
    100%
    {
        transform: translateX(-57px);
    }
}

.wavy {
    position: relative;
    width: 250px;
    height: 50px;
    background: #222;
    overflow: hidden;
    z-index: 1;
}

Эффект бегущей волны на чистом CSS

Создание волны при помощи подчеркивания текста — это очень элегантный и простой способ, который легко анимировать. Минимум кода — максимум скорости загрузки страницы.

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

Источник