yukeka
4/17/2020 - 7:25 AM

CSSだけで横からスライドインさせるアニメーション

CSSだけで横からスライドインさせるアニメーション

CSSだけで横からスライドインさせるアニメーション

A Pen by yukeka on CodePen.

License.

<div id="top" class="container">
  <p>
    <span class="slidein-left slidein01">CSSだけでこのような</span><br>
    <span class="slidein-left slidein02">アニメーションを表現できます。</span>
  </p>
  <div class="img slidein-left slidein03">
    <img src="https://cdn.pixabay.com/photo/2020/04/07/17/01/chicks-5014152_640.jpg" alt>
  </div>
  <p>
    <span class="slidein-left slidein04">比較的簡単に実装できます。</span><br>
    <span class="slidein-left slidein05">jQuery使わなくてもいいんです。</span>
  </p>
  <div class="img slidein-right slidein06">
    <img src="https://cdn.pixabay.com/photo/2020/04/06/11/22/seedling-5009286_640.jpg" alt>
  </div>
  <p>
    <span class="slidein-left slidein07">複数の要素に実装できるのですが、</span><br>
    <span class="slidein-left slidein08">スクロールしていない部分の要素も</span><br>
    <span class="slidein-left slidein09">アニメーションされてしまいます。</span><br>
  </p>
  <div class="img slidein-left slidein10">
    <img src="https://cdn.pixabay.com/photo/2020/04/09/11/42/dogs-5021085_640.jpg">
  </div>
  <p>
    <span class="slidein-left slidein11">ファーストビューだけにしましょう。</span>
  </p>
  <p>
    <span class="slidein-left slidein12">ちなみにこのアニメーションを</span><br>
    <span class="slidein-left slidein13">スライドインとしましたが、</span><br>
    <span class="slidein-left slidein14">本当の名前は何ていうんだろう。</span>
  </p>
  <p>
    <span class="slidein-left slidein15">知っている人がいましたら</span><br>
    <span class="slidein-left slidein16">教えて下さい!</span>
  </p>
</div>

<footer id="footer">
  <p class="totop">
    <a href="#top">^</a>
  </p>
</footer>
$(function(){
  $('a[href^="#"]').click(function() {
    var speed = 400; // スクロールスピード(ミリ秒)
    var href= $(this).attr("href");
    var target = $(href == "#" || href == "" ? 'html' : href);
    var position = target.offset().top;
    $('body,html').animate({scrollTop:position}, speed, 'swing');
    return false;
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.0/jquery.min.js"></script>
body {
 color: #f4f4f4;
 font-size: 1.6rem;
 font-family: 'Noto Sans JP',sans-serif;
 line-height: 1.61;
 background-color: #00293e; 
}

.container {
  margin: 0 auto;
  padding: 160px 0 100px;
  width: 1000px;
  text-align: center;
}

.container p {
  margin-bottom: 50px;
  font-size: 2.4rem;
  font-weight: bold;
}

.container p span {
  display: inline-block;
  position: relative;
  font-weight: bold;
}

.container p span::before {
  content: "";
  position: absolute;
  width: 105%;
  height: 105%;
  background-color: #00293e;
}

.img {
  position: relative;
  margin-bottom: 50px;
  height: 300px;
}

.img img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.img::before {
  content: "";
  position: absolute;
  right: 0;
  width: 110%;
  height: 110%;
  background-color: #00293e;
}

.slidein-left::before {
  top: -1px;
  right: -1px;
}

.slidein-right::before {
  top: -1px;
  left: -1px;
}

.slidein01::before {
  animation: .5s slidein 1s forwards;
}

.slidein02::before {
  animation: .5s slidein 2s forwards;
}

.slidein03::before {
  animation: .7s slidein 3s forwards;
}

.slidein04::before {
  animation: .5s slidein 4s forwards;
}

.slidein05::before {
  animation: .5s slidein 5s forwards;
}

.slidein06::before {
  animation: .7s slidein 6s forwards;
}

.slidein07::before {
  animation: .5s slidein 7s forwards;
}

.slidein08::before {
  animation: .5s slidein 8s forwards;
}

.slidein09::before {
  animation: .5s slidein 9s forwards;
}

.slidein10::before {
  animation: .7s slidein 10s forwards;
}

.slidein11::before {
  animation: .5s slidein 11s forwards;
}

.slidein12::before {
  animation: .5s slidein 12s forwards;
}

.slidein13::before {
  animation: .5s slidein 13s forwards;
}

.slidein14::before {
  animation: .5s slidein 14s forwards;
}

.slidein15::before {
  animation: .5s slidein 15s forwards;
}

.slidein16::before {
  animation: .5s slidein 16s forwards;
}

@keyframes slidein {
  0% {
    width: 100%;
  }
  100% {
    width: 0;
  }
}

.totop {
  display: block;
  position: relative;
  text-align: center;
}

.totop::before {
  content: "";
  display: block;
  position: absolute;
  top: 0;
  width: 100vw;
  height: 85px;
  background-color: #00293e;
  animation: .6s totop 17s forwards;
}

@keyframes totop {
  0% {
    height: 100%;
  }
  100% {
    height: 0;
  }
}

.totop a {
  display: block;
  width: 1000px;
  padding: 30px;
  margin: 0 auto;
  color: #00293e;
  text-align: center;
  text-decoration: none;
  background-color: #ffd700;
  transition: all .7s;
}

@media screen and (max-width: 1000px) {
  .container {
    padding: 100px 30px 50px;
    width: 100%;
  }
  .totop a {
    width: 100%;
  }
}

@media screen and (max-width: 768px) {
  body {
    font-size: 1.5rem;
  }
}