フォトギャラリー・スライドショー両用型(フェイドイン・アウト型)

 サムネイルをクリックするとステージに該当する拡大写真が登場するタイプのフォトギャラリーに、「Slide Show」ボタンをクリックするとスライドショーが開始される機能を加えたものである。  写真の登場・退場には、フェイドイン・アウト効果を使っている。

針ノ木岳から爺ヶ岳への縦走路にて

本サンプル表示用HTML

<div id="stage">
  <input type="radio" id="r1" name="gal">
  <input type="radio" id="r2" name="gal">
  <input type="radio" id="r3" name="gal">
  <input type="radio" id="r4" name="gal">
  <input type="radio" id="r5" name="gal">
  <input type="radio" id="sson" name="gal">
  <div id="thumbs">
    <label for="r1"><img src="img2/s1.jpg" width="115"></label>
    <label for="r2"><img src="img2/s2.jpg" width="115"></label>
    <label for="r3"><img src="img2/s3.jpg" width="115"></label>
    <label for="r4"><img src="img2/s4.jpg" width="115"></label>
    <label for="r5"><img src="img2/s5.jpg" width="115"></label>
  </div>
  <div id="screen"><span id="title">針ノ木岳から爺ヶ岳への縦走路にて</span></div>
  <div id="photos">
    <div id="photo1" class="photo"><img src="img2/1.jpg"></div>
    <div id="photo2" class="photo"><img src="img2/2.jpg"></div>
    <div id="photo3" class="photo"><img src="img2/3.jpg"></div>
    <div id="photo4" class="photo"><img src="img2/4.jpg"></div>
    <div id="photo5" class="photo"><img src="img2/5.jpg"></div>
  </div>
  <label for="sson"><span>>> Slide Show >></span></label></div>
</div>

HTMLのポイント説明

