纯CSS实现多图无限平滑循环滚动

位置: 首页 > 代码集锦
[发布: 2026.8.5  作者: 马黑  阅读: 18]

核心原理解释(以水平方向滚动为例):

  1. HTML标签结构:父容器 + 子容器(子容器装载双份相同的图片标签)
  2. 父容器固定宽高,相对定位
  3. 子容器绝对定位,高度100%,设置为不折行(white-space: nowrap;);
  4. 图片高度100%,需要双份相同的图片标签;
  5. 子容器 animation 属性无限循环运行关键帧动画;
  6. 关键帧动画使用 transform: translateX(-50%) 作为移动终点(子容器移动一半时,后续相同的图片标签跟在后面形成衔接而非断档——具体情况是与下一轮开始瞬间的图片重叠,达成无缝交替效果)。

应用实例:

<style>
    .pa {
        width: 1024px;
        height: 600px;
        border: 8px dotted gray;
        overflow: hidden; /* 重要 :屏蔽溢出 */
        position: relative; /* 重要 :相对定位 */
        margin: auto;
        --state: running; /* 动画开关 */
    }
    .pa:hover {
        --state: paused; /* 鼠标指针移动到 .pa 时暂停动画 */
    }
    .son {
        position: absolute; /* 重要 :绝对定位 */
        height: 100%; /* 百分百高度 */
        white-space: nowrap; /* 重要 :不折行,水平伸展 */
        will-change: transform;
        /* 动画周期时长应根据图片水平衔接的长度调整 */
        animation: scroll 28s linear infinite var(--state);
    }
    .son img {
        height: 100%; /* 图片高度与容器一致(宽度自适应)*/
        margin: 0 6px; /* 图片之间的左右距离 */
    }
    @keyframes scroll {
        to { transform: translateX(-50%); }
    }
</style>

<div class="pa">
    <div class="son">
        <!-- 双份一模一样的图片标签 -->
        <img src="https://638183.freep.cn/638183/Pic/38/3-1.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-2.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-3.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-4.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-5.jpg" load="lazy" alt="" />
        
        <img src="https://638183.freep.cn/638183/Pic/38/3-1.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-2.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-3.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-4.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-5.jpg" load="lazy" alt="" />
    </div>
</div>
<p style="text-align: center;">鼠标指针移动到上面方框可暂停动画</p>
    

【说明】

  1. img标签 load="lazy" 属性设置意为图片懒加载,这对需要展示大量的图片时有节能作用:图片尚未进入屏幕可视区域时暂时不予加载,直到它们移动到可视区域;
  2. 需要自左向右滚动图片的,改造关键帧动画如下:
    @keyframes scroll {
        from { transform: translateX(-50%); }
        to { transform: translateX(0%); }
    }
    
  3. 需要图片在垂直方向上滚动的,可参照本示例做些必要的改造。

前一篇: CSS offset-path 属性之几何图形路径
下一篇: 没有了

发表评论:

  
 

评论列表 [0条]

Copyright © 2023 All Right Reserved 马黑PHP文章管理整站系统v1.8
联系我们: gxblk@163.com