HTML&CSS:创意页面必备!卡片悬停效果

这段代码实现了一个响应式的卡片布局,每张卡片包含背景图片、悬停信息和内容区域。通过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>
        @import url('https://fonts.googleapis.com/css?family=Roboto+Slab:100,300,400,700');
        @import url('https://fonts.googleapis.com/css?family=Raleway:300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i');

        * {
            box-sizing: border-box;
        }

        body,
        html {
            font-family: 'Roboto Slab', serif;
            margin: 0;
            width: 100%;
            height: 100%;
            padding: 0;
        }

        body {
            background-color: #D2DBDD;
            display: flex;
            display: -webkit-flex;
            -webkit-justify-content: center;
            -webkit-align-items: center;
            justify-content: center;
            align-items: center;
        }

        .cards {
            width: 100%;
            display: flex;
            display: -webkit-flex;
            justify-content: center;
            -webkit-justify-content: center;
            max-width: 820px;
        }

        .card--1 .card__img,
        .card--1 .card__img--hover {
            background-image: url('https://images.pexels.com/photos/45202/brownie-dessert-cake-sweet-45202.jpeg?auto=compress&cs=tinysrgb&h=750&w=1260');
        }

        .card--2 .card__img,
        .card--2 .card__img--hover {
            background-image: url('https://images.pexels.com/photos/307008/pexels-photo-307008.jpeg?auto=compress&cs=tinysrgb&h=750&w=1260');
        }

        .card__like {
            width: 18px;
        }

        .card__clock {
            width: 15px;
            vertical-align: middle;
            fill: #AD7D52;
        }

        .card__time {
            font-size: 12px;
            color: #AD7D52;
            vertical-align: middle;
            margin-left: 5px;
        }

        .card__clock-info {
            float: right;
        }

        .card__img {
            visibility: hidden;
            background-size: cover;
            background-position: center;
            background-repeat: no-repeat;
            width: 100%;
            height: 235px;
            border-top-left-radius: 12px;
            border-top-right-radius: 12px;

        }

        .card__info-hover {
            position: absolute;
            padding: 16px;
            width: 100%;
            opacity: 0;
            top: 0;
        }

        .card__img--hover {
            transition: 0.2s all ease-out;
            background-size: cover;
            background-position: center;
            background-repeat: no-repeat;
            width: 100%;
            position: absolute;
            height: 235px;
            border-top-left-radius: 12px;
            border-top-right-radius: 12px;
            top: 0;

        }

        .card {
            margin-right: 25px;
            transition: all .4s cubic-bezier(0.175, 0.885, 0, 1);
            background-color: #fff;
            width: 33.3%;
            position: relative;
            border-radius: 12px;
            overflow: hidden;
            box-shadow: 0px 13px 10px -7px rgba(0, 0, 0, 0.1);
        }

        .card:hover {
            box-shadow: 0px 30px 18px -8px rgba(0, 0, 0, 0.1);
            transform: scale(1.01, 1.02);
        }

        .card__info {
            z-index: 2;
            background-color: #fff;
            border-bottom-left-radius: 12px;
            border-bottom-right-radius: 12px;
            padding: 16px 24px 24px 24px;
        }

        .card__category {
            font-family: 'Raleway', sans-serif;
            text-transform: uppercase;
            font-size: 13px;
            letter-spacing: 2px;
            font-weight: 500;
            color: #868686;
        }

        .card__title {
            margin-top: 5px;
            margin-bottom: 10px;
            font-family: 'Roboto Slab', serif;
        }

        .card__by {
            font-size: 12px;
            font-family: 'Raleway', sans-serif;
            font-weight: 500;
        }

        .card__author {
            font-weight: 600;
            text-decoration: none;
            color: #AD7D52;
        }

        .card:hover .card__img--hover {
            height: 100%;
            opacity: 0.3;
        }

        .card:hover .card__info {
            background-color: transparent;
            position: relative;
        }

        .card:hover .card__info-hover {
            opacity: 1;
        }
    </style>
</head>

