【html】爱心跳动动画:CSS魔法背后的故事

发布于:2024-06-20 ⋅ 阅读:(161) ⋅ 点赞:(0)

 效果展示:

代码介绍:

爱心跳动动画:CSS魔法背后的故事

在前端开发中,CSS不仅仅是一种用于控制网页样式的工具,它也是一种表达创意和想象力的艺术手段。今天,我要为大家介绍一段使用CSS实现的爱心跳动动画代码,这段代码将带您领略CSS的魔法之处。

首先,我们来整体看一下这个动画的结构。这个动画主要由一个类名为heart的<div>元素构成,通过CSS的伪元素::before和::after来绘制出爱心的形状。同时,我们还使用了CSS的@keyframes规则来定义动画效果,让爱心能够呈现出跳动的视觉效果。

在CSS中,我们首先通过*选择器重置了所有元素的margin和padding,确保了页面布局的一致性。接着,我们设置了body和html的宽度和高度都为100%,这样可以让页面内容完全填满整个视口。

然后,我们定义了.heart类及其伪元素的样式。使用position: relative;将.heart元素定位为其正常位置,然后通过::before和::after伪元素来创建爱心的上半部分和下半部分。这里利用了绝对定位(position: absolute;)和border-radius属性来绘制出圆润的爱心形状。同时,我们还添加了box-shadow来增强爱心的立体感。

接下来是动画的核心部分。我们使用@keyframes定义了一个名为heartbit的动画,该动画描述了爱心跳动的过程。在动画的0%和100%状态下,我们通过transform: rotate(45deg) scale(0.6/1.4);来改变爱心的缩放比例,从而模拟出跳动的效果。这里需要注意的是,虽然我们试图通过改变font-size来影响动画效果,但实际上font-size对.heart这个不包含文本的元素没有任何影响,因此这部分代码是无效的。

最后,在.heart类中,我们将animation属性设置为heartbit 0.1s alternate infinite;,这表示动画将无限次地交替播放,每次播放的持续时间为0.1秒。

此外,代码中还有一个p元素的样式定义,但是在HTML结构中并没有对应的p元素,所以这个样式在这里并没有发挥作用。

通过这个例子,我们可以看到CSS的强大之处。它不仅能够控制页面的布局和样式,还能够通过动画和交互效果为网页增添活力和趣味性。当然,这只是一个简单的例子,CSS还有很多高级特性和用法等待我们去探索和实践。希望这个例子能够激发您对CSS的兴趣和热情,让您在前端开发的道路上越走越远。

源码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;

        }

        body,
        html {
            width: 100%;
            height: 100%;
        }
        .heart::before{
            content: "";
            width: 200px;
            height: 100px;
            background-color: red;
            position: absolute;
            left: 0;
            top: -99px;
            border-radius: 100px 100px  0 0;
            box-shadow: 0 0 30px red;
        }

        body {
            background-color: pink;
            display: flex;
            flex-direction: row;
            justify-content: center;
            align-items: center;
        }

        .heart::after{
            content: "";
            width: 100px;
            height: 200px;
            background-color: red;
            position: absolute;
            left: -99px;
            top: 0;
            border-radius:  100px 0 0 100px;
            box-shadow: 0 0 30px red;
        }


        .heart {
            display: flex;
            justify-content: center;
            align-items: center;
            width: 200px;
            height: 200px;
            background-color: red;
            position: relative;
            transform: rotate(45deg);
            animation: heartbit 0.1s alternate infinite;
            box-shadow: 0 0 30px red;
        }

        @keyframes heartbit{
            0%{
                transform: rotate(45deg) scale(0.6) ;
                font-size: 30px;
            }
            /* 25%{
                transform: rotate(45deg) scale(0.8);
            }
            50%{
                transform: rotate(45deg) scale(1);
            }
            75%{
                transform: rotate(45deg) scale(1.2);
            } */
            
            100%{
                transform: rotate(45deg) scale(1.4);
                font-size: 30px;
            }
            
        }

        p{
            transform: rotate(315deg);
            
        }
    </style>
</head>

<body>
    <div class="heart">

    </div>
</body>

</html>


网站公告

今日签到

点亮在社区的每一天
去签到