我正在设计一个HTML + CSS滑块,幻灯片和无限持续时间之间自动转换。我有 这个滑块在不同的页面上有不同的内容(和div的数量),所以我需要 为一切编写相同的代码。
<div class="slide-container">
<div class="slide">div 1 goes here!</div>
<div class="slide">div 2 goes here!</div>
<div class="slide">div 3 goes here!</div>
</div>
我已经开始使用这个CSS代码,尝试使用不同的动画,但我不知道如何做到这一点
.slide-container {
-webkit-animation: transition 2s infinite linear;
-moz-animation: transition 2s infinite linear;
-o-animation: transition 2s infinite linear;
}
编辑:这是我用来解决问题的最后一次转换:
@-webkit-keyframes animation {
20%,30% {-webkit-transform: translate(100%);}
70%,100% {-webkit-transform: translate(-100%);}
}
我想在屏幕上获得一个div为5-10秒,并且div之间的转换为2秒(在括号div中,此时必须在屏幕上,宽度= 100%,高度= 50px):
( - start-DIV1 5s) - 2s - &gt;(DIV2 5s) - 2s - &gt; ...--&gt;(DIVN 5s) - 2s - &gt;(DIV1 5s) - &GT; ...
我使用CSS做滑块的原因是因为我试图避免使用JavaScript和JQuery函数。
答案 0 :(得分:2)
定义12s
的地方是总幻灯片时间。这除以幻灯片的数量(在此演示中为3),在此示例中为我们提供了4s
幻灯片。这是一种可以切换幻灯片时间的方法。但就像你提到的另一张海报一样,你仍然需要定制一下。我的方法演示了一种水平滑动方法,具有平滑过渡和快速加载时间。无论如何,纯CSS3就是您的追随者。
CSS3电源:
body {
padding: 1em;
background: #999
}
.scrollable {
width: 333px;
margin: 0 auto;
padding: 0;
border:10px solid #fff;
background: #000;
position: relative;
overflow: hidden;
text-align: center;
}
img {
max-width: 333px;
margin: 0;
float:left;
}
.items {
width:999px;
-webkit-animation: hscroll 12s infinite;
-moz-animation: hscroll 12s infinite;
-ms-animation: hscroll 12s infinite;
}
@-webkit-keyframes hscroll {
0% { margin-left: 0; }
27.33% { margin-left: 0 }
33.33% { margin-left: -333px; }
60.66% { margin-left: -333px; }
66.66% { margin-left: -666px; }
94.99% { margin-left: -666px; }
100% { margin-left: 0 }
}
@-moz-keyframes hscroll {
0% { margin-left: 0; }
27.33% { margin-left: 0 }
33.33% { margin-left: -333px; }
60.66% { margin-left: -333px; }
66.66% { margin-left: -666px; }
94.99% { margin-left: -666px; }
100% { margin-left: 0 }
}
@-ms-keyframes hscroll {
0% { margin-left: 0; }
27.33% { margin-left: 0 }
33.33% { margin-left: -333px; }
60.66% { margin-left: -333px; }
66.66% { margin-left: -666px; }
94.99% { margin-left: -666px; }
100% { margin-left: 0 }
}
&#13;
<div class="scrollable">
<div class="items">
<img src="http://placehold.it/333x500/E8117F/FFFFFF&text=Horizontal"/>
<img src="http://placehold.it/333x500/FFFFFF/E8117F&text=css3"/>
<img src="http://placehold.it/333x500/3D668F/FFFFFF&text=slide show"/>
</div>
</div>
&#13;
答案 1 :(得分:0)
这是一个快速演示,演示了您需要使用的一些技术。我使用了您提供的相同HTML标记。这不是一个随时可用的“复制和粘贴”解决方案 - 您需要花些时间来理解代码并将该概念应用于您的特定用例。
该技术主要涉及并排排列所有滑块,然后每隔几秒移动整行。边缘将被裁剪,以便一次只显示一张幻灯片。
首先,您需要通过对.slide-container
元素应用宽度和高度来定义“查看区域”的大小。然后将overflow: hidden
应用于容器,以便不显示不在“查看区域”中的幻灯片。
每张幻灯片都应填充“查看区域”,因此对每个.slide
元素应用100%的宽度和高度。您还需要将它们显示为inline-block
元素,以便它们并排排列,但仍然可以填充其容器。
最后,困难的部分:定义动画。关键帧动画是基于百分比的。基本上,由于有三张幻灯片,我们想要在经过33%的动画后再次切换,再次在66%之后切换,并在100%之后返回到开头。我们想要一个平滑的“幻灯片”,所以我们将实际转换总共持续5% - 所以第一个实际开始时为28%,结束时为33%。关键帧代码如下所示:
@keyframes slide {
/* modify percentages to match how many items you have */
0% { margin-left: 0; } /* initial position */
/* (stays in first position ) */
28.333% { margin-left: 0; } /* start sliding */
33.333% { margin-left: -100%; } /* done sliding */
/* (stays in second position ) */
61.667% { margin-left: -100%; } /* start sliding */
66.667% { margin-left: -200%; } /* done sliding */
/* (stays in third position ) */
95% { margin-left: -200%; } /* start sliding */
100% { margin-left: 0; } /* done sliding - back to initial position */
}
它可以像这样应用于第一张幻灯片(根据需要调整过渡时间):
.slide:first-of-type {
animation: slide 10s ease;
animation-iteration-count: infinite;
}
完成此操作后,您只需根据自己的喜好进行调整即可。试用幻灯片持续时间和过渡类型。也许改变动画最后重复的方式。当您将鼠标悬停在“查看窗口”上时,甚至可以使用animation-play-state
属性暂停动画。我在下面提供了一个完整的演示,其中包括悬停到暂停功能。如果您不是100%清楚其工作原理,请尝试从overflow: hidden
元素中删除.slide-container
属性。
@keyframes slide {
0% { margin-left: 0; }
28.333% { margin-left: 0; }
33.333% { margin-left: -100%; }
61.667% { margin-left: -100%; }
66.667% { margin-left: -200%; }
95% { margin-left: -200%; }
100% { margin-left: 0; }
}
.slide-container {
overflow: hidden; /* try commenting this line out! */
width: 150px;
height: 100px;
border: 1px solid #000000;
}
.slide {
display: inline-block;
width: 100%;
height: 100%;
}
.slide:first-of-type {
animation: slide 10s ease;
animation-iteration-count: infinite;
}
.slide-container:hover .slide:first-of-type {
animation-play-state: paused;
}
<div class="slide-container">
<div class="slide" style="background: #ff0000">div 1 goes here!</div><div class="slide" style="background: #00ff00">div 2 goes here!</div><div class="slide" style="background: #0000ff">div 3 goes here!</div>
</div>
以下是jsFiddle上的相同演示。