今回はoverflow:hiddenで滑らかにサイズが拡大するCSS画像アニメーションをご紹介。簡単です。超動きます。画像一覧画面を作る際に役立ちます。
htmlとcssだけしか使っていません。
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。
こちらのアニメーション/エフェクトのコードはすべて完全オリジナルなのでコピペ大歓迎です。
この記事の目次
【徹底解説】height calcで滑らかなCSS画像アニメーションを実装する方法
目次
1. 【徹底解説】height calcで滑らかなCSS画像アニメーションを実装する方法
まずはアニメーションの動作から確認していきましょう
アニメーション動作の確認
動きは下の画像のような感じになります
実際の動きはこちら
コードの確認
<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%;
}
ここがポイント!
- flexboxでcontainerの中身をど真ん中に設置
- overflow: hiddenで枠に収まらないサイズの要素は隠す
- box-shadowで奥行きをつける
- object-fit: coverで画像が伸縮せずに滑らかに表示されるように指定
- フィルタープロパティでhover後の明るさ・コントラスト・彩度を指定
- transform : scale(2,2)でhover後に画像サイズが拡大するよう指定
- transitionで滑らかなアニメーションを実現
参考
そもそもWebデザインの基礎がわからない。。
そんなあなたにはこれ!
未経験からWeb制作で月50万稼げるようになったUdemy教材3選
でもなあ、独学だと心配だしプログラミングスクールで学びたい!。かといってお金はかけたくないし。。
そんなあなたにはこれ!
完全無料で一人前のエンジニアになれるプログラミングスクールあります