今回はスライダーのナビゲーションボタン(スライダー画像の下に設置する画像を入れ替えるためのボタン)を3D画像にすることで商品紹介ページで実際に使えるマテリアルデザインを3つ実装しました。
3D画像にはtransform:scaleやtranslate、opacityを使用してhoverするとナビゲーションボタンが拡大、移動したり色が濃くなるようなデザインとなっています。
マテリアルデザインなのでそのまますぐにでもコピペして使用できるように仕上げました。
htmlとcssだけしか使っていません。
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。
こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。
1. 商品ページで使える3D画像のナビゲーションボタン付きスライダーエフェクト
動きは下の画像のような感じになります
コードを見る
<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%;
}
#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選)
- スライダーのコントロールボタンをhoverすると透明度を調整するopacityが実行されて透明度が100%になるよう調整
- 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%;
}
#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;
opacity:0.5;
/* ナビゲーションボタンの透明度を指定 */
}
#slide-buttons label:hover {
transform: scale(1.1,1.1);
/* XY軸(横縦)の伸縮率を指定 */
opacity:1;
/* ナビゲーションボタンをhoverした時の透明度を指定 */
}
/* ナビゲーションボタンを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) {
opacity:1;
}
ここがポイント!
- flexboxでbg-picの中身をど真ん中に設置
- スライダーのナビゲーションボタンを3D画像にすることで、商品紹介ページで使えたりオシャレな画像スライダーを使いたい時などに簡単に導入できるよう実装
- ナビゲーションボタンをhoverするとtransform:scaleでボタンが拡大し、opacityで透明度が100%になるマテリアルデザイン(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
- ナビゲーションボタンをcheckすると透明度を調整するopacityが実行されて透明度が100%になるよう調整
- 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%;
}
#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) translateY(0px);
/* XY軸(横縦)の伸縮率と移動距離を指定 */
}
#slide-buttons label {
cursor: pointer;
display: inline-block;
opacity:0.5;
/* ナビゲーションボタンの透明度を指定 */
}
#slide-buttons label:hover {
transform: scale(1,1) translateY(-5px);
/* XY軸(横縦)の伸縮率と移動距離を指定 */
opacity:1;
/* ナビゲーションボタンをhoverした時の透明度を指定 */
}
/* ナビゲーションボタンを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) {
opacity:1;
}
ここがポイント!
- flexboxでbg-picの中身をど真ん中に設置
- スライダーのナビゲーションボタンを3D画像にすることで、商品紹介ページで使えたりオシャレな画像スライダーを使いたい時などに簡単に導入できるよう実装
- ナビゲーションボタンをhoverするとtransform:translateYでボタンが上方向に移動し、opacityで透明度が100%になるマテリアルデザイン(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
- ナビゲーションボタンをcheckすると透明度を調整するopacityが実行されて透明度が100%になるよう調整
- transition-durationプロパティを指定して開始から終了までの自然なアニメーションを実現
参考
そもそもWebデザインの基礎がわからない。。
ふたご
未経験からWeb制作で月50万稼げるようになったUdemy教材3選
でもなあ、独学だと心配だしプログラミングスクールで学びたい!。かといってお金はかけたくないし。。
ふたご
完全無料で一人前のエンジニアになれるプログラミングスクールあります
- プログラミング学習&サポートが無料!
- 誰もが知っている超優良企業への就職サポート付き!
- 学習言語:Java、PHP、HTML、CSSなど
話だけ聞いてみる