HTML+CSS 动态卡片

效果演示

21-动态卡片.gif

实现了一个带有动态背景和图片放大效果的卡片展示。卡片的背景是由两种颜色交替组成的斜线条纹,同时背景会以一定速度循环滚动。当鼠标悬停在卡片上时,卡片的图片会放大,并且卡片的背景会变为彩色。

Code

HTML
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>动态卡片</title>
    <link rel="stylesheet" href="./21-动态卡片.css">
</head>
<body>
    <div class="container">
        <div class="box"><img src="./images/male.png" alt=""></div>
        <div class="box"><img src="./images/female.png" alt=""></div>
    </div>
</body>
</html>
CSS
* {
    margin: 0;
    padding: 0;
}

body {
    min-height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #333;
}

.container {
    display: flex;
}

.container .box {
    position: relative;
    display: flex;
    justify-content: center;
    width: 320px;
    height: 400px;
    --c1: #c7cc97;
    --c2: #e6a28c;
    background: linear-gradient(45deg, var(--c1) 25%, #444 25%, #444 50%, var(--c1) 50%, var(--c1) 75%, #444 75%, #444 100%);
    background-size: 40px 40px;
    border-radius: 20px;
    margin: 0 20px;
    filter: grayscale(1);
    transition: filter 1s;
    animation: animateBg 0.5s linear infinite;
    animation-play-state: paused;
}

.container .box:nth-child(2) {
    background: linear-gradient(135deg, var(--c2) 25%, #444 25%, #444 50%, var(--c2) 50%, var(--c2) 75%, #444 75%, #444 100%);
    background-size: 40px 40px;
}

.container .box img {
    height: 90%;
    position: absolute;
    bottom: 0;
    transition: 0.5s;
}

.container .box:hover img {
    height: 480px;
}

.container .box:hover {
    filter: grayscale(0);
    animation-play-state: running;
}

@keyframes animateBg {
    0% {
        background-position: 0;
    }
    100% {
        background-position: 40px;
    }
}

实现思路拆分

* {
    margin: 0;
    padding: 0;
}

这段代码是将所有元素的外边距和内边距都设置为0,以便更好地控制页面布局。

body {
    min-height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #333;
}

这段代码设置了body元素的最小高度为100vh,使得页面的高度至少占满整个视口。同时,将body元素的display属性设置为flex,使得其内部的元素可以使用flex布局。justify-content和align-items属性分别设置了flex容器的主轴和交叉轴的对齐方式,这里都设置为居中对齐。background-color属性设置了body元素的背景颜色为#333。

.container {
    display: flex;
}

这段代码设置了一个名为.container的元素,将其display属性设置为flex,使得其内部的元素可以使用flex布局。

.container .box {
    position: relative;
    display: flex;
    justify-content: center;
    width: 320px;
    height: 400px;
    --c1: #c7cc97;
    --c2: #e6a28c;
    background: linear-gradient(45deg, var(--c1) 25%, #444 25%, #444 50%, var(--c1) 50%, var(--c1) 75%, #444 75%, #444 100%);
    background-size: 40px 40px;
    border-radius: 20px;
    margin: 0 20px;
    filter: grayscale(1);
    transition: filter 1s;
    animation: animateBg 0.5s linear infinite;
    animation-play-state: paused;
}

这段代码设置了一个名为.box的元素,它是.container元素的子元素。position属性设置为relative,使得其内部的元素可以使用相对定位。display属性设置为flex,使得其内部的元素可以使用flex布局。justify-content属性设置为center,使得其内部的元素在主轴上居中对齐。width和height属性分别设置了.box元素的宽度和高度。–c1和–c2是自定义的CSS变量,分别表示两种颜色。background属性设置了.box元素的背景颜色为一个斜线条纹,由两种颜色交替组成。background-size属性设置了斜线条纹的大小为40px * 40px。border-radius属性设置了.box元素的圆角半径为20px。margin属性设置了.box元素的外边距为0 20px,即左右各20px。filter属性设置了.box元素的灰度值为1,即将其变为灰色。transition属性设置了.box元素的过渡效果,当filter属性发生变化时,过渡时间为1秒。animation属性设置了.box元素的动画效果,即背景颜色的滚动效果。animateBg是一个自定义的动画名称,0.5s表示动画的持续时间,linear表示动画的缓动函数,infinite表示动画无限循环。animation-play-state属性设置了动画的播放状态为paused,即初始状态下动画不播放。

.container .box:nth-child(2) {
    background: linear-gradient(135deg, var(--c2) 25%, #444 25%, #444 50%, var(--c2) 50%, var(--c2) 75%, #444 75%, #444 100%);
    background-size: 40px 40px;
}

这段代码设置了.container元素下的第二个.box元素的背景颜色为另一种斜线条纹,由两种颜色交替组成。background-size属性设置了斜线条纹的大小为40px * 40px。

.container .box img {
    height: 90%;
    position: absolute;
    bottom: 0;
    transition: 0.5s;
}

这段代码设置了.box元素内的img元素的高度为90%,即占据.box元素的90%高度。position属性设置为absolute,使得img元素可以使用绝对定位。bottom属性设置为0,使得img元素位于.box元素的底部。transition属性设置了img元素的过渡效果,当高度发生变化时,过渡时间为0.5秒。

.container .box:hover img {
    height: 480px;
}

这段代码设置了当鼠标悬停在.box元素上时,其内部的img元素的高度变为480px,即放大效果。

.container .box:hover {
    filter: grayscale(0);
    animation-play-state: running;
}

这段代码设置了当鼠标悬停在.box元素上时,其内部的灰度值变为0,即恢复彩色。同时,将动画的播放状态设置为running,即播放动画。

@keyframes animateBg {
    0% {
        background-position: 0;
    }
    100% {
        background-position: 40px;
    }
}

这段代码定义了一个名为animateBg的动画,它控制了.box元素的背景颜色的滚动效果。0%表示动画的起始状态,background-position属性设置为0,即背景颜色的起始位置。100%表示动画的结束状态,background-position属性设置为40px,即背景颜色的结束位置。

以下是一个简单的HTML+CSS动态人物介绍网页代码示例: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>人物介绍网页</title> <style> /* 布局和字体样式 */ body { font-family: "微软雅黑", sans-serif; background-color: #f2f2f2; margin: 0; padding: 0; } header { background-color: #333; color: #fff; padding: 20px; text-align: center; } h1 { font-size: 36px; margin: 0; } main { display: flex; flex-wrap: wrap; justify-content: center; margin: 20px; } .card { background-color: #fff; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); display: flex; flex-direction: column; margin: 20px; padding: 20px; text-align: center; transition: transform 0.2s; width: 300px; } .card:hover { transform: scale(1.05); } .card img { border-radius: 50%; height: 200px; margin-bottom: 20px; width: 200px; } .card h2 { font-size: 24px; margin: 0; } .card p { font-size: 16px; margin: 10px 0; } .card button { background-color: #333; border: none; color: #fff; cursor: pointer; padding: 10px 20px; transition: background-color 0.2s; } .card button:hover { background-color: #666; } /* 动画效果 */ @keyframes slideInLeft { from { opacity: 0; transform: translateX(-100px); } to { opacity: 1; transform: translateX(0); } } .animation { animation: slideInLeft 1s; } </style> </head> <body> <header> <h1>人物介绍网页</h1> <p>一个简单的HTML+CSS动态人物介绍网页示例</p> </header> <main> <div class="card animation"> <img src="https://via.placeholder.com/200x200" alt="人物照片"> <h2>人物名称</h2> <p>人物介绍</p> <button>了解更多</button> </div> <div class="card animation"> <img src="https://via.placeholder.com/200x200" alt="人物照片"> <h2>人物名称</h2> <p>人物介绍</p> <button>了解更多</button> </div> <div class="card animation"> <img src="https://via.placeholder.com/200x200" alt="人物照片"> <h2>人物名称</h2> <p>人物介绍</p> <button>了解更多</button> </div> </main> </body> </html> ``` 这个示例网页包括一个头部、一个主体,以及三个人物介绍卡片。使用了HTML标签和CSS样式来创建和美化布局,以及CSS3的动画效果来添加动态效果。希望这个示例对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值