・ラジオボタン #r1 - #r5 を各サムネイルに関連付け、#sson をSlide Show ボタンに関連付けている。
・#r1 - #r5 は、サムネイルクリックで拡大写真の表示transitionのトリガーとして、#sson はスライドショーanimationの開始に機能させている。
・このサンプルでは、スライドショーは全て1枚目からスタートするように設定しているが、表示スライドから開始させるようにしたい場合は、各スライドそれぞれに付随したSlideShowボタンを表示させなければならない。
(各スライドのDIV、例えば、#photo1内に、labelとしてsson1などとして独自のSlideShowボタンを置く)

本サンプル表示用CSS

#stage {
	position: relative;
	width: 600px;
	height: 455px;
	overflow: hidden;
	margin-top: 0;
	margin-right: auto;
	margin-bottom: 0;
	margin-left: auto;
	background-color:#000;
}
/*全サムネイルのコンテナー*/
#thumbs {
	position: absolute;
	width: 630px;	
	top: 380px;
	left: 5px;
}
/*サムネイルのマウスオーバーでポインターを手のひら*/
#thumbs label img {
	cursor: pointer;
}
/*初期画面*/
#screen {
	position: absolute;
	top: 10px;
	width: 600px;
	height: 338px;
	background-color: #CCC;
	z-indes:-10;
}
/*初期画面上の文字*/
#screen span {
	position:absolute;
	top:130px;
	left:50px;
	font-size:32px;
}
/*ラジオボタンを非表示に*/
#r1, #r2, #r3, #r4, #r5, #s1, #s2, #s3, #s4, #s5, #sson {
	display: none;
}
/* 拡大写真を水平帯状に並べるコンテナー */
#photos {
	position:absolute;
	top:10px;
	width:3000px;
	height:380px;
}
/*表示写真の初期配置(全部透明に)とtransition設定*/
.photo {
	position:relative;
	float:left;
}
.photo {
	opacity: 0;
	-webkit-transition: opacity 1s ease;
	-moz-transition: opacity 1s ease;
	-o-transition: opacity 1s ease;
	transition: opacity 1s ease;
}
/* Slide Show ボタン */
#stage label span {
	position:absolute;
	top:355px;
	left:440px;
	cursor:pointer;
	font-family:"ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "MS Pゴシック", "MS PGothic", sans-serif;
	color:#fff;
}
/* サムネイルクリックで、該当するスライドを表示させる */
#r1:checked ~ #photos #photo1,#r2:checked ~ #photos #photo2,#r3:checked ~ #photos #photo3, #r4:checked ~ #photos #photo4, #r5:checked ~ #photos #photo5 {
	opacity: 1;
}
/* サムネイルクリックで、が該当スライドの位置を画面中央に */
#r2:checked ~ #photos {
	left:-100%;
}
#r3:checked ~ #photos {
	left:-200%;
}
#r4:checked ~ #photos {
	left:-300%;
}
#r5:checked ~ #photos {
	left:-400%;
}
/*どれかがチェックされたらスクリーン上の文字を非表示に*/
#r1:checked ~ #screen, #r2:checked ~ #screen, #r3:checked ~ #screen, #r4:checked ~ #screen, #r5:checked ~ #screen, #sson:checked ~ #screen {
	opacity: 0;
}
/* ssonボタンクリックで拡大写真のopacityを1に */
#sson:checked ~ #photos .photo, #s2:checked ~ #photos .photo, #s3:checked ~ #photos .photo, #s4:checked ~ #photos .photo, #s5:checked ~ #photos .photo {
	opacity:1;
}
/* ssonボタンクリックでスライドショーを開始 */
#sson:checked ~ #photos {
	animation:imgPassToLeft 30s infinite;
	-webkit-animation:imgPassToLeft 30s infinite;
}
/* animation設定 */
@keyframes imgPassToLeft {
	0%  {   left:   0%;opacity:0;}
	4%  {   left:   0%;opacity:1;}
	16% {   left:   0%;opacity:1;}
	19.99%{ left:   0%;opacity:0;}
	20% {   left:-100%;opacity:0;}
	24% {   left:-100%;opacity:1;} 
	36% {   left:-100%;opacity:1;}
	39.99%{ left:-100%;opacity:0;}
	40% {   left:-200%;opacity:0;}
	44% {   left:-200%;opacity:1;}
	56% {   left:-200%;opacity:1;}
	59.99%{ left:-200%;opacity:0;}
	60% {   left:-300%;opacity:0;}
	64% {   left:-300%;opacity:1;}
	76% {   left:-300%;opacity:1;} 
	79.99%{ left:-300%;opacity:0;}
	80% {   left:-400%;opacity:0;}
	84% {   left:-400%;opacity:1;}
	96% {   left:-400%;opacity:1;}
	99.99%{ left:-400%;opacity:0;}
	100% {  left:   0%;opacity:0;}
}
@-webkit-keyframes imgPassToLeft {
	0%  {   left:   0%;opacity:0;}
	4%  {   left:   0%;opacity:1;}
	16% {   left:   0%;opacity:1;}
	19.99%{ left:   0%;opacity:0;}
	20% {   left:-100%;opacity:0;}
	24% {   left:-100%;opacity:1;} 
	36% {   left:-100%;opacity:1;}
	39.99%{ left:-100%;opacity:0;}
	40% {   left:-200%;opacity:0;}
	44% {   left:-200%;opacity:1;}
	56% {   left:-200%;opacity:1;}
	59.99%{ left:-200%;opacity:0;}
	60% {   left:-300%;opacity:0;}
	64% {   left:-300%;opacity:1;}
	76% {   left:-300%;opacity:1;} 
	79.99%{ left:-300%;opacity:0;}
	80% {   left:-400%;opacity:0;}
	84% {   left:-400%;opacity:1;}
	96% {   left:-400%;opacity:1;}
	99.99%{ left:-400%;opacity:0;}
	100% {  left:   0%;opacity:0;}
}

CSSのポイント説明

・スライド(拡大写真)を水平帯状に並べて置き、サムネイルクリックで、該当スライドがステージに表示されるように位置を設定する。
・スライドショーは、SlideShow ボタンクリックで、1枚目をスタートとするanimationを開始させる。
・スライドショーを表示スライドから始めたい場合は、各スライド独自の(そのスライドを起点とする)animationを記述する必要がある。