<body>
    <section class="cards">
        <article class="card card--1">
            <div class="card__info-hover">
                <svg class="card__like" viewBox="0 0 24 24">
                    <path fill="#000000"
                        d="M12.1,18.55L12,18.65L11.89,18.55C7.14,14.24 4,11.39 4,8.5C4,6.5 5.5,5 7.5,5C9.04,5 10.54,6 11.07,7.36H12.93C13.46,6 14.96,5 16.5,5C18.5,5 20,6.5 20,8.5C20,11.39 16.86,14.24 12.1,18.55M16.5,3C14.76,3 13.09,3.81 12,5.08C10.91,3.81 9.24,3 7.5,3C4.42,3 2,5.41 2,8.5C2,12.27 5.4,15.36 10.55,20.03L12,21.35L13.45,20.03C18.6,15.36 22,12.27 22,8.5C22,5.41 19.58,3 16.5,3Z" />
                </svg>
                <div class="card__clock-info">
                    <svg class="card__clock" viewBox="0 0 24 24">
                        <path
                            d="M12,20A7,7 0 0,1 5,13A7,7 0 0,1 12,6A7,7 0 0,1 19,13A7,7 0 0,1 12,20M19.03,7.39L20.45,5.97C20,5.46 19.55,5 19.04,4.56L17.62,6C16.07,4.74 14.12,4 12,4A9,9 0 0,0 3,13A9,9 0 0,0 12,22C17,22 21,17.97 21,13C21,10.88 20.26,8.93 19.03,7.39M11,14H13V8H11M15,1H9V3H15V1Z" />
                    </svg><span class="card__time">15 min</span>
                </div>

            </div>
            <div class="card__img"></div>
            <a href="#" class="card_link">
                <div class="card__img--hover"></div>
            </a>
            <div class="card__info">
                <span class="card__category"> Recipe</span>
                <h3 class="card__title">Crisp Spanish tortilla Matzo brei</h3>
                <span class="card__by">by <a href="#" class="card__author" title="author">Celeste Mills</a></span>
            </div>
        </article>

        <article class="card card--2">
            <div class="card__info-hover">
                <svg class="card__like" viewBox="0 0 24 24">
                    <path fill="#000000"
                        d="M12.1,18.55L12,18.65L11.89,18.55C7.14,14.24 4,11.39 4,8.5C4,6.5 5.5,5 7.5,5C9.04,5 10.54,6 11.07,7.36H12.93C13.46,6 14.96,5 16.5,5C18.5,5 20,6.5 20,8.5C20,11.39 16.86,14.24 12.1,18.55M16.5,3C14.76,3 13.09,3.81 12,5.08C10.91,3.81 9.24,3 7.5,3C4.42,3 2,5.41 2,8.5C2,12.27 5.4,15.36 10.55,20.03L12,21.35L13.45,20.03C18.6,15.36 22,12.27 22,8.5C22,5.41 19.58,3 16.5,3Z" />
                </svg>
                <div class="card__clock-info">
                    <svg class="card__clock" viewBox="0 0 24 24">
                        <path
                            d="M12,20A7,7 0 0,1 5,13A7,7 0 0,1 12,6A7,7 0 0,1 19,13A7,7 0 0,1 12,20M19.03,7.39L20.45,5.97C20,5.46 19.55,5 19.04,4.56L17.62,6C16.07,4.74 14.12,4 12,4A9,9 0 0,0 3,13A9,9 0 0,0 12,22C17,22 21,17.97 21,13C21,10.88 20.26,8.93 19.03,7.39M11,14H13V8H11M15,1H9V3H15V1Z" />
                    </svg><span class="card__time">5 min</span>
                </div>

            </div>
            <div class="card__img"></div>
            <a href="#" class="card_link">
                <div class="card__img--hover"></div>
            </a>
            <div class="card__info">
                <span class="card__category"> Travel</span>
                <h3 class="card__title">Discover the sea</h3>
                <span class="card__by">by <a href="#" class="card__author" title="author">John Doe</a></span>
            </div>
        </article>
    </section>
