纯CSS实现多图无限平滑循环滚动(通用方法)
<style>.artBox { margin: 20px auto; font: normal 18px/26px sans-serif; }
.artBox mark { padding: 2px 6px; background: #ccc; }
.artBox blockquote { padding: 14px; border: solid gray; border-width: 0 4px; border-radius: 10px; background: #ddd; }
.artBox p { margin: 10px 0; }
.tRed { color: red; }
</style>
<div class="artBox">
<p>核心原理解释(以水平方向滚动为例):</p>
<blockquote>
<ol>
<li>HTML标签结构:<span class="tRed">父容器 + 子容器(子容器装载双份相同的图片标签)</span>;</li>
<li>父容器固定宽高,相对定位</li>
<li>子容器绝对定位,高度100%,设置为不折行(<span class="tRed">white-space: nowrap;</span>);</li>
<li>图片高度100%,需要双份相同的图片标签;</li>
<li>子容器 animation 属性无限循环运行关键帧动画;</li>
<li>关键帧动画使用 <span class="tRed">transform: translateX(-50%)</span> 作为移动终点(子容器移动一半时,后续相同的图片标签跟在后面形成衔接而非断档——具体情况是与下一轮开始瞬间的图片重叠,达成无缝交替效果)。</li>
</ol>
</blockquote>
<p>应用实例:</p>
<div class="hEdiv" data-prev="1"><pre class="hEpre">
<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; /* 重要 :不折行,水平伸展 */
/* 动画周期时长应根据图片水平衔接的长度调整 */
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>
</pre></div>
<p>【说明】</p>
<ol>
<li>img标签 load="lazy" 属性设置意为图片懒加载,这对需要展示大量的图片时有节能作用:图片尚未进入屏幕可视区域时暂时不予加载,直到它们移动到可视区域;</li>
<li>需要自左向右滚动图片的,改造关键帧动画如下:
<div class="hEdiv" data-prev="1"><pre class="hEpre">
@keyframes scroll {
from { transform: translateX(-50%); }
to { transform: translateX(0%); }
}
</pre></div>
</li>
<li>需要图片在垂直方向上滚动的,可参照本示例做些必要的改造。</li>
</ol>
</div>
<script type="module">
import hl from 'https://638183.freep.cn/638183/web/js/hl.js';
const divs = document.querySelectorAll('.hEdiv');
const pres = document.querySelectorAll('.hEpre');
divs.forEach((div,idx) => hl.hl(div, pres));
</script> 收藏。学习。谢谢马老师!{:4_171:} 黑黑老师下午嚎!
这多张图片移动的代码很好,图片只限制高度不限宽度还设置了好看边框,可以改变移动方向。太赞了!{:4_199:} 学习了{:4_180:} 有原理有实例,通性通法可扩展,谢谢马老师讲授与示范{:4_180:} 模仿一个
<meta name="referrer" content="never" />
<style>
#pa {
width: 540px;
height: 800px;
border: 8px ridge gray;
overflow: hidden; /* 重要 :屏蔽溢出 */
position: relative; /* 重要 :相对定位 */
margin: auto;
--state: running; /* 动画开关 */
margin: auto;
&:hover {
--state: paused; /* 鼠标指针移动到 .pa 时暂停动画 */
}
#son {
position: absolute; /* 重要 :绝对定位 */
width: 100%; /* 百分百宽度 */
/** white-space: nowrap;垂直滚动就不需要了 */
/* 动画周期时长应根据图片水平衔接的长度调整 */
animation: scroll 200s linear infinite var(--state);
img {
width: 100%; /* 图片宽度与容器一致(高度自适应)*/
margin: 3px 0px; /* 图片之间的上下距离 */
}
}
}
/******************* move up ******************************/
@keyframes scroll {
to { transform: translateY(-50%); }
}
/*************** move down *******************************
@keyframes scroll {
from { transform: translateY(-50%); }
to { transform: translateY(0%); }
}
********************************************************/
</style>
<div id="pa">
<div id="son">
<!-- 双份一模一样的图片标签 -->
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6OlgMLSFiahNfEcJt4SppMofYXcxo8VYf0GLTNBGmnBN080yH85kcziaMyDSZndoCrB26PST2lxyhMlypYmibu98KD16LVPicoYO4Kg/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OlmvqblXCmORHSgibgcQyKDWQVGgQ8S8iam6jsxxMpopkL6097QrDpqZvzvkZwFr0QEWjSvJGvSWG9PVq7fVtiaOK6cibb6RsODDKM/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6On8mF67pJ6qu9rcPtelNI3HSr5lkyRMH7ORPFQXDlrLibhpSfkXdpia7KZ3N7kHzONeTmTbtiaQbwicwz1nJhVHsuJSxSiaHd0xcsWM/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_jpg/dVs9AHZr6OnicSiaUL3xsfL1FoqsRkShQOvtpic09FcQMILSwydhH06DuyWsUPgy6FnkboZyGiamwAOyjVJicSsiadjW4owq3Qbj3PDeEAMmydeibc/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6Ok85KrCOKVCp4fWae7cicnC4x2vWT6WNgBdnDa0iaWHfey36VKqLuaFUvWtmAuicYzbQM3ZaxarrTJDYH4jul2swvibibfhcOYwyYwI/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6OnqviaPz3lcOEsxUMsVTzU8sqNBACBfM04yT6HBHJ4Hw6tiaiaiaLk9pkkbrYHxJ0iay7QXjtoCrgKa7yNlr9STy0VDEovSvkDSGMnc/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OnOPhafiapF9GGaBtnQQ4oNGlYoMkiaXj6wz5JVsLicwtdA1dPLBHT8Qhfkng3mtVjFmzRC0uw4A89SGowo0mNZfxHu7Uuc1qiasHA/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OnZVkWBv8phyhkzBrwMHApA2S9sh5iaeDYrjBTxRTkSeiaiaNZIY2Dnw9VJy1R7oD4KQJVSMpcsylwVEP4fkRNkKxtUibn8aGnysM8/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6OnT6y2yWxXSiceZHYRtzh6JET6e48C09z9nyFTEB1nZvGD6ZAuxWs6TSxf4kcQUqgJ6lUO2ee09Fu8Jth2uZ8EgZstaMEQoKgWc/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OnpgRibhVouj5Jx1yCsMMUTsDyqQibw3l4VoApBKoA1wFcbjUdzja5uHYbaXGme2vEKBRYo4ibbGGhkBrFKQU4tltp2bpGQHIASwg/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OkVAWvMV62hddDkZP3IydLBGNS9pFACOG6GgRiawFIeyebQLY3AqS8XISNic7vK8pUrQ2SOxIq2333VRhoIDCK3ice6ZEVpR11cSs/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6Ok8tWJzrOWc1q6gvXX8GTpKsfvOYiau9Epv9xSIovz43cCtjicJ8sBAicInIjofOma6XvJ6TKVapbG7wgce8vdmtrWtmQZibVseem0/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6Ol59gqwTX3NxLRHDeh0jyZpM3ibNUrjTgFqbtJtht0mHKlbezgX6CxxqhMGqa3Eo9jLVCocbV6EH7R7qG5KUnI1VyibwoXFF3ZGw/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6OkmEwF2AnC1n4r42a0Inu4UrHjQlPsficEiaLEr5FicRGx1Gs65JgQrz9uSm6jXFss6DSwibmIVHtAVjTl6wMgssEOsWvxQz2KiaRQ8/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OnNPVyfo8wWyL3zxL9x8QDWuMdhzeKE5uoEtauSToibhL4dkAXWKIvbVdsfRrnCicoFh1xE0EMiccObXycqNZIbjfGGiaLenmzBia4U/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OnicG9qtntQPo7iaJwcibgla3P3mMov0yfWCnPx75wYjIj6j29uj9WFcak8YX4gX2mJovTZwbYoIRe5xPEdtRtgtSWOnent82t3DA/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6OlDSZLSibbUGqy3ibFG6icIVu8aWVGiav3pSdhXB6zKcCmzTGNGzDUGOVTQ9OSqribiaza5qJrfttqW0UI1Ax6hJiapCdgLibmtc3BkAAc/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6Ok29x35yJ7RNZawg49ZdQq44zWib1ibZP6F5A0hUm2QhKDwP4a0ibQgib2tza8fZ4TNy4xru6pkNK6nakzlNMzgwXPQ0e8iaPMS30Y0/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6OmYpf7ia30xGxVgfQOJDIMvpnEiabibzRpsJW7L624wXIvQ4RFq2VSx9RH456pyBOgVibUXlibxhZqDkRCqaicz0CicdOegMHk5zeuzLM/640" load='lazy' />
<!----------------------------------------------------------------------------------------------------------------------------------------------------------------->
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6OlgMLSFiahNfEcJt4SppMofYXcxo8VYf0GLTNBGmnBN080yH85kcziaMyDSZndoCrB26PST2lxyhMlypYmibu98KD16LVPicoYO4Kg/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OlmvqblXCmORHSgibgcQyKDWQVGgQ8S8iam6jsxxMpopkL6097QrDpqZvzvkZwFr0QEWjSvJGvSWG9PVq7fVtiaOK6cibb6RsODDKM/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6On8mF67pJ6qu9rcPtelNI3HSr5lkyRMH7ORPFQXDlrLibhpSfkXdpia7KZ3N7kHzONeTmTbtiaQbwicwz1nJhVHsuJSxSiaHd0xcsWM/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_jpg/dVs9AHZr6OnicSiaUL3xsfL1FoqsRkShQOvtpic09FcQMILSwydhH06DuyWsUPgy6FnkboZyGiamwAOyjVJicSsiadjW4owq3Qbj3PDeEAMmydeibc/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6Ok85KrCOKVCp4fWae7cicnC4x2vWT6WNgBdnDa0iaWHfey36VKqLuaFUvWtmAuicYzbQM3ZaxarrTJDYH4jul2swvibibfhcOYwyYwI/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6OnqviaPz3lcOEsxUMsVTzU8sqNBACBfM04yT6HBHJ4Hw6tiaiaiaLk9pkkbrYHxJ0iay7QXjtoCrgKa7yNlr9STy0VDEovSvkDSGMnc/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OnOPhafiapF9GGaBtnQQ4oNGlYoMkiaXj6wz5JVsLicwtdA1dPLBHT8Qhfkng3mtVjFmzRC0uw4A89SGowo0mNZfxHu7Uuc1qiasHA/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OnZVkWBv8phyhkzBrwMHApA2S9sh5iaeDYrjBTxRTkSeiaiaNZIY2Dnw9VJy1R7oD4KQJVSMpcsylwVEP4fkRNkKxtUibn8aGnysM8/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6OnT6y2yWxXSiceZHYRtzh6JET6e48C09z9nyFTEB1nZvGD6ZAuxWs6TSxf4kcQUqgJ6lUO2ee09Fu8Jth2uZ8EgZstaMEQoKgWc/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OnpgRibhVouj5Jx1yCsMMUTsDyqQibw3l4VoApBKoA1wFcbjUdzja5uHYbaXGme2vEKBRYo4ibbGGhkBrFKQU4tltp2bpGQHIASwg/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OkVAWvMV62hddDkZP3IydLBGNS9pFACOG6GgRiawFIeyebQLY3AqS8XISNic7vK8pUrQ2SOxIq2333VRhoIDCK3ice6ZEVpR11cSs/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6Ok8tWJzrOWc1q6gvXX8GTpKsfvOYiau9Epv9xSIovz43cCtjicJ8sBAicInIjofOma6XvJ6TKVapbG7wgce8vdmtrWtmQZibVseem0/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6Ol59gqwTX3NxLRHDeh0jyZpM3ibNUrjTgFqbtJtht0mHKlbezgX6CxxqhMGqa3Eo9jLVCocbV6EH7R7qG5KUnI1VyibwoXFF3ZGw/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6OkmEwF2AnC1n4r42a0Inu4UrHjQlPsficEiaLEr5FicRGx1Gs65JgQrz9uSm6jXFss6DSwibmIVHtAVjTl6wMgssEOsWvxQz2KiaRQ8/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OnNPVyfo8wWyL3zxL9x8QDWuMdhzeKE5uoEtauSToibhL4dkAXWKIvbVdsfRrnCicoFh1xE0EMiccObXycqNZIbjfGGiaLenmzBia4U/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6OnicG9qtntQPo7iaJwcibgla3P3mMov0yfWCnPx75wYjIj6j29uj9WFcak8YX4gX2mJovTZwbYoIRe5xPEdtRtgtSWOnent82t3DA/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6OlDSZLSibbUGqy3ibFG6icIVu8aWVGiav3pSdhXB6zKcCmzTGNGzDUGOVTQ9OSqribiaza5qJrfttqW0UI1Ax6hJiapCdgLibmtc3BkAAc/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/mmbiz_png/dVs9AHZr6Ok29x35yJ7RNZawg49ZdQq44zWib1ibZP6F5A0hUm2QhKDwP4a0ibQgib2tza8fZ4TNy4xru6pkNK6nakzlNMzgwXPQ0e8iaPMS30Y0/640" load='lazy' />
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/dVs9AHZr6OmYpf7ia30xGxVgfQOJDIMvpnEiabibzRpsJW7L624wXIvQ4RFq2VSx9RH456pyBOgVibUXlibxhZqDkRCqaicz0CicdOegMHk5zeuzLM/640" load='lazy' />
</div>
</div>
“动画周期时长应根据图片水平衔接的长度调整”,这句没看懂,这个周期数字是怎么得来的呢?{:4_203:} 红影 发表于 2026-8-5 17:45
“动画周期时长应根据图片水平衔接的长度调整”,这句没看懂,这个周期数字是怎么得来的呢?
自己调整,快了就调长一点的时间,反之减少时间。
原理是时间、速度与距离的关系。图片衔接起来越长,跑一轮的周期时长不能太短,否则移动速度会很快。 杨帆 发表于 2026-8-5 15:05
有原理有实例,通性通法可扩展,谢谢马老师讲授与示范
这个案例网上都有,可能是我把原理讲得透一些或者通俗一些 梦江南 发表于 2026-8-5 14:16
这多张图片移动的代码很好,图片只限制高度不限宽度还设置了好看边框,可以改变移动方向。太赞了!{:4_199: ...
这个应该是容易学到做到的吧 梦江南 发表于 2026-8-5 14:18
学习了
{:4_190:} 魏淑芬 发表于 2026-8-5 14:06
收藏。学习。谢谢马老师!
{:4_191:} 梦江南 发表于 2026-8-5 14:11
黑黑老师下午嚎!
都嚎都嚎 马老师晚上好~~
这真是个好东东,很感谢有您的分享!我跑了一下,特别顺畅,而且更容易掌控调整。先抱走后制作。辛苦了,祝安好!{:4_204:}{:4_190:}
马黑黑 发表于 2026-8-5 18:41
这个案例网上都有,可能是我把原理讲得透一些或者通俗一些
是,把原理讲得透一些或者通俗一些并不容易呢,谢谢马老师{:4_190:} 杨帆 发表于 2026-8-5 19:43
是,把原理讲得透一些或者通俗一些并不容易呢,谢谢马老师
感谢支持 霜染枫丹 发表于 2026-8-5 19:41
马老师晚上好~~
这真是个好东东,很感谢有您的分享!我跑了一下,特别顺畅,而且更容易掌控调整。先抱走 ...
这个也可以用来发布你的拍摄作品 马黑黑 发表于 2026-8-5 20:23
这个也可以用来发布你的拍摄作品
我今晚就做一个,用处很多,图文中视频中的画中画,PPT中的场景说明,太完美了!!{:4_190:}{:4_199:}
霜染枫丹 发表于 2026-8-5 20:50
我今晚就做一个,用处很多,图文中视频中的画中画,PPT中的场景说明,太完美了!!
用途确实广泛
页:
[1]
2