这段代码创建了一个具有动态效果的产品卡片,通过 CSS 技术实现了卡片的缩放、移动和动画效果,为页面添加了视觉吸引力和用户交互体验。
演示效果
HTML&CSS
<!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>
body {
margin: 0;
padding: 0;
background: #212121;
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
.card {
position: relative;
background: #fff;
width: 190px;
height: 265px;
border-radius: 8px;
cursor: pointer;
transition: all 120ms;
overflow: hidden;
box-shadow: 0px 1px 13px rgba(0, 0, 0, 0.1);
}
.card:active {
transform: scale(.95);
}
.card::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
box-shadow: inset 0px 0px 25px 5px rgba(255, 255, 255, .5);
z-index: 1;
}
.card::after {
content: "加入购物车";
position: absolute;
bottom: -50%;
left: 0;
padding-left: 15px;
background: rgba(0, 0, 0, 0.6);
width: 100%;
height: 60px;
color: #fff;
line-height: 50px;
text-transform: uppercase;
z-index: 2;
transition: all .2s ease-in;
}
.card:hover::after {
bottom: 0;
}
.card:active::after {
content: "Adding !";
height: 65px;
}
.image {
position: absolute;
top: 50%;
left: 50%;
width: 100px;
height: auto;
filter: drop-shadow(3px 3px 5px #18181815);
transform: translate(-50%, -50%);
animation: shoes 1s ease infinite alternate;
transition: all .5s ease-in;
}
@keyframes shoes {
from {
top: 48%;
}
to {
top: 52%;
}
}
.card:hover .image {
width: 220px;
height: auto;
animation: none;
transform: rotate(15deg) translate(-35%, -25%);
}
.text {
position: absolute;
top: 15%;
left: -80%;
color: #181818;
transition: all .3s ease-in;
}
.text span {
font-size: 25px;
font-weight: 400;
margin-bottom: 5px;
}
.text p {
font-size: 18px;
font-weight: bold;
}
.card:hover .text {
top: 15%;
left: 5%;
}
.fil-shoes2 {
fill: #a59573
}
</style>
</head>
<body>
<div class="card">
<div class="image">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 116.83 182.61"
style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" class="img-product">
<defs></defs>
<g id="Layer_x0020_1">
<metadata id="CorelCorpID_0Corel-Layer"></metadata>
<path
d="M99.33 20.55c-4.24,-1.91 -3.3,-0.4 -8.3,-3.82 -4.06,-2.78 -12.82,-7.22 -17.68,-9.3 -0.94,-0.4 -2.53,-1.19 -4.13,-1.73l-6.69 -1.8c-0.99,-0.23 -1.3,-0.65 -2.22,-0.84 -2.53,-0.53 -3.82,-0.46 -6.69,-1.8 -1.49,-0.7 -2.01,-1.69 -3.83,-1.04 -0.87,0.31 -1.19,0.64 -1.58,1.41 -2.44,4.98 -7.2,7.7 -11.26,11.02l-2.61 1.83c-3.93,2.6 -9.38,4.53 -13.7,6.73 -2.89,1.47 -0.86,0.97 -4.02,0.7 -3.13,-0.27 -6.21,3.31 -8.33,5.29 -1.04,0.97 -0.92,0.53 -1.85,1.4 -0.47,0.44 -1.08,1.33 -1.33,1.49 -1.07,0.68 -4.09,2.28 -4.75,3.1 -1.3,1.63 1.31,5.1 2.23,7.24 0.64,1.49 1.76,3.02 3.13,4.07 0.74,0.56 1.15,1.74 1.7,2.61 -4.07,2.78 -3.12,3.46 -2.09,4.55 2.17,2.3 3.66,4.97 5.89,7.28 4.1,4.26 1.12,4.68 2.64,8.38 0.55,1.33 0.85,1.09 0.9,2.64 0.11,3.4 -2.12,4.67 -1.04,9.36 1.66,7.23 0.4,2.11 0.06,5.96 -0.07,0.84 0.09,2.01 0.28,2.8 0.37,1.51 0.52,1.49 1.31,2.75 -3.14,5.43 0.18,6.41 -0.44,8.98 -0.6,2.51 -0.95,3.64 -0.11,6.01 0.32,0.9 1.2,2.1 1.3,2.75 0.18,1.1 -0.42,1.33 -0.22,2.94 0.25,2.12 -0.18,4.23 0.11,5.95 0.29,1.75 0.42,0.99 0.2,3.05 -0.34,3.15 -1.45,5.88 -0.63,9.03 0.31,1.2 -2.36,8.82 -2.7,10.03 -1.79,6.36 -5.05,13.1 -6.2,19.61 -0.61,3.43 -2.34,1.66 -1.11,6.28 0.92,3.47 4.04,4.61 5.91,7.28 0.79,1.12 0.41,1.28 1.7,2.65l2.35 2.25c1.77,1.48 2.49,2.9 5.16,4.13l2.42 0.76c2.87,0.45 5.92,-1.16 8.06,-2.98l5.48 -5.18c2.01,-2 3.71,-4.85 5.66,-6.98 2.12,-2.32 9.8,-15.54 11.11,-18.32 0.6,-1.26 1.15,-1.61 1.93,-2.45 1.29,-1.38 0.99,-2.19 1.76,-3.35 0.69,-1.05 1.38,-1.26 2.33,-2.87 2.62,-4.45 24.66,-42 26.3,-45.85 0.9,-2.11 3.13,-4.62 4.12,-6.85 2.49,-5.61 5.17,-12.08 8.85,-17.34 2.18,-3.12 8.43,-13.52 8.19,-15.8 0.86,-0.42 7.8,-14 8.75,-15.88 2.13,-4.22 1.53,-9.85 -2.88,-12.09 -4.39,-2.47 -8.77,-3.95 -13.43,-6.05z"
class="fil-shoes2"></path>
</g>
</svg>
</div>
<div class="text">
<span>Nike</span>
<p>$200</p>
</div>
</div>
</body>
</html>
HTML 结构
- card: 创建一个类名为“card”的 div 元素,用于包含整个产品卡片。
- image: 包含产品图片的 div。
- svg: 创建一个 SVG 图片。
- text: 包含产品名称和价格的 div。
- span: 显示产品名称。
- p: 显示产品价格。
CSS 样式
- body: 设置页面的边距、填充、背景色、显示方式和高度。
- .card: 设置卡片的样式,包括位置、背景、尺寸、边框半径、鼠标指针样式、过渡效果和溢出隐藏。
- .card:active: 设置卡片在点击时的缩放效果。
- .card::before: 设置卡片的前伪元素,用于创建内部阴影效果。
- .card::after: 设置卡片的后伪元素,用于创建底部按钮,并在鼠标悬停时显示。
- .card:hover::after: 设置鼠标悬停在卡片上时底部按钮的样式,使其显示。
- .card:active::after: 设置卡片在点击时底部按钮的样式,改变内容和高度。
- .image: 设置图片的样式,包括位置、尺寸、滤镜效果和动画效果。
- @keyframes shoes: 定义图片的上下浮动动画。
- .card:hover .image: 设置鼠标悬停在卡片上时图片的样式,使其放大并旋转。
- .text: 设置文本的样式,包括位置、颜色和过渡效果。
- .text span: 设置产品名称的样式,包括字体大小和权重。
- .text p: 设置产品价格的样式,包括字体大小和权重。
- .card:hover .text: 设置鼠标悬停在卡片上时文本的样式,使其移动。
- .fil-shoes2: 设置 SVG 图片的填充颜色。