CSS animation未展示全部成员卡片问题及循环滚动需求
解决方案:团队名片无缝滚动修复
问题根源
原代码给每个独立卡片添加了动画,每个卡片仅移动自身宽度的距离就重置,导致无法完整展示所有卡片。要实现完整滚动+无缝循环,需要将动画应用到整个卡片组,而非单个卡片。
修改后的完整代码
CSS 部分
.team-profile-card-container { white-space: nowrap; overflow: hidden; position: relative; } /* 新增卡片包裹层,用于承载动画 */ .team-cards-wrapper { display: inline-block; animation: slideRightToLeft 15s linear infinite; } .team-profile-card { display: inline-block; width: 200px; margin-right: 20px; border: 1px solid transparent; } /* 修改动画目标为整个卡片组的宽度 */ @keyframes slideRightToLeft { 0% { transform: translateX(0); } 100% { /* 移动距离等于整个卡片组的宽度,实现完整滚动 */ transform: translateX(-100%); } } .team-profile-card-content { background-color: #f8f9fa; border-radius: 10px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); padding: 20px; position: relative; overflow: hidden; } .team-profile-img { width: 150px; height: 150px; border-radius: 50%; overflow: hidden; margin: 0 auto 20px; transition: transform 0.3s; } .team-profile-img:hover { transform: scale(1.1); box-shadow: 0 0 20px rgba(0, 0, 0, 0.2); } .team-profile-name { font-size: 18px; font-weight: bold; margin-bottom: 10px; } .team-profile-title { font-size: 14px; color: #6c757d; margin-bottom: 20px; } .social-icons { position: absolute; bottom: 10px; left: 50%; transform: translateX(-50%); opacity: 0; transition: opacity 0.3s; } .team-profile-card:hover .social-icons { opacity: 1; } .team-profile-card-container:hover .team-cards-wrapper { animation-play-state: paused; } .team-profile-card:hover { border-color: orangered; } .social-icons a { color: #007bff; font-size: 16px; margin: 0 5px; transition: color 0.3s; } .social-icons a:hover { color: #0056b3; }
HTML 部分
<h2 class="module-title font-alt">Our Team Members</h2> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css"> <div class="container mt-5"> <div class="row justify-content-center"> <div class="col-md-12"> <div class="team-profile-card-container"> <!-- 新增包裹层,包含所有卡片 --> <div class="team-cards-wrapper"> <div class="team-profile-card"> <div class="team-profile-card-content text-center p-4"> <div class="team-profile-img"> <img src="https://themewagon.github.io/warehouse/images/person_3.jpg" class="img-fluid" alt="Profile Picture"> </div> <div class="team-profile-name">Avinash Singh</div> <div class="team-profile-title">Web Developer</div> <div class="social-icons"> <a href="#"><i class="fab fa-facebook"></i></a> <a href="#"><i class="fab fa-instagram"></i></a> <a href="#"><i class="fab fa-linkedin"></i></a> </div> </div> </div> <!-- 这里放置所有其他团队成员卡片 --> <div class="team-profile-card"> <div class="team-profile-card-content text-center p-4"> <div class="team-profile-img"> <img src="https://themewagon.github.io/warehouse/images/person_3.jpg" class="img-fluid" alt="Profile Picture"> </div> <div class="team-profile-name">Pallavi</div> <div class="team-profile-title">Sales</div> <div class="social-icons"> <a href="#"><i class="fab fa-facebook"></i></a> <a href="#"><i class="fab fa-instagram"></i></a> <a href="#"><i class="fab fa-linkedin"></i></a> </div> </div> </div> </div> <!-- 复制一份卡片组,实现无缝循环 --> <div class="team-cards-wrapper"> <div class="team-profile-card"> <div class="team-profile-card-content text-center p-4"> <div class="team-profile-img"> <img src="https://themewagon.github.io/warehouse/images/person_3.jpg" class="img-fluid" alt="Profile Picture"> </div> <div class="team-profile-name">Avinash Singh</div> <div class="team-profile-title">Web Developer</div> <div class="social-icons"> <a href="#"><i class="fab fa-facebook"></i></a> <a href="#"><i class="fab fa-instagram"></i></a> <a href="#"><i class="fab fa-linkedin"></i></a> </div> </div> </div> <!-- 同样复制所有其他团队成员卡片 --> <div class="team-profile-card"> <div class="team-profile-card-content text-center p-4"> <div class="team-profile-img"> <img src="https://themewagon.github.io/warehouse/images/person_3.jpg" class="img-fluid" alt="Profile Picture"> </div> <div class="team-profile-name">Pallavi</div> <div class="team-profile-title">Sales</div> <div class="social-icons"> <a href="#"><i class="fab fa-facebook"></i></a> <a href="#"><i class="fab fa-instagram"></i></a> <a href="#"><i class="fab fa-linkedin"></i></a> </div> </div> </div> </div> </div> </div> </div> </div>
关键修改说明
- 动画载体变更:将动画从单个卡片移到包裹所有卡片的
.team-cards-wrapper上,确保整个卡片组同步滚动。 - 无缝循环实现:复制一份完整的卡片组放在原卡片组后面,当第一组完全滚出容器时,第二组刚好衔接,视觉上实现无限循环。
- 动画参数调整:
- 动画时长
15s可根据卡片数量调整:卡片越多,时长应越长,保证滚动速度均匀。 - 动画终点设为
translateX(-100%),即滚动整个卡片组的宽度,确保所有卡片都能完整展示。
- 动画时长
- 交互适配:将暂停动画的目标从
.team-profile-card改为.team-cards-wrapper,保持hover暂停的交互逻辑正常。
内容的提问来源于stack exchange,提问作者Rahul Verma
相关产品推荐
相关产品推荐

