【问题标题】:Adding more images to pure CSS slider向纯 CSS 滑块添加更多图像
【发布时间】:2018-02-02 15:36:37
【问题描述】:

我想了解这个纯 CSS 滑块背后的数学原理是如何工作的? https://codepen.io/dudleystorey/pen/kFoGw?limit=all&page=1&q=image+slider

我的目标是把它变成一个七图像滑块。

例如,每次我将另一个图像添加到旋转中时,它都会弄乱滑块(两个图像堆叠在一起。)我想了解计算,因此每个图像都会以滑块的全宽显示30 多岁。

@import url(https://fonts.googleapis.com/css?family=Istok+Web);
@keyframes slidy {
    0% { left: 0%; }
    20% { left: 0%; }
    25% { left: -100%; }
    45% { left: -100%; }
    50% { left: -200%; }
    70% { left: -200%; }
    75% { left: -300%; }
    95% { left: -300%; }
    100% { left: -400%; }
     }
* {
    box-sizing: border-box;
}
body, figure { 
   margin: 0; background: #101010;
   font-family: Istok Web, sans-serif;
   font-weight: 100;
}
div#captioned-gallery { 
   width: 100%; overflow: hidden; 
}
figure.slider { 
  position: relative; width: 500%;
  font-size: 0; animation: 30s slidy infinite; 
}
figure.slider figure { 
  width: 20%; height: auto;
  display: inline-block;  position: inherit; 
 }
figure.slider img { width: 100%; height: auto; }
figure.slider figure figcaption { 
 position: absolute; bottom: 0;
 background: rgba(0,0,0,0.4);
 color: #fff; width: 100%;
 font-size: 2rem; padding: .6rem; 
}
<base href="https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/">
<div id="captioned-gallery">
<figure class="slider">
    <figure>
        <img src="hobbiton-lake.jpg" alt>
        <figcaption>Hobbiton, New Zealand</figcaption>
    </figure>
    <figure>
        <img src="wanaka-drowned-tree.jpg" alt>
        <figcaption>Wanaka, New Zealand</figcaption>
    </figure>
    <figure>
        <img src="utah-peak.jpg" alt>
        <figcaption>Utah, United States</figcaption>
    </figure>
    <figure>
        <img src="bryce-canyon-utah.jpg" alt>
        <figcaption>Bryce Canyon, Utah, United States</figcaption>
    </figure>
    <figure>
        <img src="hobbiton-lake.jpg" alt>
        <figcaption>Hobbiton, New Zealand</figcaption>
    </figure>
    </figure>
    </div>

【问题讨论】:

  • 基本上每张幻灯片您需要将left 移动-100%left 保持不变的百分比是滑块在继续移动之前在该幻灯片上花费的时间。因此,如果您想添加另一张幻灯片,则需要转到 left:-500% 并重新分配左侧下方的百分比,您可能还希望将额外幻灯片的动画时间从 30 秒增加到 35 秒
  • 这是一个更新的 7 个图像的滑块,其中有几个 cmets 对我所做的更改:codepen.io/anon/pen/…

标签: css


【解决方案1】:

如果您想向滑块添加更多图像,请向滑块类添加更多 &lt;figures&gt;&lt;/figures&gt; 标签。例如:

<figure>
    <img src="YOUR_IMAGE_HERE.jpg" alt>
    <figcaption>NEW IMAGE, FOUND IN YOUR FOLDER</figcaption>
</figure>

请记住将其保存在 &lt;figure class="slider"&gt; &lt;/figure&gt; 中。在您的 CSS 中,您还可以找到动画应该使用多少秒的代码。这就是您可以扩展/减少每张幻灯片的限制的方法。

【讨论】:

  • 规范,感谢您的反馈。当我向 html 添加另一个图形(图像+标题)时,滑块会中断。我假设这是因为 CSS 是为 5 个图像编写的。我想知道 CSS 中使用了什么计算来使 5 张图像以 30 秒的速度全屏滑动(一次一张)?
  • 是的,CSS 是为 5 张图片编写的。要更改它,您需要编辑关键帧。我可以看到在我下面评论的保罗已经完成了最后一个问题。
【解决方案2】:

这是我的分析。在 30 秒内显示 5 个相同宽度的图像。将 100% 的动画时间除以 5 个图像:100%/5 = 20%。您还会注意到有 5% 的跳跃。我不确定,但我认为这只是为了获得更流畅的动画(即从 20% 到 25%,图像“稳定下来”)。所以说如果你需要 6 张图片,那么每张图片之间应该有 100%/6 = 16.67% 的跳跃。

@keyframes slidy {
  0% { left: 0%; }
  20% { left: 0%; }      // +20%
  25% { left: -100%; }
  45% { left: -100%; }   // +20%
  50% { left: -200%; }
  70% { left: -200%; }   // +20%
  75% { left: -300%; }
  95% { left: -300%; }   // +20%
  100% { left: -400%; }
}

【讨论】:

    【解决方案3】:

    首先,原图只有四张(不同!)图片,需要五张图(第一张和最后一张相同)才能达到无休止滑动的效果。

    然后,您需要将figure.slider 的宽度设置为 700%(7 个而不是 5 个数字)并为滑动动画添加四个额外的关键帧。现在,四个图像中的每一个在 20% 的动画中都保持可见,而过渡则各占 5%(乘以 4 = 20%);这给出了动画长度的 100%。 您需要将其划分为六个不同图像的漂亮片段,例如0, 13, 17, 30, 34, 47, 51, 64, 68, 81, 85, 97, 100(注意:它不完全均匀但足够接近)。最后,调整百分比偏移量。

    现在,在滑块中添加两个额外的图形元素(最好在中间的某个位置),然后就可以了。

    DEMO(我将标题移到顶部并输入了数字。现在您可以清楚地看到带有六张不同图像的滑块。)

    【讨论】:

    • 谢谢保罗,这非常有帮助。因此,我需要将 figure.slider 的宽度设置为 800%(7 个不同图像的 8 个数字),然后除以 100/7 以获得关键帧段。每个段应该是 14.285,这会在屏幕上留下 11% 的秒数和 3% 的过渡? codepen.io/shannon-hart82/pen/BYjZzjSomething 关闭了我的关键帧。 ——
    • 你需要根据实际的元素个数(也就是8个)来设置每个图形的宽度,即figure.slider figure { width: 12.5%; }。然后就可以了。
    猜你喜欢
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多