<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>怦怦跳爱心</title>
<link rel="stylesheet" type="text/css" href="index.css"/>
</head>
<body>
<label>
<input type="checkbox" />
<svg viewBox="0 0 532 532">
<path id="heart" transform="translate(10, 10)" d="M256,96.5l-19.7-20.3C186.1,24.3,104.5,15.9,49.7,62.6c-62.8,53.6-66.1,149.8-9.9,207.9l193.5,199.8 c12.5,12.9,32.8,12.9,45.3,0l193.5-199.8c56.3-58.1,53-154.3-9.8-207.9l0,0C407.5,15.9,326,24.3,275.7,76.2L256,96.5z"/>
</svg>
<span></span>
</label>
</body>
</html>
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
transform: scale(1.0);
} svg {
width: 200px;
position: relative;
z-index: 10;
} #heart {
fill: #eee;
stroke-width: 20px;
stroke: red;
stroke-dasharray: 1600;
stroke-dashoffset: 1600;
stroke-linecap: round;
} span, span::after {
display: block;
width: 24px;
height: 24px;
background-color: transparent;
border-radius: 50%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(0); box-shadow: 0 -160px 0 red, 0 160px 0 red, -160px 0 0 red, 160px 0 0 red;
} span::after {
content: '';
transform: translate(-50%, -50%) scale(0) rotate(45deg);
} input[type="checkbox"] {
display: none;
} label {
cursor: pointer;
} input[type="checkbox"]:checked + svg #heart {
animation: 1s draw-heart linear forwards ;
} @keyframes draw-heart {
0% {
stroke-dashoffset: 1600;
}
80% {
stroke-dashoffset: 0;
fill: #eee;
}
100% {
fill: red;
stroke-dashoffset: 0;
}
} input[type="checkbox"]:checked ~span {
animation: .5s blink ease-in-out forwards .85s;
} input[type="checkbox"]:checked ~span::after {
animation: .5s blink-after ease-in-out forwards .85s;
} @keyframes blink {
0% {
transform: translate(-50%, -50%) scale(0.5);
opacity: .8;
}
50% {
transform: translate(-50%, -50%) scale(1);
opacity: .8;
}
100% {
transform: translate(-50%, -50%) scale(1.1);
opacity: 0;
}
} @keyframes blink-after {
0% {
transform: translate(-50%, -50%) rotate(45deg) scale(0.5);
opacity: .8;
}
50% {
transform: translate(-50%, -50%) rotate(45deg) scale(1);
opacity: .8;
}
100% {
transform: translate(-50%, -50%) rotate(45deg) scale(1.1);
opacity: 0;
}
} input[type="checkbox"]:checked + svg {
animation: 1s pop linear forwards;
} @keyframes pop {
0% {
transform: scale(1);
}
70% {
transform: scale(1);
}
80% {
transform: scale(1.2);
}
100% {
transform: scale(1);
}
}

效果图:

 

