cssとhtmlのみで作るスライドショーです。
javascriptやプラグインを使うほどじゃないときなどにパパッとできちゃうものばかりです。
<div class="cp_cssslider">
<div class="cp_slidewrapper">
<div class="cp_slide_item"><img src="img1.jpg"></div>
<div class="cp_slide_item"><img src="img2.jpg"></div>
<div class="cp_slide_item"><img src="img3.jpg"></div>
<div class="cp_slide_item"><img src="img4.jpg"></div>
<div class="cp_slide_item"><img src="img5.jpg"></div>
</div>
</div>
.cp_cssslider {
width: 300px;
height: 200px;
overflow: hidden;
margin: 2em auto;
border: 10px solid #ffffff;
box-shadow:0px 0px 5px 0px rgba(0,0,0,0.5);
}
.cp_slide_item {
width: 300px;
height: 200px;
float: left;
position: relative;
}
.cp_slidewrapper {
width: 500%;/* slideの枚数×100% */
position: relative;
left: 0;
animation: slider 20s infinite ease;/* スピード */
}
@-webkit-keyframes slider {
/* 100%を枚数で割った%に割り振る */
0% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
20% {
-webkit-transform: translateX(-300px);
transform: translateX(-300px);
}
40% {
-webkit-transform: translateX(-600px);
transform: translateX(-600px);
}
60% {
-webkit-transform: translateX(-900px);
transform: translateX(-900px);
}
80% {
-webkit-transform: translateX(-1200px);
transform: translateX(-1200px);
}
100% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
}
@keyframes slider {
/* 100%を枚数で割った%に割り振る */
0% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
20% {
-webkit-transform: translateX(-300px);
transform: translateX(-300px);
}
40% {
-webkit-transform: translateX(-600px);
transform: translateX(-600px);
}
60% {
-webkit-transform: translateX(-900px);
transform: translateX(-900px);
}
80% {
-webkit-transform: translateX(-1200px);
transform: translateX(-1200px);
}
100% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
}
<div class="cp_cssslider">
<div class="mask">
<ul>
<li><a href="#"><img src="img1.jpg" /></a>
<div class="tooltip"><h1>sample1</h1></div></li>
<li><a href="#"><img src="img2.jpg" /></a>
<div class="tooltip"><h1>sample2</h1></div></li>
<li><a href="#"><img src="img3.jpg" /></a>
<div class="tooltip"><h1>sample3</h1></div></li>
<li><a href="#"><img src="img4.jpg" /></a>
<div class="tooltip"><h1>sample4</h1></div></li>
<li><a href="#"><img src="img5.jpg" /></a>
<div class="tooltip"><h1>sample5</h1></div></li>
</ul>
</div>
<div class="cp_progressbar"></div>
</div>
*, *:before, *:after {
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.cp_cssslider {
background:#cccccc;
border: 10px solid #ffffff;
box-shadow:1px 1px 5px rgba(0,0,0,0.7);
height:200px;
width:300px;
margin:2em auto;
overflow:visible;
position:relative;
}
.cp_cssslider .mask {
overflow:hidden;
height:180px;/* ボーダー分を差し引く */
}
.cp_cssslider ul {
margin:0;
padding:0;
position:relative;
}
/* tooltip */
.cp_cssslider .tooltip {
background:rgba(0,0,0,0.7);
width:200px;
height:auto;
position:relative;
bottom:95px;
left:-300px;
-webkit-transition:all 0.3s ease-in-out;
transition:all 0.3s ease-in-out;
}
.cp_cssslider .tooltip h1 {
color:#fff;
padding:0 0 0 20px;
}
.cp_cssslider li:hover .tooltip{
left:0px;
}
.cp_cssslider:hover li,
.cp_cssslider:hover .cp_progressbar {
-webkit-animation-play-state:paused;
animation-play-state:paused;
}
.cp_cssslider li {
width:300px;
height:200px;
position:absolute;
top:-200px;
list-style:none;
}
.cp_cssslider li:nth-child(1){
-webkit-animation:cycle1 25s linear infinite;
animation:cycle1 25s linear infinite;
}
.cp_cssslider li:nth-child(2){
-webkit-animation:cycle2 25s linear infinite;
animation:cycle2 25s linear infinite;
}
.cp_cssslider li:nth-child(3){
-webkit-animation:cycle3 25s linear infinite;
animation:cycle3 25s linear infinite;
}
.cp_cssslider li:nth-child(4){
-webkit-animation:cycle4 25s linear infinite;
animation:cycle4 25s linear infinite;
}
.cp_cssslider li:nth-child(5){
-webkit-animation:cycle5 25s linear infinite;
animation:cycle5 25s linear infinite;
}
@keyframes cycle1 {
0% { top:0px; }
4% { top:0px; }
16% { top:0px; opacity:1; z-index:0; }
20% { top:200px; opacity:0; z-index:0; }
21% { top:-200px; opacity:0; z-index:-1; }
50% { top:-200px; opacity:0; z-index:-1; }
92% { top:-200px; opacity:0; z-index:0; }
96% { top:-200px; opacity:0; }
100%{ top:0px; opacity:1; }
}
@keyframes cycle2 {
0% { top:-200px; opacity:0; }
16% { top:-200px; opacity:0; }
20% { top:0px; opacity:1; }
24% { top:0px; opacity:1; }
36% { top:0px; opacity:1; z-index:0; }
40% { top:200px; opacity:0; z-index:0; }
41% { top:-200px; opacity:0; z-index:-1; }
100%{ top:-200px; opacity:0; z-index:-1; }
}
@keyframes cycle3 {
0% { top:-200px; opacity:0; }
36% { top:-200px; opacity:0; }
40% { top:0px; opacity:1; }
44% { top:0px; opacity:1; }
56% { top:0px; opacity:1; z-index:0; }
60% { top:200px; opacity:0; z-index:0; }
61% { top:-200px; opacity:0; z-index:-1; }
100%{ top:-200px; opacity:0; z-index:-1; }
}
@keyframes cycle4 {
0% { top:-200px; opacity:0; }
56% { top:-200px; opacity:0; }
60% { top:0px; opacity:1; }
64% { top:0px; opacity:1; }
76% { top:0px; opacity:1; z-index:0; }
80% { top:200px; opacity:0; z-index:0; }
81% { top:-200px; opacity:0; z-index:-1; }
100%{ top:-200px; opacity:0; z-index:-1; }
}
@keyframes cycle5 {
0% { top:-200px; opacity:0; }
76% { top:-200px; opacity:0; }
80% { top:0px; opacity:1; }
84% { top:0px; opacity:1; }
96% { top:0px; opacity:1; z-index:0; }
100%{ top:200px; opacity:0; z-index:0; }
}
/* progressbar */
.cp_progressbar {
position:relative;
top:-5px;
width:680px;
height:5px;
background:#000000;
-webkit-animation:progressbar 25s ease-out infinite;
animation:progressbar 25s ease-out infinite;
}
/* animation */
@keyframes progressbar {
0%, 20%, 40%, 60%, 80%, 100% { width:0%; opacity:0; z-index:2; }
4%, 24%, 44%, 64%, 84% { width:0%; opacity:0.3; z-index:2; }
16%, 36%, 56%, 76%, 96% { width:100%; opacity:0.3; z-index:2; }
18%, 38%, 58%, 78%, 98% { width:100%; opacity:0; z-index:2; }
}
<div class="cp_cssslider">
<input type="radio" name="cp_switch" id="photo1" checked/>
<label for="photo1"><img src="img1.jpg" /></label>
<img src="img1.jpg" />
<input type="radio" name="cp_switch" id="photo2"/>
<label for="photo2"><img src="img2.jpg" /></label>
<img src="img2.jpg" />
<input type="radio" name="cp_switch" id="photo3"/>
<label for="photo3"><img src="img3.jpg" /></label>
<img src="img3.jpg" />
<input type="radio" name="cp_switch" id="photo4"/>
<label for="photo4"><img src="img4.jpg" /></label>
<img src="img4.jpg" />
<input type="radio" name="cp_switch" id="photo5"/>
<label for="photo5"><img src="img5.jpg" /></label>
<img src="img5.jpg" />
</div>
*, *:before, *:after {
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.cp_cssslider {
width: 300px;
padding-top: 200px; /* 画像の高さ */
position: relative;
margin: 2em auto;
text-align: center;
}
.cp_cssslider > img {
position: absolute;
left: 0;
top: 0;
transition: all 0.5s;
border-radius: 3px;
box-shadow:0px 0px 5px 0px rgba(0,0,0,0.3);
}
.cp_cssslider input[name='cp_switch'] {
display: none;
}
/* サムネイル */
.cp_cssslider label {
margin: 15px 5px 0 5px;
border: 2px solid #ffffff;
display: inline-block;
cursor: pointer;
transition: all 0.5s ease;
opacity: 0.6;
border-radius: 3px;
}
.cp_cssslider label:hover {
opacity: 0.9;
}
.cp_cssslider label img {
display: block;
width: 40px;
border-radius: 2px;
}
.cp_cssslider input[name='cp_switch']:checked + label {
border: 2px solid #FF7043;
opacity: 1;
}
.cp_cssslider input[name='cp_switch'] ~ img {
opacity: 0;
}
.cp_cssslider input[name='cp_switch']:checked + label + img {
opacity: 1;
}
CSS3などで新たに追加された要素・装飾方法など、日々コードを書いていないと忘れてしまったり、ささっとプロトタイプを作る時などちょっとしたことに時間をかけている暇はない。そんな時に「あ〜、あれストックしときゃよかったなぁ」って困った自分用のストックブログです。カスタマイズなどがしやすいよう、昨今のweb制作に取り入れられる一般的なコードを中心に掲載しています。
@copypet_jp More Info