CSS动画(轮播图)

1.整体效果

https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa78enaFEibNNCoXO9Hr2PI7boFTRgZHl3icicXwzLGLTQPxClhQAQiabWL41pTOQLLwgOBlbGrzq1Rwtw/640?wx_fmt=gif&from=appmsg&wxfrom=13

轮播图是一种常见的视觉元素,用于展示图片、信息或故事。CSS轮播图动画通过平滑的过渡效果和动态的视觉表现,极大地增强了轮播图的吸引力和用户体验。本文将探讨如何使用CSS来创建一个响应灵敏、动画流畅的轮播图,让网站内容的展示更加生动和有趣。

2.完整代码

HTML

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>轮播图</title>  
    <link rel="stylesheet" type="text/css" href="6_11.css">  
</head>  
<body>  
<div class="g-container">  
    <ul style="--s: 4">  
        <li>  
            <img src="./1.png">  
        </li>  
        <li>  
            <img src="./2.png">  
        </li>  
        <li>  
            <img src="./3.png">  
        </li>  
        <li>  
            <img src="./4.png">  
        </li>  
  
        <!--末尾补一个首尾数据-->  
        <li>  
            <img src="./1.png">  
        </li>  
    </ul>  
</div>  
</body>  
</html>

CSS

* {  
    padding: 0;  
    margin: 0;  
}  
  
li {  
    list-style: none;  
}  
  
body,  
html {  
    width: 100%;  
    height: 100%;  
    display: flex;  
}  
  
:root {  
    --w: 400;  
    --speed: 2s;  
}  
  
.g-container {  
    width: 400px;  
    margin: auto;  
    height: 240px;  
    line-height: 240px;  
    font-size: 20px;  
    background: #673ab7;  
    color: #fff;  
    overflow: hidden;  
    border: 2px solid #766c6c;  
}  
  
ul {  
    display: flex;  
    flex-wrap: nowrap;  
}  
  
ul li {  
    flex-shrink: 0;  
    width: 100%;  
    height: 100%;  
    box-sizing: border-box;  
}  
  
ul li img {  
    width: 100%;  
    height: 100%;  
    object-fit: cover;  
}  
  
ul {  
    animation: move calc(var(--speed) * var(--s)) steps(var(--s)) infinite;  
}  
  
ul li {  
    white-space: nowrap;  
    cursor: pointer;  
    animation: move1 calc(var(--speed)) infinite;  
}  
  
@keyframes move {  
    0% {  
        transform: translate(0, 0px);  
    }  
  
    100% {  
        transform: translate(calc(var(--s) * var(--w) * -1px), 0);  
    }  
}  
  
@keyframes move1 {  
    0% {  
        transform: translate(0, 0px);  
    }  
  
    80%,  
    100% {  
        transform: translate(calc(var(--w) * -1px), 0);  
    }  
}

关键技术点如下:

  1. Flexbox布局:
    ul { display: flex; flex-wrap: nowrap; }:使用flex布局来水平排列列表项,并禁止换行。

  2. ul li { flex-shrink: 0; width: 100%; height: 100%; box-sizing: border-box; }:设置列表项不收缩,宽高为100%,并使用box-sizing: border-box;来包含边框和内边距。

  3. 图片样式:

  4. ul li img { width: 100%; height: 100%; object-fit: cover; }:使图片占满整个列表项,并使用object-fit: cover;来保证图片的封面效果。

  5. 动画效果:

    1. ul 和 ul li 的动画使用了animation属性,分别命名为movemove1,并使用了CSS变量--speed--s来控制动画的速度和步数。
    2. @keyframes move 和 @keyframes move1:定义了两个关键帧动画,分别用于整个列表和单个列表项的移动。
  6. 无限循环:在ul中末尾补了一个首尾数据,结合动画的步骤(steps(var(--s)))和无限循环(infinite),实现了无缝滚动效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码的大学生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值