用原生CSS编写-怦怦跳的心的更多相关文章

  1. 用原生CSS编写动态字体

    HTML部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  2. canvas :原生javascript编写动态时钟

    canvas :原生javascript编写动态时钟     此时针是以画布的中心为圆心: g.translate(width/2,width/2); 此函数是将画布的原点移到(width/2,wid ...

  3. 原生 Javascript 编写五子棋

    原文地址:原生 Javascript 编写五子棋 博客地址:http://www.extlight.com 一.背景 近一个月没写 Javascript 代码,有点生疏.正好浏览网页时弹出五子棋的游戏 ...

  4. 原生 CSS 网格布局学习笔记

    下是来自Oliver Williams的帖子. Oliver已经学习了相当长时间的原生CSS网格,可以说是在CSS网格方面有一定的发言权.在这篇文章中,他将以非同寻常的思路分析自己的CSS网格布局学习 ...

  5. HTML+CSS编写规范

    在任何一个项目或者系统开发之前都需要定制一个开发约定和规则,这样有利于项目的整体风格统一.代码维护和扩展.由于Web项目开发的分散性.独立性.整合的交互性等,所以定制一套完整的约定和规则显得尤为重要. ...

  6. 关于错位动画的练习,原生js编写

    最近在网上看到一个关于错位动画的文章,感觉非常有趣,便自己练习了一下,文章连接:http://www.w3cplus.com/animation/staggering-animations.html ...

  7. css编写注意事项(不定时更新)

    CSS的编写是需要积累的,而一个好的css编写习惯对我们将来的成长是非常有利的,我会把我平时看到的或者遇到的会不定时的更新到这里,不时翻一下,但求有所进步. 如果各位看官也有看法和建议,评论下,我也会 ...

  8. 个人css编写规范

    前言:最近在做微信小程序,因为公司小,就我一个人弄前端的东西,js和页面都是我来弄,结果那天后台的人看到我的js代码,说我的代码写得不规范,函数什么的都很乱,弄得我羞愧难当,幸亏没看我的css,其实我 ...

  9. 原生css 中变量的使用

    前两天看到阮大神的一篇在css中使用变量的文章,整理了一下. 这个重要的 CSS 新功能,所有主要浏览器已经都支持了.本文全面介绍如何使用它,你会发现原生 CSS 从此变得异常强大. 一.变量的声明 ...

随机推荐

  1. 攻防世界 杂项 5.wireshark-1

    题目描述: 黑客通过wireshark抓到管理员登陆网站的一段流量包(管理员的密码即是答案). flag提交形式为flag{XXXX} 看到登录应该想到它是HTTP POST请求,wireshark搜 ...

  2. Matlab+Qt开发笔记(一):matlab搭建Qt开发matlib环境以及Demo测试

    前言   做一些数据处理软件,使用matlab文件,.mat文件.   准备条件   安装matlab2016,发现是vs 12(是vs2011版本),Qt5.9.3是支持vs 14(是vs2015版 ...

  3. 嵌入式开发板nfs挂载

    板子要开始调试了,第一个头大的问题就是调试过程中更新的文件怎么更新到板子上,以前用sd卡拷贝来来回回太浪费时间了,adb也需要接线各种连接操作. 现在板子有wifi可用,是时候把nfs共享搭起来了. ...

  4. binary-tree-maximum-path-sum leetcode C++

    Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. ...

  5. Jmeter下载安装(一)

    一.JMeter介绍       JMeter使用了不同技术和协议,是一款可以进行配置和执行负载测试.性能测试和压力测试的工具.负载测试.性能测试和压力测试概念: 负载测试: 这类测试使系统或者应用程 ...

  6. SpringBoot2.x请求注解简单介绍(4)

    1.新建项目,项目中实战讲解注解作用 2.pom.xml依赖配置 <properties> <project.build.sourceEncoding>UTF-8</pr ...

  7. testNG 注解使用说明

    1.TestNG常用注解 @BeforeSuite 标记的方法:在某个测试套件(suite)开始之前运行 @BeforeTest 在某个测试(test)开始之前运行 @BeforeClass 在某个测 ...

  8. MySQL高级篇 | 索引介绍

    前言 性能下降SQL慢的原因 查询语句写的烂 索引失效 单值索引 复合索引 关联查询太多join(设计缺陷或不得已的需求) 服务器调优及各个参数设置(缓冲.线程数等) 索引是什么 MySQL官方对索引 ...

  9. LeetCode刷题 链表专题

    链表专题 链表题目的一般做法 单链表的结构类型 删除节点 方法一 方法二 增加节点 LeedCode实战 LC19.删除链表的倒数第N个结点 解法思路 LC24.两两交换链表中的节点 解法思路 LC6 ...

  10. java读取大文件内容到Elasticsearch分析(手把手教你java处理超大csv文件)

    现在需要快算分析一个2g的csv文件: 基于掌握的知识,使用java按行读取文件,批量导入数据到es, 然后利用es强大的聚合能力分析数据,2个小时搞定! package com.example.de ...