</body>

</html>

HTML 结构

  • cards:定义一个容器,用于包裹所有卡片,实现水平排列。
  • card card--1:定义第一张卡片,包含图片、悬停信息和卡片内容。
  • card card--2:定义第二张卡片,结构与第一张卡片类似。
  • card__info-hover:定义卡片悬停时显示的信息,包括点赞图标和时间信息。
  • card__img:定义卡片的背景图片。
  • card__img--hover:定义卡片悬停时的背景图片。
  • card__info:定义卡片的内容区域,包含分类、标题、作者等信息。
  • card__category:定义卡片的分类信息。
  • card__title:定义卡片的标题。
  • card__by:定义卡片的作者信息。
  • card__author:定义卡片作者的链接。

CSS 样式

  • @import url(...):导入外部字体资源,分别为Roboto Slab和Raleway字体。
  • *:设置全局样式,确保所有元素的box-sizing为border-box。
  • body, html:设置页面的整体布局,包括字体、外边距、宽高和内边距。
  • body:设置页面的背景颜色、布局方式(居中对齐)和阴影效果。
  • .cards:定义卡片容器的样式,包括宽度、布局方式和最大宽度。
  • .card__like:定义点赞图标的样式,包括宽度。
  • .card__clock:定义时钟图标的样式,包括宽度、垂直对齐方式和颜色。
  • .card__time:定义时间文本的样式,包括字体大小、颜色和对齐方式。
  • .card__clock-info:定义时间信息的样式,包括浮动方式。
  • .card__img:定义卡片背景图片的样式,包括隐藏可见性、背景大小、位置和圆角。
  • .card__info-hover:定义卡片悬停信息的样式,包括绝对定位、内边距和透明度。
  • .card__img--hover:定义卡片悬停时的背景图片样式,包括过渡效果、背景大小、位置和圆角。
  • .card:定义卡片的样式,包括外边距、过渡效果、背景颜色、宽度、位置、圆角和阴影。
  • .card:hover:定义卡片鼠标悬停时的样式,包括阴影和缩放效果。
  • .card__info:定义卡片内容区域的样式,包括背景颜色、圆角和内边距。
  • .card__category:定义卡片分类的样式,包括字体、大小写、字体大小、字母间距和颜色。
  • .card__title:定义卡片标题的样式,包括字体和外边距。
  • .card__by:定义卡片作者信息的样式,包括字体大小和字体。
  • .card__author:定义卡片作者链接的样式,包括字体权重和颜色。
  • .card:hover .card__img--hover:定义卡片悬停时背景图片的样式,包括高度和透明度。
  • .card:hover .card__info:定义卡片悬停时内容区域的样式,包括背景颜色和位置。
  • .card:hover .card__info-hover:定义卡片悬停时悬停信息的样式,包括透明度。

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

相关推荐
程序员黄同学23 分钟前
解释 TypeScript 中的枚举(enum),如何使用枚举定义一组常量?
javascript·ubuntu·typescript
Xlbb.29 分钟前
SpiderX:专为前端JS加密绕过设计的自动化工具
前端·javascript·自动化
beibeibeiooo34 分钟前
【ES6】01-ECMAScript基本认识 + 变量常量 + 数据类型
前端·javascript·ecmascript·es6
前端南玖2 小时前
深入理解Base64编码原理
前端·javascript
今天吃了嘛o2 小时前
vue中根据html动态渲染内容
javascript·vue.js·html
韶瑜不会写代码2 小时前
7-14 利用正则表达式得到一段HTML文本中所有超链接对应的网址
python·正则表达式·html
计算机毕设定制辅导-无忧学长2 小时前
HTML 基础夯实:标签、属性与基本结构的学习进度(一)
前端·学习·html
diang2 小时前
vue3实现监听从其他页签回到当前页签重新刷新setInterval
前端·javascript
打野赵怀真3 小时前
在Less中支持运算符吗?
前端·javascript
用户2587141932633 小时前
Vue中进行粘贴板粘贴数据(图片、文字等)
javascript·vue.js