overflow: hiddenで美しい!CSSアニメーション3選(画像一覧)

今回はCSSだけで作る画像一覧アニメーション3選を紹介。overflow: hiddenを指定することで枠に収まらない要素は隠して洗練されたデザインに仕上げています。
htmlとcssだけしか使っていません。
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。

こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。

 

1. シンプルだけど美しい画像アニメーション

動きは下の画像のような感じになります

コードを見る
  <div class="images">
    <div class="image">
      <img src="https://source.unsplash.com/1000x800" style="background-size:cover;">
      <span>Beautiful</span>
    </div>
    <div class="image">
      <img src="https://source.unsplash.com/1000x801" style="background-size:cover;">
      <span>Fantastic</span>
    </div>
    <div class="image">
      <img src="https://source.unsplash.com/1000x802" style="background-size:cover;">
      <span>Awesome</span>
    </div>
  </div>
/* 画像の配置・サイズを指定 */
.images {
  display: flex;
  width: 80%;
  padding: 4% 2%;
  height: 40vh;
}
.image {
  /* 画像の配置を指定(指定しないと読み込みの際にサイズが崩れる) */
  flex: 1;
  /* 範囲からはみ出た要素を隠す指定 */
  overflow: hidden;
  /* 画像間の間隔を指定 */
  margin: 0 2%;
  /* ボックスシャドウで奥行きをつける */
  box-shadow: 0 20px 30px rgba(0,0,0,.1);
  /* 文字配置の調整 */
  line-height: 0;
  background : #fffcfc;
}
.image img {
  /* アニメーション前の画像のサイズを指定 */
  width: 100%;
/* アニメーション前の背景の位置を指定 */
  height: calc(100% - 100vh);
  /* 画像が伸縮せずに滑らかに表示されるように指定 */
  object-fit: cover;
  /* アニメーション速度を指定 */
  transition: .6s;
}
/* 背景のスタイル指定 */
.image span {
  font-weight: 300;
  color: #888888;
  font-size: 15px;
  display: block;
  text-align: center;
  height: 5vh;
  line-height: 13.6;
}
/* hover後の画像スタイル指定 */
.image:hover img {
  /* フィルターで明るさ・コントラスト・彩度のエフェクトをつける */
  filter: brightness(120%) contrast(150%) saturate(120%);
  width: 100%;
  height: 100%;
}
ここがポイント!
  1. flexboxでcontainerの中身をど真ん中に設置
  2. overflow: hiddenで枠に収まらないサイズの要素は隠す
  3. box-shadowで奥行きをつける
  4. object-fit: coverで画像が伸縮せずに滑らかに表示されるように指定
  5. フィルタープロパティでhover後の明るさ・コントラスト・彩度を指定
  6. transitionで滑らかなアニメーションを実現

 

2. hoverするとoverflow:hiddenできれいにサイズが拡大する画像アニメーション

動きは下の画像のような感じになります

コードを見る
  <div class="images">
    <div class="image left">
      <img src="https://source.unsplash.com/1000x800" style="background-size:cover;">
      <span>Beautiful</span>
      <p>I Just Wanna Go There<br>I Just Wanna Go There</p>
    </div>
    <div class="image center">
      <img src="https://source.unsplash.com/1000x801" style="background-size:cover;">
      <span>Fantastic</span>
      <p>I Just Wanna Go There<br>I Just Wanna Go There</p>
    </div>
    <div class="image right">
      <img src="https://source.unsplash.com/1000x802" style="background-size:cover;">
      <span>Awesome</span>
      <p>I Just Wanna Go There<br>I Just Wanna Go There</p>
    </div>
  </div>
/* 画像の配置・サイズを指定 */
.images {
  display: flex;
  width: 80%;
  padding: 4% 2%;
  height: 40vh;
}
.image {
  /* 画像の配置を指定(指定しないと読み込みの際にサイズが崩れる) */
  flex: 1;
  /* 範囲からはみ出た要素を隠す指定 */
  overflow: hidden;
  /* 画像間の間隔を指定 */
  margin: 0 2%;
  /* ボックスシャドウで奥行きをつける */
  box-shadow: 0 20px 30px rgba(0,0,0,.1);
  /* 文字配置の調整 */
  line-height: 0;
}
/* それぞれの画像で異なるグラデーションカラーを指定 */
.left {
  background : linear-gradient(41deg, white 1%, red) fixed;
}
.center {
  background : linear-gradient(41deg, white .1%, orange) fixed;
}
.right {
  background : linear-gradient(41deg, white 50%, green) fixed;
}
.image img {
  /* アニメーション前の画像のサイズを指定 */
  width: 100%;
  /* アニメーション前の背景の位置を指定 */
  height: calc(100% - 100vh);
  /* 画像が伸縮せずに滑らかに表示されるように指定 */
  object-fit: cover;
  /* アニメーション速度を指定 */
  transition: 1s;
}
/* 文字のスタイル指定 */
.image p {
  margin-top:30px;
  line-height: 2em;
  font-weight:700;
  font-size:14px;
  color: #fff;
}
/* 背景のスタイル指定 */
.image span {
  font-weight: bold;
  color: #fff;
  font-size: 15px;
  display: block;
  text-align: center;
  height: 40px;
  line-height: 2.6;
  border-bottom: 1px solid #fff;
}
/* hover後の画像スタイル指定 */
.image:hover img {
  /* フィルターで明るさ・コントラスト・彩度のエフェクトをつける */
  filter: brightness(120%) contrast(150%) saturate(120%);
  /* hover後に画像が拡大するように指定 */
  transform : scale(2,2);
  width: 100%;
  height: 100%;
}
ここがポイント!
  1. flexboxでcontainerの中身をど真ん中に設置
  2. overflow: hiddenで枠に収まらないサイズの要素は隠す
  3. box-shadowで奥行きをつける
  4. object-fit: coverで画像が伸縮せずに滑らかに表示されるように指定
  5. フィルタープロパティでhover後の明るさ・コントラスト・彩度を指定
  6. transform : scale(2,2)でhover後に画像サイズが拡大するよう指定
  7. transitionで滑らかなアニメーションを実現

 

