用原生CSS编写-怦怦跳的心
<!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编写-怦怦跳的心的更多相关文章
- 用原生CSS编写动态字体
HTML部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...
- canvas :原生javascript编写动态时钟
canvas :原生javascript编写动态时钟 此时针是以画布的中心为圆心: g.translate(width/2,width/2); 此函数是将画布的原点移到(width/2,wid ...
- 原生 Javascript 编写五子棋
原文地址:原生 Javascript 编写五子棋 博客地址:http://www.extlight.com 一.背景 近一个月没写 Javascript 代码,有点生疏.正好浏览网页时弹出五子棋的游戏 ...
- 原生 CSS 网格布局学习笔记
下是来自Oliver Williams的帖子. Oliver已经学习了相当长时间的原生CSS网格,可以说是在CSS网格方面有一定的发言权.在这篇文章中,他将以非同寻常的思路分析自己的CSS网格布局学习 ...
- HTML+CSS编写规范
在任何一个项目或者系统开发之前都需要定制一个开发约定和规则,这样有利于项目的整体风格统一.代码维护和扩展.由于Web项目开发的分散性.独立性.整合的交互性等,所以定制一套完整的约定和规则显得尤为重要. ...
- 关于错位动画的练习,原生js编写
最近在网上看到一个关于错位动画的文章,感觉非常有趣,便自己练习了一下,文章连接:http://www.w3cplus.com/animation/staggering-animations.html ...
- css编写注意事项(不定时更新)
CSS的编写是需要积累的,而一个好的css编写习惯对我们将来的成长是非常有利的,我会把我平时看到的或者遇到的会不定时的更新到这里,不时翻一下,但求有所进步. 如果各位看官也有看法和建议,评论下,我也会 ...
- 个人css编写规范
前言:最近在做微信小程序,因为公司小,就我一个人弄前端的东西,js和页面都是我来弄,结果那天后台的人看到我的js代码,说我的代码写得不规范,函数什么的都很乱,弄得我羞愧难当,幸亏没看我的css,其实我 ...
- 原生css 中变量的使用
前两天看到阮大神的一篇在css中使用变量的文章,整理了一下. 这个重要的 CSS 新功能,所有主要浏览器已经都支持了.本文全面介绍如何使用它,你会发现原生 CSS 从此变得异常强大. 一.变量的声明 ...
随机推荐
- 从零开始搭建你的nvim ide
前言概述 vim由于其丰富的扩展性.出色的跨平台性.高效率的操作性深受一大批粉丝的追捧,甚至就连vim和emacs之间孰优孰劣的话题都能被引起一场编辑器之间的圣战,足以见vim是多么的优秀. vim的 ...
- Cannot find ./catalina.sh The file is absent or does not have execute permission This file is needed to run this program(问题解决)
web项目没有打成包,直接放在了linux服务器上. 进入tomcat/bin目录,执行启动的时候出现如下错误: 解决方法: 在tomcat 的bin目录下 执行这条命令chmod +x *.sh ...
- LeetCode -90. 子集 II C++ (回溯法)
class Solution { public: vector<vector<int>> subsetsWithDup(vector<int>& nums) ...
- oracle的 listagg() WITHIN GROUP () 行转列函数的使用
1.使用条件查询 查询部门为20的员工列表 -- 查询部门为20的员工列表 SELECT t.DEPTNO,t.ENAME FROM SCOTT.EMP t where t.DEPTNO ...
- VLAN实验
VLAN实验 如图所示:图中共有四个广播域,左边逻辑的分为两个广播域,右边也是逻辑的分为两个广播域, 配置顺序先配置交换机,在配置路由器 SW1 配置: 1.首先创建vlan [sw1]vlan ba ...
- Part 33 Angular nested scopes and controller as syntax
Working with nested scopes using $scope object : The following code creates 3 controllers - country ...
- 我罗斯方块最终篇(Interface类)
负责的任务 游戏过场及界面设计 Interface类的基础实现 根据队友需求完善Interface类功能 Interface类的本地测试 辅助队友改良游戏操作 代码要点 我们主要是通过控制台进行界面渲 ...
- Java 中的关键字
Java 中有多少个关键字,有大小写之分吗? Java 中有 48 个关键字在使用 + 两个保留关键字未使用,共 50 个关键字. Java 关键字全部都由是小写组成. Java 中保留关键字分别是哪 ...
- 菜鸡的Java笔记 第六 - java 方法
前提:现在所讲解的方法定义格式,只属于JAVA 方法定义的其中一种组成方式.而完整的组成方式将随着学习逐步渗透. 1.方法的基本定义 方法(Method)在一些书中也会有人将其说是 函数(Funct ...
- 算法学习->整数拆分问题
动态规划典型题目/ 00 题目 将正整数n无需拆分为最大数为k的拆分方案有多少种?要求所有的拆分方案不重复. 示例: 输入:n=5,k=5 输出:(5,5)=7 示例分析: 5=5 5=4+1 5= ...