WAVEアニメーションを使ったメインビジュアル【webデザイン】

  • LINEで送る

メインビジュアルに使える波型のアニメーションを紹介します。

WAVEアニメーションを使ったメインビジュアル【webデザイン】

DEMOページ

HTML↓

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>WAVEアニメーションを使ったメインビジュアル【webデザイン】</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <header></header>
    <div class="hero">
        <div class="wave_top">
            <div></div>
        </div>
        <h1>wave animation </h1>
        <div class="wave_bottom">
            <div></div>
        </div>
    </div>
    <footer></footer>
</body>
</html>

CSS↓

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
body{
    width: 100%;
    height: 100vh;
    background: #333333;
}
header{
    height: 10vh;
    width: 100%;
    background: #ffffff;
}
.hero{
    height: 80vh;
    width: 100%;
    position: relative;
}
h1{
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
    color: #ffffff;
    text-transform: uppercase;
    font-size: 3em;
    letter-spacing: 2px;
}
.wave_top{
    position: absolute;
    width: 100%;
    height: 36px;
    top: 0;
    left: 0;
}
.wave_top > div{
    width: 100%;
    height: 100%;
    background: url(top_wave1.png);
    background-size: 1365px 36px;
    animation: wave .7s linear infinite;
}
.wave_bottom{
    position: absolute;
    width: 100%;
    height: 36px;
    bottom: 0;
    left: 0;
}
.wave_bottom > div{
    width: 100%;
    height: 100%;
    background: url(top_wave1.png);
    background-size: 1365px 36px;
    transform: rotate(180deg);
    animation: wave .7s linear infinite;
}
footer{
    height: 10vh;
    width: 100%;
    background: #ffffff;
}
@keyframes wave {
    0%{
        background-position: 0px 0px;
    }
    100%{
        background-position: -227.5px 0px;
    }
}

 

HTMLの解説

   <div class="hero">
        <div class="wave_top">
            <div></div>
        </div>
        <h1>wave animation </h1>
        <div class="wave_bottom">
            <div></div>
        </div>
    </div>

bodyを外枠にして、その中に<headr><.hero><footer>の3つのボックスを作成しています。今回のメインは<.hero>のボックスになります。

<.hero>のボックスの中に、波となるボックスを上下に配置します。今回はCSSで画像を差し込むので<div>タグをそれぞれに挟んでいます。

 

CSSの解説

波の配置

.wave_top{
    position: absolute;
    width: 100%;
    height: 36px;
    top: 0;
    left: 0;
}
.wave_top > div{
    width: 100%;
    height: 100%;
    background: url(top_wave1.png);
    background-size: 1365px 36px;
    animation: wave .7s linear infinite;
}

画像の親要素となる、.wave_topと.wave_bottomのheightを36pxに設定します。これは好きな高さに設定して構いません。

画像を差し込むdivのbackground-sizeを幅1365px、高さ36pxに指定します。この高さは親要素の高さと一緒にする必要があります。幅がなぜ1365pxかと言うと、波の画像の元々のサイズが2730px×72pxなので、等倍で高さ36pxにしたときの幅が1365pxになります。ですので、使う画像によってここの数値が変わってきます。

これで波の画像のセッティングは完了です。

アニメーション

@keyframes wave {
    0%{
        background-position: 0px 0px;
    }
    100%{
        background-position: -227.5px 0px;
    }
}

波のセッティングができたらあとはアニメーションの設定をして終わりです。最初のbackground-positionを親要素(.wave_top)の左上に固定します。最後のbackground-positionをX軸方向にだけ-227.5px分動かします。この227.5は使っている波の画像の一回分の幅になります。今回使っている画像の波の数は6つなので1365割る6で227.5pxの計算になっています。これがinfiniteで永遠ずれ続けることでアニメーションを再現しています。

.wave_bottomの波はtransform:rotate(180deg)で垂直方向に回転させるだけで設定できます。

 

まとめ

今回は波を表現したアニメーションを紹介しました。メインビジュアルやコンテンツの区切りに使えるので、実装してみてください。

 

 

 

 

  • LINEで送る

SNSでもご購読できます。

コメントを残す

*