这段代码实现了一个响应式的卡片布局,每张卡片包含背景图片、悬停信息和内容区域。通过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:定义卡片悬停时悬停信息的样式,包括透明度。
各位互联网搭子,要是这篇文章成功引起了你的注意,别犹豫,关注、点赞、评论、分享走一波,让我们把这份默契延续下去,一起在知识的海洋里乘风破浪!