今回はスライダーのナビゲーションボタン(スライダー画像の下に設置する画像を入れ替えるためのボタン)を3D画像にし、hoverまたはクリック(タップ)することでスライダー画像がスライドする商品紹介ページで実際に使えるマテリアルデザインを3つ実装しました。
3D画像にはtransform:scaleやtranslate、opacity、filterを多用してhoverするとナビゲーションボタンが拡大、移動したり色が変化するようなデザインとなっています。
マテリアルデザインなのでそのまますぐにでもコピペして使用できるように仕上げました。
htmlとcssだけしか使っていません。
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。
こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。
1. 3D画像ボタンをhoverするとスライドするスライダーアニメーション
動きは下の画像のような感じになります
コードを見る
<div id="picture">
<!-- チェックボックス -->
<input type="radio" name="picture" id="pic1" checked>
<input type="radio" name="picture" id="pic2">
<input type="radio" name="picture" id="pic3">
<input type="radio" name="picture" id="pic4">
<div id="bg-pic">
<div class="inside">
<div class="pic pic_1">
</div>
<div class="pic pic_2">
</div>
<div class="pic pic_3">
</div>
<div class="pic pic_4">
</div>
</div>
</div>
<!-- スライダーのナビゲーションボタン -->
<div id="slide-buttons">
<label for="pic1" id="btn">
<img src="https://images.unsplash.com/photo-1473181488821-2d23949a045a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80">
</label>
<label for="pic2" id="btn">
<img src="https://images.unsplash.com/photo-1442323794357-25b2ec110967?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2850&q=80">
</label>
<label for="pic3" id="btn">
<img src="https://images.unsplash.com/photo-1498550744921-75f79806b8a7?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80">
</label>
<label for="pic4" id="btn">
<img src="https://images.unsplash.com/photo-1476820865390-c52aeebb9891?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80">
</label>
</div>
</div>
#picture {
margin: 0 auto;
width: 500px;
max-width: 100%;
text-align: center;
}
#picture input[type=radio] {
display: none;
}
#picture label {
cursor:pointer;
text-decoration: none;
padding: 5px;
}
#bg-pic {
background: #fff;
position: relative;
z-index: 1;
width: 100%;
overflow: hidden;
/* ボックスのはみ打た部分を隠す */
}
/* スライダー画像の位置を比率で指定 */
#pic1:checked ~ #bg-pic .inside {
margin-left: 0;
}
#pic2:checked ~ #bg-pic .inside {
margin-left: -100%;
}
#pic3:checked ~ #bg-pic .inside {
margin-left: -200%;
}
#pic4:checked ~ #bg-pic .inside {
margin-left: -300%;
}
#pic1:hover ~ #bg-pic .inside {
margin-left: 0;
}
#pic2:hover ~ #bg-pic .inside {
margin-left: -100%;
}
#pic3:hover ~ #bg-pic .inside {
margin-left: -200%;
}
#pic4:hover ~ #bg-pic .inside {
margin-left: -300%;
}
#bg-pic .inside {
transition-duration:.8s;
/* アニメーションの開始から終了までの時間を指定 */
width: 400%;
line-height: 0;
height: 300px;
}
#bg-pic .pic {
width: 25%;
float:left;
display: flex;
justify-content: center;
align-items: center;
/* 上3行でボックスをど真ん中に指定 */
height: 100%;
background-size: cover;
}
/* 画像urlを指定 */
#bg-pic .pic_1 {
background-image: url("https://images.unsplash.com/photo-1473181488821-2d23949a045a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80");
}
#bg-pic .pic_2 {
background-image: url("https://images.unsplash.com/photo-1442323794357-25b2ec110967?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2850&q=80");
}
#bg-pic .pic_3 {
background-image: url("https://images.unsplash.com/photo-1498550744921-75f79806b8a7?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80");
}
#bg-pic .pic_4 {
background-image: url("https://images.unsplash.com/photo-1476820865390-c52aeebb9891?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80");
}
/* スライダーの送りボタンを指定 */
#slide-buttons #btn img{
width:100%;
}
#slide-buttons #btn {
width: 71px;
margin:0 10px;
box-shadow: -3px 3px 5px 1px gray;
/* ボックスに影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、広がりの長さ、色) */
transition-duration:.5s;
/* アニメーションの開始から終了までの時間を指定 */
padding:0;
}
#slide-buttons {
display: inline-block;
height: 50px;
margin: 30px 10px;
transform: scale(1.45,1.45);
/* XY軸(横縦)の伸縮率を指定 */
}
#slide-buttons label {
cursor: pointer;
display: inline-block;
}
#slide-buttons label:hover {
transform: scale(1.1,1.1);
/* XY軸(横縦)の伸縮率を指定 */
}
ここがポイント!
- flexboxでbg-picの中身をど真ん中に設置
- スライダーのナビゲーションボタンを3D画像にすることで、商品紹介ページで使えたりオシャレな画像スライダーを使いたい時などに簡単に導入できるよう実装
- ナビゲーションボタンをhoverするとtransform:scaleでボタンが拡大し、スライダー画像がスライドするマテリアルデザイン(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
- ナビゲーションボタンをcheckするとスライダー画像がスライド&固定するよう調整
- transition-durationプロパティを指定して開始から終了までの自然なアニメーションを実現
2. 3D画像ボタンをhoverすると拡大&透過しスライドするスライダーアニメーション
動きは下の画像のような感じになります
コードを見る
<div id="picture">
<!-- チェックボックス -->
<input type="radio" name="picture" id="pic1" checked>
<input type="radio" name="picture" id="pic2">
<input type="radio" name="picture" id="pic3">
<input type="radio" name="picture" id="pic4">
<div id="bg-pic">
<div class="inside">
<div class="pic pic_1">
</div>
<div class="pic pic_2">
</div>
<div class="pic pic_3">
</div>
<div class="pic pic_4">
</div>
</div>
</div>
<!-- スライダーのナビゲーションボタン -->
<div id="slide-buttons">
<label for="pic1" id="btn">
<img src="https://images.unsplash.com/photo-1473181488821-2d23949a045a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80">
</label>
<label for="pic2" id="btn">
<img src="https://images.unsplash.com/photo-1442323794357-25b2ec110967?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2850&q=80">
</label>
<label for="pic3" id="btn">
<img src="https://images.unsplash.com/photo-1498550744921-75f79806b8a7?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80">
</label>
<label for="pic4" id="btn">
<img src="https://images.unsplash.com/photo-1476820865390-c52aeebb9891?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80">
</label>
</div>
</div>
#picture {
margin: 0 auto;
width: 500px;
max-width: 100%;
text-align: center;
}
#picture input[type=radio] {
display: none;
}
#picture label {
cursor:pointer;
text-decoration: none;
padding: 5px;
}
#bg-pic {
background: #fff;
position: relative;
z-index: 1;
width: 100%;
overflow: hidden;
/* ボックスのはみ打た部分を隠す */
}
/* スライダー画像の位置を比率で指定 */
#pic1:checked ~ #bg-pic .inside {
margin-left: 0;
}
#pic2:checked ~ #bg-pic .inside {
margin-left: -100%;
}
#pic3:checked ~ #bg-pic .inside {
margin-left: -200%;
}
#pic4:checked ~ #bg-pic .inside {
margin-left: -300%;
}
#pic1:hover ~ #bg-pic .inside {
margin-left: 0;
}
#pic2:hover ~ #bg-pic .inside {
margin-left: -100%;
}
#pic3:hover ~ #bg-pic .inside {
margin-left: -200%;
}
#pic4:hover ~ #bg-pic .inside {
margin-left: -300%;
}
#bg-pic .inside {
transition-duration:.8s;
/* アニメーションの開始から終了までの時間を指定 */
width: 400%;
line-height: 0;
height: 300px;
}
#bg-pic .pic {
width: 25%;
float:left;
display: flex;
justify-content: center;
align-items: center;
/* 上3行でボックスをど真ん中に指定 */
height: 100%;
background-size: cover;
}
/* 画像urlを指定 */
#bg-pic .pic_1 {
background-image: url("https://images.unsplash.com/photo-1473181488821-2d23949a045a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80");
}
#bg-pic .pic_2 {
background-image: url("https://images.unsplash.com/photo-1442323794357-25b2ec110967?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2850&q=80");
}
#bg-pic .pic_3 {
background-image: url("https://images.unsplash.com/photo-1498550744921-75f79806b8a7?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80");
}
#bg-pic .pic_4 {
background-image: url("https://images.unsplash.com/photo-1476820865390-c52aeebb9891?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80");
}
/* スライダーの送りボタンを指定 */
#slide-buttons #btn img{
width:100%;
}
#slide-buttons #btn {
width: 71px;
margin:0 10px;
box-shadow: -3px 3px 5px 1px gray;
/* ボックスに影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、広がりの長さ、色) */
transition-duration:.5s;
/* アニメーションの開始から終了までの時間を指定 */
padding:0;
}
#slide-buttons {
display: inline-block;
height: 50px;
margin: 30px 10px;
transform: scale(1.45,1.45);
/* XY軸(横縦)の伸縮率を指定 */
}
#slide-buttons label {
cursor: pointer;
display: inline-block;
filter:opacity(50%) saturate(100%) contrast(100%);
/* hover前:filterプロパティの「透明度」+「彩度」+「コントラスト」 */
}
#slide-buttons label:hover {
transform: scale(1.1,1.1);
/* XY軸(横縦)の伸縮率を指定 */
filter:opacity(100%) saturate(130%) contrast(130%);
/* hover後:filterプロパティの「透明度」+「彩度」+「コントラスト」 */
}
/* ナビゲーションボタンをcheckした時の透明度を指定 */
#pic1:checked ~ #slide-buttons label:nth-child(1),
#pic2:checked ~ #slide-buttons label:nth-child(2),
#pic3:checked ~ #slide-buttons label:nth-child(3),
#pic4:checked ~ #slide-buttons label:nth-child(4) {
filter:opacity(100%) saturate(130%) contrast(130%);
/* check後:filterプロパティの「透明度」+「彩度」+「コントラスト」 */
}
ここがポイント!
- flexboxでbg-picの中身をど真ん中に設置
- スライダーのナビゲーションボタンを3D画像にすることで、商品紹介ページで使えたりオシャレな画像スライダーを使いたい時などに簡単に導入できるよう実装
- ナビゲーションボタンをhoverするとtransform:scaleでボタンが拡大、opacityで透明度が100%になり、スライダー画像がスライドするマテリアルデザイン(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
- ナビゲーションボタンをcheckするとスライダー画像がスライド&固定するよう調整
- transition-durationプロパティを指定して開始から終了までの自然なアニメーションを実現
3. 3D画像ボタンをhoverすると色彩が変化しスライドするスライダーアニメーション
動きは下の画像のような感じになります
コードを見る
<div id="picture">
<!-- チェックボックス -->
<input type="radio" name="picture" id="pic1" checked>
<input type="radio" name="picture" id="pic2">
<input type="radio" name="picture" id="pic3">
<input type="radio" name="picture" id="pic4">
<div id="bg-pic">
<div class="inside">
<div class="pic pic_1">
</div>
<div class="pic pic_2">
</div>
<div class="pic pic_3">
</div>
<div class="pic pic_4">
</div>
</div>
</div>
<!-- スライダーのナビゲーションボタン -->
<div id="slide-buttons">
<label for="pic1" id="btn">
<img src="https://images.unsplash.com/photo-1473181488821-2d23949a045a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80">
</label>
<label for="pic2" id="btn">
<img src="https://images.unsplash.com/photo-1442323794357-25b2ec110967?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2850&q=80">
</label>
<label for="pic3" id="btn">
<img src="https://images.unsplash.com/photo-1498550744921-75f79806b8a7?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80">
</label>
<label for="pic4" id="btn">
<img src="https://images.unsplash.com/photo-1476820865390-c52aeebb9891?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80">
</label>
</div>
</div>
#picture {
margin: 0 auto;
width: 500px;
max-width: 100%;
text-align: center;
}
#picture input[type=radio] {
display: none;
}
#picture label {
cursor:pointer;
text-decoration: none;
padding: 5px;
}
#bg-pic {
background: #fff;
position: relative;
z-index: 1;
width: 100%;
overflow: hidden;
/* ボックスのはみ打た部分を隠す */
}
/* スライダー画像の位置を比率で指定 */
#pic1:checked ~ #bg-pic .inside {
margin-left: 0;
}
#pic2:checked ~ #bg-pic .inside {
margin-left: -100%;
}
#pic3:checked ~ #bg-pic .inside {
margin-left: -200%;
}
#pic4:checked ~ #bg-pic .inside {
margin-left: -300%;
}
#pic1:hover ~ #bg-pic .inside {
margin-left: 0;
filter:saturate(130%) contrast(130%) grayscale(0%);
/* hover後:filterプロパティの「彩度」+「コントラスト」+「モノクロ」 */
}
#pic2:hover ~ #bg-pic .inside {
margin-left: -100%;
filter:saturate(130%) contrast(130%) grayscale(0%);
/* hover後:filterプロパティの「彩度」+「コントラスト」+「モノクロ」 */
}
#pic3:hover ~ #bg-pic .inside {
margin-left: -200%;
filter:saturate(130%) contrast(130%) grayscale(0%);
/* hover後:filterプロパティの「彩度」+「コントラスト」+「モノクロ」 */
}
#pic4:hover ~ #bg-pic .inside {
margin-left: -300%;
filter:saturate(130%) contrast(130%) grayscale(0%);
/* hover後:filterプロパティの「彩度」+「コントラスト」+「モノクロ」 */
}
#bg-pic .inside {
transition-duration:.8s;
/* アニメーションの開始から終了までの時間を指定 */
width: 400%;
line-height: 0;
height: 300px;
}
#bg-pic .pic {
width: 25%;
float:left;
display: flex;
justify-content: center;
align-items: center;
/* 上3行でボックスをど真ん中に指定 */
height: 100%;
background-size: cover;
}
/* 画像urlを指定 */
#bg-pic .pic_1 {
background-image: url("https://images.unsplash.com/photo-1473181488821-2d23949a045a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80");
}
#bg-pic .pic_2 {
background-image: url("https://images.unsplash.com/photo-1442323794357-25b2ec110967?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2850&q=80");
}
#bg-pic .pic_3 {
background-image: url("https://images.unsplash.com/photo-1498550744921-75f79806b8a7?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80");
}
#bg-pic .pic_4 {
background-image: url("https://images.unsplash.com/photo-1476820865390-c52aeebb9891?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80");
}
/* スライダーの送りボタンを指定 */
#slide-buttons #btn img{
width:100%;
}
#slide-buttons #btn {
width: 71px;
margin:0 10px;
box-shadow: -3px 3px 5px 1px gray;
/* ボックスに影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、広がりの長さ、色) */
transition-duration:.5s;
/* アニメーションの開始から終了までの時間を指定 */
padding:0;
}
#slide-buttons {
display: inline-block;
height: 50px;
margin: 30px 10px;
transform: scale(1.45,1.45);
/* XY軸(横縦)の伸縮率を指定 */
}
#slide-buttons label {
cursor: pointer;
display: inline-block;
filter:saturate(100%) contrast(100%) grayscale(100%);
/* hover前:filterプロパティの「彩度」+「コントラスト」+「モノクロ」 */
}
#slide-buttons label:hover {
transform: scale(1.1,1.1);
/* XY軸(横縦)の伸縮率を指定 */
filter:saturate(130%) contrast(130%) grayscale(0%);
/* hover後:filterプロパティの「彩度」+「コントラスト」+「モノクロ」 */
}
/* ナビゲーションボタンをcheckした時の透明度を指定 */
#pic1:checked ~ #slide-buttons label:nth-child(1),
#pic2:checked ~ #slide-buttons label:nth-child(2),
#pic3:checked ~ #slide-buttons label:nth-child(3),
#pic4:checked ~ #slide-buttons label:nth-child(4) {
filter:saturate(130%) contrast(130%) grayscale(0%);
/* check後:filterプロパティの「彩度」+「コントラスト」+「モノクロ」 */
}
【初心者向け】失敗しないプログラミングTIPS
そもそもWebデザインの基礎がわからない。。
ふたご
未経験からWeb制作で月50万稼げるようになったUdemy教材3選
でもなあ、独学だと心配だしプログラミングスクールで学びたい!。かといってお金はかけたくないし。。
ふたご
完全無料で一人前のエンジニアになれるプログラミングスクール【ProEngineer】
- プログラミング学習&サポートが無料!
- 誰もが知っている超優良企業への就職サポート付き!
- 学習言語:Java、PHP、HTML、CSSなど
話だけ聞いてみる