HTML&CSS:速看!手把手教你实现超酷的动态滑动卡片(建议收藏)

这段HTML和CSS代码实现了一个具有动态滑动效果的卡片式图片展示页面,包含三个不同的图片和对应的内容描述。


大家复制代码时,可能会因格式转换出现错乱,导致样式失效。建议先少量复制代码进行测试,若未能解决问题,私信回复源码两字,我会发送完整的压缩包给你。

演示效果

HTML&CSS

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>公众号关注:前端Hardy</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        html,
        body {
            height: 100vh;
            font-family: 'Open Sans', sans-serif;
            background-color: #666666;
        }

        body {
            display: flex;
            align-items: center;
            justify-content: center;
        }

        .card {
            position: absolute;
            height: 350px;
            width: 100%;
            max-width: 850px;
            margin: auto;
            background-color: #ffffff;
            border-radius: 25px;
            box-shadow: 10px 0 50px rgba(0, 0, 0, 0.5);
        }

        .card .inner_part {
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 0 0 0 30px;
            height: 350px;
            position: absolute;
        }

        #slideImg:checked~.inner_part {
            padding: 0;
            transition: .1s ease-in;
        }

        .inner_part .img {
            height: 260px;
            width: 260px;
            overflow: hidden;
            flex-shrink: 0;
            border-radius: 20px;
            box-shadow: 0 10px 50px rgba(0, 0, 0, 0.2);
        }

        #slideImg:checked~.inner_part .img {
            height: 350px;
            width: 850px;
            z-index: 99;
            transition: .3s .2s ease-in;
        }

        .img img {
            height: 100%;
            width: 100%;
            cursor: pointer;
            opacity: 0;
            transition: .6s;
        }

        #slide_1:checked~.inner_part .img_1,
        #slide_2:checked~.inner_part .img_2,
        #slide_3:checked~.inner_part .img_3 {
            opacity: 1;
            transition-delay: .2s;
        }

        .content {
            padding: 0 20px 0 35px;
            width: 530px;
            margin-left: 50px;
            opacity: 0;
            transition: .6s;
        }

        #slideImg:checked~.inner_part .content {
            display: none;
        }

        #slide_1:checked~.inner_part .content_1,
        #slide_2:checked~.inner_part .content_2,
        #slide_3:checked~.inner_part .content_3 {
            opacity: 1;
            margin-left: 0;
            z-index: 100;
            transition-delay: .3s;
        }

        .content .title {
            font-size: 30px;
            font-weight: 700;
            color: #0d0925;
            margin: 0 0 20px 0;
        }

        .content .text {
            font-size: 19px;
            color: #4e4a67;
            margin: 0 auto 30px auto;
            line-height: 1.5em;
            text-align: justify;
        }

        .content button {
            padding: 15px 20px;
            border: none;
            font-size: 16px;
            color: #fff0e6;
            font-weight: 600;
            letter-spacing: 1px;
            border-radius: 50px;
            cursor: pointer;
            outline: none;
            background: #000000;
            float: right;
        }

        .content button:hover {
            background: #cecece;
            color: #000000;
        }

        .slider {
            position: absolute;
            bottom: 25px;
            left: 55%;
            transform: translateX(-50%);
            z-index: 1;
        }

        #slideImg:checked~.slider {
            display: none;
        }

        .slider .slide {
            position: relative;
            height: 10px;
            width: 50px;
            background: #d9d9d9;
            border-radius: 5px;
            display: inline-flex;
            margin: 0 3px;
            cursor: pointer;
        }


        .slider .slide:before {
            position: absolute;
            content: '';
            top: 0;
            left: 0;
            height: 100%;
            width: -100%;
            background: #000000;
            ;
            border-radius: 10px;
            transform: scaleX(0);
            transition: transform .6s;
            transform-origin: left;
        }

        #slide_1:checked~.slider .slide_1:before,
        #slide_2:checked~.slider .slide_2:before,
        #slide_3:checked~.slider .slide_3:before {
            transform: scaleX(1);
            width: 100%;
        }

        input {
            display: none;
        }
    </style>
</head>

<body>
    <div class="card">
        <input type="radio" name="select" id="slide_1" checked>
        <input type="radio" name="select" id="slide_2">
        <input type="radio" name="select" id="slide_3">
        <input type="checkbox" id="slideImg">

        <div class="slider">
            <label for="slide_1" class="slide slide_1"></label>
            <label for="slide_2" class="slide slide_2"></label>
            <label for="slide_3" class="slide slide_3"></label>
        </div>

        <div class="inner_part">
            <label for="slideImg" class="img">
                <img class="img_1"
                    src="https://jxjy-att.whxunw.com/guotu_att/upload/images/2024082611/E885672B00074ABFBBDF667079BF2A85.jpg">
            </label>
            <div class="content content_1">
                <div class="title">湖光山色映夕阳</div>
                <div class="text">
                    夕阳西下,金色余晖洒在宁静的湖面上,倒映着远处的山峰,岸边的岩石与绿树相映成趣,构成一幅和谐美丽的自然画卷。
                </div>
                <button>Read More</button>
            </div>
        </div>

        <div class="inner_part">
            <label for="slideImg" class="img">
                <img class="img_2"
                    src="https://i2.hdslb.com/bfs/archive/7e5f144ce2730cee4a059865b3c7d2d27e2e35ce.jpg">
            </label>
            <div class="content content_2">
                <div class="title">绿野田园风光秀</div>
                <div class="text">
                    阳光明媚的乡村景色,绿意盎然的田野与蜿蜒的小路交错,点缀其间的小屋与远处的山峦构成一幅宁静和谐的田园画卷。
                </div>
                <button>Read More</button>
            </div>
        </div>

        <div class="inner_part">
            <label for="slideImg" class="img">
                <img class="img_3"
                    src="https://cos3.solepic.com/20231012/b_652261202310120839081636.jpg">
            </label>
            <div class="content content_3">
                <div class="title">晨晖雪岭映林间</div>
                <div class="text">清晨的光线洒在雪山之巅,山体被染上一抹粉红。山脚下,色彩斑斓的森林与远处的雪峰相映成趣,展现出大自然的壮丽与和谐。
                </div>
                <button>Read More</button>
            </div>
        </div>
    </div>
