今回は【サイズ拡大】背景×transform(scale) でCSS複数画像アニメーション3選をご紹介。シンプルかつ洗練されたデザイン。transformプロパティ(rotate×scale)で画像が動く。filterで美しいエフェクト。Web制作で使える。コピペOK。HTML, CSSだけ
まずは動きを確認してみてください(これがコピペOKなのかと驚くはず)
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。
こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。
1. 【背景×拡大】transform:scaleでシンプルな画像アニメーション
動きは下の画像のような感じになります
コードを見る
<div class="images">
<div class="image">
<img src="https://images.unsplash.com/photo-1532699123275-37b5a57561cf?ixlib=rb-1.2.1&auto=format&fit=crop&w=1650&q=80">
<span>Morning</span>
</div>
<div class="image">
<img src="https://images.unsplash.com/photo-1513543806865-85e29a7c0352?ixlib=rb-1.2.1&auto=format&fit=crop&w=2775&q=80">
<span>Day</span>
</div>
<div class="image">
<img src="https://images.unsplash.com/photo-1519221739757-4df89b4d0efe?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80">
<span>Evening</span>
</div>
</div>
.images {
/* 子要素を横並びに配置する */
display: flex;
width: 100%;
padding: 3% 2%;
box-sizing: border-box;
height: 50vh;
}
.image {
/* 要素位置の指定 */
flex: 1;
/* はみ出す箇所を隠す */
overflow: hidden;
/* アニメーション速度を指定 */
transition: .8s;
margin: 0 2%;
/* ボックスに影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、色) */
box-shadow: 0 20px 30px rgba(0,0,0,.1);
/* 文字の高さを指定 */
line-height: 0;
}
.image > img {
/* デフォルトでの画像のズーム率を指定 */
width: 100%;
/* 文字背景の高さを指定 */
height: calc(100% - 50vh);
/* imgをimageの枠にトリミングしてはめ込む */
object-fit: cover;
/* アニメーション速度を指定 */
transition: .8s;
filter: saturate(100%) brightness(100%) contrast(100%);
/* transformプロパティで画像のサイズを拡大・縮小調整 */
transform: scale(.9);
}
.image > span {
font-weight: bold;
font-size: 30px;
display: block;
text-align: center;
/* 文字の高さを指定 */
line-height: 9;
}
.image:hover {
/* hover後の画像のサイズを指定 */
flex: 1 1 30%;
}
.image:hover > img {
width: 100%;
/* 背景の高さを調整 */
height: calc(100% - 0vh);
filter: saturate(240%) brightness(110%) contrast(110%);
/* transformプロパティで画像のサイズを拡大・縮小調整 */
transform: scale(1);
}
POINT
- flexboxで横並びに設置
- overflow: hiddenで枠に収まらないサイズの要素は隠す
- box-shadowで奥行きをつけて立体感を演出
- object-fit: coverで画像が伸縮せずに滑らかに表示されるように指定
- transform:scaleでhoverした画像を拡大
- filter:saturate(彩度) brightness(明るさ) contrast(コントラスト)を指定
- flex: 1 1 30%でhoverした画像としてない画像の比率を調整してぎゅーっと縮小拡大するレイアウトを実現
- transitionで開始から終了までの十分な時間を設定し滑らかなアニメーションを実現
2. 【背景×急拡大】transform:scaleで画像アニメーション
動きは下の画像のような感じになります
コードを見る
<div class="images">
<div class="image">
<img src="https://images.unsplash.com/photo-1532699123275-37b5a57561cf?ixlib=rb-1.2.1&auto=format&fit=crop&w=1650&q=80">
<span>Morning</span>
</div>
<div class="image">
<img src="https://images.unsplash.com/photo-1513543806865-85e29a7c0352?ixlib=rb-1.2.1&auto=format&fit=crop&w=2775&q=80">
<span>Day</span>
</div>
<div class="image">
<img src="https://images.unsplash.com/photo-1519221739757-4df89b4d0efe?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80">
<span>Evening</span>
</div>
</div>
.images {
/* 子要素を横並びに配置する */
display: flex;
width: 100%;
padding: 3% 2%;
box-sizing: border-box;
height: 50vh;
}
.image {
/* 要素位置の指定 */
flex: 1;
/* はみ出す箇所を隠す */
overflow: hidden;
/* アニメーション速度を指定 */
transition: .8s;
margin: 0 2%;
/* ボックスに影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、色) */
box-shadow: 0 20px 30px rgba(0,0,0,.1);
/* 文字の高さを指定 */
line-height: 0;
}
.image > img {
/* デフォルトでの画像のズーム率を指定 */
width: 100%;
/* 文字背景の高さを指定 */
height: calc(100% - 50vh);
/* imgをimageの枠にトリミングしてはめ込む */
object-fit: cover;
/* アニメーション速度を指定 */
transition: .8s;
filter: saturate(100%) brightness(100%) contrast(100%);
/* transformプロパティで画像のサイズを拡大・縮小調整 */
transform: scale(0);
}
.image > span {
font-weight: bold;
font-size: 30px;
display: block;
text-align: center;
/* 文字の高さを指定 */
line-height: 9;
}
.image:hover {
/* hover後の画像のサイズを指定 */
flex: 1 1 30%;
}
.image:hover > img {
width: 100%;
/* 背景の高さを調整 */
height: calc(100% - 0vh);
filter: saturate(240%) brightness(110%) contrast(110%);
/* transformプロパティで画像のサイズを拡大・縮小調整 */
transform: scale(1);
}
POINT
- flexboxで横並びに設置
- overflow: hiddenで枠に収まらないサイズの要素は隠す
- box-shadowで奥行きをつけて立体感を演出
- object-fit: coverで画像が伸縮せずに滑らかに表示されるように指定
- transform:scaleでhoverした画像を拡大
- filter:saturate(彩度) brightness(明るさ) contrast(コントラスト)を指定
- flex: 1 1 30%でhoverした画像としてない画像の比率を調整してぎゅーっと縮小拡大するレイアウトを実現
- transitionで開始から終了までの十分な時間を設定し滑らかなアニメーションを実現
3. 【背景×拡大×縦回転】transform:scale×ratateXで画像アニメーション
動きは下の画像のような感じになります
コードを見る
<div class="images">
<div class="image">
<img src="https://images.unsplash.com/photo-1532699123275-37b5a57561cf?ixlib=rb-1.2.1&auto=format&fit=crop&w=1650&q=80">
<span>Morning</span>
</div>
<div class="image">
<img src="https://images.unsplash.com/photo-1513543806865-85e29a7c0352?ixlib=rb-1.2.1&auto=format&fit=crop&w=2775&q=80">
<span>Day</span>
</div>
<div class="image">
<img src="https://images.unsplash.com/photo-1519221739757-4df89b4d0efe?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80">
<span>Evening</span>
</div>
</div>
.images {
/* 子要素を横並びに配置する */
display: flex;
width: 100%;
padding: 3% 2%;
box-sizing: border-box;
height: 50vh;
}
.image {
/* 要素位置の指定 */
flex: 1;
/* はみ出す箇所を隠す */
overflow: hidden;
/* アニメーション速度を指定 */
transition: .8s;
margin: 0 2%;
/* ボックスに影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、色) */
box-shadow: 0 20px 30px rgba(0,0,0,.1);
/* 文字の高さを指定 */
line-height: 0;
}
.image > img {
/* デフォルトでの画像のズーム率を指定 */
width: 100%;
/* 文字背景の高さを指定 */
height: calc(100% - 50vh);
/* imgをimageの枠にトリミングしてはめ込む */
object-fit: cover;
/* アニメーション速度を指定 */
transition: .8s;
filter: saturate(100%) brightness(100%) contrast(100%);
/* transformプロパティで画像のサイズを拡大・縮小・回転角度を調整 */
transform: scaleX(0) rotateX(90deg);
}
.image > span {
font-weight: bold;
font-size: 30px;
display: block;
text-align: center;
/* 文字の高さを指定 */
line-height: 9;
}
.image:hover {
/* hover後の画像のサイズを指定 */
flex: 1 1 30%;
}
.image:hover > img {
width: 100%;
/* 背景の高さを調整 */
height: calc(100% - 0vh);
filter: saturate(240%) brightness(110%) contrast(110%);
/* transformプロパティで画像のサイズを拡大・縮小・回転角度を調整 */
transform: scaleX(1) rotateX(360deg);
}
POINT
- flexboxで横並びに設置
- overflow: hiddenで枠に収まらないサイズの要素は隠す
- box-shadowで奥行きをつけて立体感を演出
- object-fit: coverで画像が伸縮せずに滑らかに表示されるように指定
- transform:scale × rotateXでhoverした画像を拡大・回転
- filter:saturate(彩度) brightness(明るさ) contrast(コントラスト)を指定
- flex: 1 1 30%でhoverした画像としてない画像の比率を調整してぎゅーっと縮小拡大するレイアウトを実現
- transitionで開始から終了までの十分な時間を設定し滑らかなアニメーションを実現
【初心者向け】失敗しないプログラミングTIPS
そもそもWebデザインの基礎がわからない。。
ふたご
未経験からWeb制作で月50万稼げるようになったUdemy教材3選
でもなあ、独学だと心配だしプログラミングスクールで学びたい!。かといってお金はかけたくないし。。
ふたご
完全無料で一人前のエンジニアになれるプログラミングスクール【ProEngineer】
- プログラミング学習&サポートが無料!
- 誰もが知っている超優良企業への就職サポート付き!
- 学習言語:Java、PHP、HTML、CSSなど
話だけ聞いてみる