3. hoverするとoverflow:hiddenで超動的な画像アニメーション

動きは下の画像のような感じになります

コードを見る
  <div class="images">
    <div class="image">
      <img src="https://source.unsplash.com/1000x800" style="background-size:cover;">
      <span>Beautiful</span>
      <p>I Just Wanna Go There<br>I Just Wanna Go There</p>
    </div>
    <div class="image">
      <img src="https://source.unsplash.com/1000x801" style="background-size:cover;">
      <span>Fantastic</span>
      <p>I Just Wanna Go There<br>I Just Wanna Go There</p>
    </div>
    <div class="image">
      <img src="https://source.unsplash.com/1000x802" style="background-size:cover;">
      <span>Awesome</span>
      <p>I Just Wanna Go There<br>I Just Wanna Go There</p>
    </div>
  </div>
/* 画像の配置・サイズを指定 */
.images {
  display: flex;
  width: 80%;
  padding: 4% 2%;
  height: 40vh;
}
.image {
  /* 画像の配置を指定(指定しないと読み込みの際にサイズが崩れる) */
  flex: 1;
  /* 範囲からはみ出た要素を隠す指定 */
  overflow: hidden;
  /* 画像間の間隔を指定 */
  margin: 0 2%;
  /* ボックスシャドウで奥行きをつける */
  box-shadow: 0 20px 30px rgba(0,0,0,.1);
  /* 文字配置の調整 */
  line-height: 0;
  /* グラデーションカラーを指定 */
  background : linear-gradient(41deg, purple 25%, orange 50%, rgba(255, 107, 0, 0.48)) fixed;
}
.image img {
  /* アニメーション前の画像のサイズを指定 */
  width: 3000%;
  /* アニメーション前の背景の位置を指定 */
  height: calc(100% - 100vh);
  /* 画像が伸縮せずに滑らかに表示されるように指定 */
  object-fit: cover;
  /* アニメーション速度を指定 */
  transition: 1.2s;
}
/* 文字のスタイル指定 */
.image p {
  margin-top:30px;
  line-height: 2em;
  font-weight:600;
  font-size:14px;
  color: #fff;
}
/* 背景のスタイル指定 */
.image span {
  font-weight: bold;
  color: #fff;
  font-size: 15px;
  display: block;
  text-align: center;
  height: 40px;
  line-height: 2.6;
  border-bottom: 1px solid #fff;
}
/* hover後の画像スタイル指定 */
.image:hover img {
  /* フィルターで明るさ・コントラスト・彩度のエフェクトをつける */
  filter: brightness(120%) contrast(150%) saturate(120%);
  width: 100%;
  height: 100%;
}
ここがポイント!
  1. flexboxでcontainerの中身をど真ん中に設置
  2. overflow: hiddenで枠に収まらないサイズの要素は隠す
  3. box-shadowで奥行きをつける
  4. background : linear-gradient() fixedでグラデーションの指定
  5. object-fit: coverで画像が伸縮せずに滑らかに表示されるように指定
  6. フィルタープロパティでhover後の明るさ・コントラスト・彩度を指定
  7. .image imgのwidth: 3000%でhover前の画像サイズを拡大指定
  8. hover後の.image imgのwidthを100%で画像サイズを縮小指定
  9. transitionで滑らかなアニメーションを実現

参考

そもそもWebデザインの基礎がわからない。。
そんなあなたにはこれ!

ふたご


でもなあ、独学だと心配だしプログラミングスクールで学びたい!。かといってお金はかけたくないし。。
そんなあなたにはこれ!

ふたご

完全無料で一人前のエンジニアになれるプログラミングスクールあります
  1. プログラミング学習&サポートが無料!
  2. 誰もが知っている超優良企業への就職サポート付き!
  3. 学習言語:Java、PHP、HTML、CSSなど

 

   話だけ聞いてみる