ミギムキ

[CSS] 一定時間経過後に要素を下からスライドインさせる(JavaScript不使用)

ウェブサイトに訪れたユーザーに何かしらの通知を行いたいとき、画面の下部から要素をスライドインさせる方法があります。

本来はこのような動的な要素の移動は、画面のスクロールなどのきっかけを必要とする場合が一般的で、JavaScriptなどを用いて行いますが、画面表示から一定時間経過後に表示する方式であれば、CSSだけで実現することができます。

サンプルコード

html

<div class="slide">要素を一定時間経過後にスライドインさせる</div>

CSS

.slide { position: fixed; bottom: 0px; left: 0px; width: 100vw; transform: translateY(100%); padding: 1em; background-color: #3388dd; color: #fff; text-align: center; animation-name: slide_anime; animation-fill-mode: forwards; animation-duration: 0.5s; animation-iteration-count: 1; animation-timing-function: ease; animation-delay: 5s; animation-direction: normal; } @keyframes slide_anime { 0% { transform: translateY(100%); } 100% { transform: translateY(0%); } }

要素を閉じるためのボタンをつける

スライドインさせた要素が邪魔になったとき消せるように、「×」ボタンをつけたサンプルです。

非表示にしたチェックボックスを活用することで、CSSだけで要素を消すことができます。

html

<div class="slide"> <input type="checkbox" id="slide_area"> <div class="slide_area"> <label for="slide_area"></label> <p>要素を一定時間経過後にスライドインさせる</p> </div> </div>

CSS

.slide input { display: none; } .slide_area { position: fixed; bottom: 0px; left: 0px; width: 100vw; transform: translateY(100%); background-color: #3388dd; color: #fff; text-align: center; animation-name: slide_area_anime; animation-fill-mode: forwards; animation-duration: 0.5s; animation-iteration-count: 1; animation-timing-function: ease; animation-delay: 5s; animation-direction: normal; } @keyframes slide_area_anime { 0% { transform: translateY(100%); } 100% { transform: translateY(0%); } } .slide input:checked + .slide_area { display: none; } .slide_area label { display: block; position: absolute; top: 50%; left: 1em; transform: translateY(-50%) rotate(45deg); width: 1.5em; height: 1.5em; } .slide_area label:hover { cursor: pointer; } .slide_area label::before, .slide_area label::after { position: absolute; background-color: #fff; content: ""; } .slide_area label::before { top: 0px; left: 50%; transform: translateX(-50%); width: 0.2em; height: 100%; } .slide_area label::after { top: 50%; left: 0px; transform: translateY(-50%); width: 100%; height: 0.2em; }

ご質問など受け付けています

記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。

ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。