</body>

</html>

HTML 结构

  • radio:定义图片切换的控制按钮,通过name属性实现单选效果。
  • checkbox:定义图片放大切换的控制按钮。
  • slider:定义滑动按钮的容器,包含三个滑动按钮。
  • label:定义滑动按钮,通过for属性绑定对应的input>。
  • inner_part:定义每个图片和内容的容器。
  • img:定义图片,通过src属性加载图片资源。
  • content:定义内容区域,包含标题和描述文本。
  • button:定义按钮,用于引导用户查看更多内容。

CSS 样式

  • .card:定义卡片的样式,包括绝对定位、高度、宽度、最大宽度、背景颜色、圆角和阴影。
  • .inner_part:定义卡片内部内容的样式,包括弹性布局、对齐方式、内边距和高度。
  • #slideImg:checked~.inner_part:定义当图片放大切换按钮被选中时,内部内容的样式,包括内边距和过渡效果。
  • .img:定义图片容器的样式,包括高度、宽度、溢出隐藏、弹性收缩、圆角和阴影。
  • #slideImg:checked~.inner_part .img:定义当图片放大切换按钮被选中时,图片容器的样式,包括高度、宽度、层级和过渡效果。
  • .img img:定义图片的样式,包括高度、宽度、鼠标指针和透明度。
  • #slide_1:checked~.inner_part .img_1, #slide_2:checked~.inner_part .img_2, #slide_3:checked~.inner_part .img_3:定义当对应的图片切换按钮被选中时,图片的样式,包括透明度和过渡延迟。
  • .content:定义内容区域的样式,包括内边距、宽度、左边距、透明度和过渡效果。
  • #slideImg:checked~.inner_part .content:定义当图片放大切换按钮被选中时,内容区域的样式,包括隐藏显示。
  • #slide_1:checked~.inner_part .content_1, #slide_2:checked~.inner_part .content_2, #slide_3:checked~.inner_part .content_3:定义当对应的图片切换按钮被选中时,内容区域的样式,包括透明度、左边距、层级和过渡延迟。
  • .content .title:定义内容区域标题的样式,包括字体大小、加粗、颜色和外边距。
  • .content .text:定义内容区域文本的样式,包括字体大小、颜色、外边距、行高和对齐方式。
  • .content button:定义内容区域按钮的样式,包括内边距、边框、字体大小、颜色、字体加粗、字母间距、圆角、鼠标指针、轮廓和背景颜色。
  • .content button:hover:定义当鼠标悬停在按钮上时的样式,包括背景颜色和文字颜色的变化。
  • .slider:定义滑动按钮容器的样式,包括绝对定位、底部、左侧、变换、层级。
  • #slideImg:checked~.slider:定义当图片放大切换按钮被选中时,滑动按钮容器的样式,包括隐藏显示。
  • .slider .slide:定义滑动按钮的样式,包括相对定位、高度、宽度、背景颜色、圆角、内联弹性布局、外边距和鼠标指针。
  • .slider .slide:before:定义滑动按钮伪元素的样式,包括绝对定位、内容、顶部、左侧、高度、宽度、背景颜色、圆角、变换和过渡效果。
  • #slide_1:checked~.slider .slide_1:before, #slide_2:checked~.slider .slide_2:before, #slide_3:checked~.slider .slide_3:before:定义当对应的滑动按钮被选中时,伪元素的样式,包括变换和宽度。
  • input:定义隐藏的输入元素的样式,包括隐藏显示。

各位互联网搭子,要是这篇文章成功引起了你的注意,别犹豫,关注、点赞、评论、分享走一波,让我们把这份默契延续下去,一起在知识的海洋里乘风破浪!

相关推荐
三天不学习1 分钟前
Vue-Office:优雅实现Office文件预览的Vue组件
前端·javascript·vue.js·vue-office
IT199513 分钟前
uniapp笔记-swiper组件实现轮播图
前端·javascript·笔记·uni-app
weixin_4435669833 分钟前
async/defer/preload性能优化
前端·css·html
Riesenzahn37 分钟前
举例说明with属性的fill-available有什么应用场景?
前端·javascript
Riesenzahn37 分钟前
websocket和socket有什么区别?
前端·javascript
渴望成为python大神的前端小菜鸟1 小时前
2025前端面试题(vue、react、uniapp、微信小程序、JS、CSS、其他)
前端·javascript·vue.js·面试·微信小程序·uni-app·react
晚风9141 小时前
Vue 3中的Teleport:超越组件边界的渲染
前端·javascript·vue.js
Cutey9161 小时前
深拷贝与浅拷贝详解(包含手写深拷贝与浅拷贝实现)
前端·javascript·面试
郡nionio1 小时前
对象数组改变其对象内容值数组没变化?
javascript·vue.js
渔樵江渚上1 小时前
Webpack 与 Vite 对比:现代前端构建工具的技术博弈
前端·javascript·面试