核心
滚动:
animation: 动画名称 20s linear infinite normal;
停止:
animation: 动画名称 20s linear infinite paused;
完整例子:
html:
<div class="carousel-wrapper">
<div class="carousel">
<div class="item"><img src="https://logo.clearbit.com/apple.com" alt="apple"></div>
<div class="item"><img src="https://logo.clearbit.com/google.com" alt="Google"></div>
<div class="item"><img src="https://logo.clearbit.com/amazon.com" alt="Amazon"></div>
<div class="item"><img src="https://logo.clearbit.com/microsoft.com" alt="Microsoft"></div>
<div class="item"><img src="https://logo.clearbit.com/facebook.com" alt="Facebook"></div>
<div class="item"><img src="https://logo.clearbit.com/netflix.com" alt="Netflix"></div>
<div class="item"><img src="https://logo.clearbit.com/tesla.com" alt="Testla"></div>
<div class="item"><img src="https://logo.clearbit.com/nike.com" alt="Nike"></div>
<div class="item"><img src="https://logo.clearbit.com/adidas.com" alt="Addidas"></div>
<div class="item"><img src="https://logo.clearbit.com/coca-cola.com" alt="Coca-Cola"></div>
<!-- we need to add duplicate elements to make up the space - this needs to be magic numbered according to size of elements and width of container -->
<div class="item"><img src="https://logo.clearbit.com/apple.com" alt="apple"></div>
<div class="item"><img src="https://logo.clearbit.com/google.com" alt="Google"></div>
<div class="item"><img src="https://logo.clearbit.com/amazon.com" alt="Amazon"></div>
<div class="item"><img src="https://logo.clearbit.com/microsoft.com" alt="Microsoft"></div>
</div>
</div>
css:
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root{
--bg-clr: #64748B;
}
body {
min-height: 100svh;
display: grid;
place-content: center;
background-color: var(--bg-clr);
}
.carousel-wrapper {
--width: 100px;
--gap: 0;
--num-items: 10;
--ani-offset: calc(var(--width) * var(--num-items) * -1);
--ani-speed: 10s;
width: 400px;
overflow: hidden;
position: relative;
}
.carousel-wrapper::before,
.carousel-wrapper::after{
content: '';
position: absolute;
width: 20%;
height: 100%;
z-index: 1;
top: 0;
}
.carousel-wrapper::before{
left: 0;
background-image: linear-gradient(to right,var(--bg-clr) 0%,transparent 50%);
}
.carousel-wrapper::after{
right: 0;
background-image: linear-gradient(to left,var(--bg-clr) 0%,transparent 50%);
}
.carousel {
display: flex;
align-items: center;
animation: slide var(--ani-speed) linear infinite normal;
}
.carousel:hover {
animation: slide var(--ani-speed) linear infinite paused;
}
.item{
flex: 1 0 var(--width);
text-align: center;
padding:1rem;
}
.item:last-child{
/*background: red;*/
}
.item > img{
width: 100%;
height: auto;
object-fit: cover;
}
@keyframes slide {
100% {
transform: translateX(var(--ani-offset));
}
}