前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【程序员装B系列】八种CSS3按钮动画特效

【程序员装B系列】八种CSS3按钮动画特效

作者头像
用户5997198
发布2019-09-19 14:53:17
发布2019-09-19 14:53:17
1.2K00
代码可运行
举报
文章被收录于专栏:蚂蚁开源社区蚂蚁开源社区
运行总次数:0
代码可运行
简要说明

这是一款CSS3按钮动画特效。在该特效中,提供了八种按钮动画特效。每种特效在鼠标悬停到按钮上面的时候,都会触发按钮动画。

代码解析

HTML结构

通用的按钮HTML结构如下。

代码语言:javascript
代码运行次数:0
运行
复制
<div class="item button-jittery" style="--bg-color: #f1c40f;">
  <button>Click Me!</button>
  <div class="name">Subtlety</div>
</div>

CSS样式

代码语言:javascript
代码运行次数:0
运行
复制
body {
                  color: #fff;
                  font-family: "Rubik", sans-serif;
                }

                .item.footer {
                  flex-wrap: wrap;
                  padding: 5rem;
                  text-align: center;
                  font-size: 18px;
                  line-height: 1.7;
                  grid-column: span 1;
                }
                @media screen and (min-width: 823px) and (max-width: 1223px) {
                  .item.footer {
                    grid-column: span 2;
                  }
                }
                .item.footer a {
                  text-decoration: none;
                  color: #fff;
                  padding: 3px 0;
                  border-bottom: 1px dashed;
                }
                .item.footer a:hover {
                  border-bottom: 1px solid;
                }

                footer {
                  margin-top: 1.5rem;
                }
                footer a {
                  text-decoration: none;
                  display: inline-block;
                  width: 45px;
                  height: 45px;
                  border-radius: 50%;
                  background: transparent;
                  border: 1px dashed #fff;
                  color: #fff;
                  margin: 5px;
                }
                footer a:hover {
                  background: rgba(255, 255, 255, 0.1);
                }
                footer a .icons {
                  margin-top: 8px;
                  display: inline-block;
                  font-size: 20px;
                }
                footer a .icons:before {
                  position: relative;
                }

                * {
                  box-sizing: border-box;
                }
                *:before, *:after {
                  content: "";
                  position: absolute;
                }

                .main-content {
                  display: grid;
                  width: 100%;
                  grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
                }
                .main-content .item {
                  display: grid;
                  grid-template-rows: 1fr min-content;
                  align-items: center;
                  justify-content: center;
                  height: 50vh;
                  flex-wrap: wrap;
                  background: var(--bg-color);
                }
                .main-content .item:not(.footer) {
                  padding-top: 1rem;
                }

                button {
                  background: transparent;
                  color: #fff;
                  border: 3px solid #fff;
                  border-radius: 50px;
                  padding: 0.8rem 2rem;
                  font: 24px "Margarine", sans-serif;
                  outline: none;
                  cursor: pointer;
                  position: relative;
                  transition: 0.2s ease-in-out;
                  letter-spacing: 2px;
                }

                .name {
                  width: 100%;
                  text-align: center;
                  padding: 0 0 3rem;
                  font: 500 14px 'Rubik', sans-serif;
                  letter-spacing: .5px;
                  text-transform: uppercase;
                  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4);
                }

                .button__wrapper {
                  display: inline-block;
                  position: relative;
                  width: 200px;
                  height: 65px;
                  display: flex;
                  justify-content: center;
                  align-items: center;
                }

                .button-pulse button {
                  background: var(--bg-color);
                  width: 100%;
                  height: 100%;
                  position: absolute;
                  top: 0;
                  left: 0;
                  z-index: 2;
                }
                .button-pulse .button__wrapper:hover .pulsing:before {
                  animation: pulsing 0.2s linear infinite;
                }
                .button-pulse .button__wrapper:hover .pulsing:after {
                  animation: pulsing1 0.2s linear infinite;
                }

                .pulsing {
                  width: 99%;
                  height: 99%;
                  border-radius: 50px;
                  z-index: 1;
                  position: relative;
                }
                .pulsing:before, .pulsing:after {
                  width: 100%;
                  height: 100%;
                  border: inherit;
                  top: 0;
                  left: 0;
                  z-index: 0;
                  background: #fff;
                  border-radius: inherit;
                  animation: pulsing 2.5s linear infinite;
                }
                .pulsing:after {
                  animation: pulsing1 2.5s linear infinite;
                }

                @keyframes pulsing {
                  0% {
                    opacity: 1;
                    transform: scaleY(1) scaleX(1);
                  }
                  20% {
                    opacity: 0.5;
                  }
                  70% {
                    opacity: 0.2;
                    transform: scaleY(1.8) scaleX(1.4);
                  }
                  80% {
                    opacity: 0;
                    transform: scaleY(1.8) scaleX(1.4);
                  }
                  90% {
                    opacity: 0;
                    transform: scaleY(1) scaleX(1);
                  }
                }
                @keyframes pulsing1 {
                  0% {
                    opacity: 1;
                    transform: scaleY(1) scaleX(1);
                  }
                  20% {
                    opacity: 0.5;
                  }
                  70% {
                    opacity: 0.2;
                    transform: scaleY(1.3) scaleX(1.15);
                  }
                  80% {
                    opacity: 0;
                    transform: scaleY(1.3) scaleX(1.15);
                  }
                  90% {
                    opacity: 0;
                    transform: scaleY(1) scaleX(1);
                  }
                }
                .button-typewriter button {
                  width: 100%;
                  height: 100%;
                }
                .button-typewriter p {
                  animation: typing 4s steps(12) infinite;
                  display: inline-block;
                  overflow: hidden;
                  white-space: nowrap;
                }
                .button-typewriter .button__wrapper:hover p {
                  animation: blink 0.3s infinite;
                }

                @keyframes typing {
                  0% {
                    width: 0;
                  }
                  50% {
                    width: 100%;
                  }
                  55%,
                        65%,
                        75% {
                    opacity: 1;
                  }
                  60%,
                        70% {
                    opacity: 0;
                  }
                  80% {
                    width: 100%;
                  }
                  100% {
                    width: 0;
                  }
                }
                .button-parrot .parrot {
                  position: absolute;
                  width: 60px;
                  text-align: center;
                  animation: blink 0.8s infinite;
                  color: transparent;
                }
                .button-parrot .parrot:before {
                  content: "Click Me!";
                }
                .button-parrot .parrot:nth-child(1) {
                  top: -30px;
                  left: -40px;
                  font: 12px/1 "Margarine", sans-serif;
                  transform: rotate(-20deg);
                  animation-duration: 0.5s;
                }
                .button-parrot .parrot:nth-child(2) {
                  font: 12px/1 "Margarine", sans-serif;
                  right: -40px;
                  top: -20px;
                  transform: rotate(15deg);
                  animation-duration: 0.3s;
                }
                .button-parrot .parrot:nth-child(3) {
                  font: 16px/1 "Margarine", sans-serif;
                  top: -60px;
                  left: 15px;
                  transform: rotate(10deg);
                  animation-duration: 1s;
                }
                .button-parrot .parrot:nth-child(4) {
                  font: 18px/1 "Margarine", sans-serif;
                  top: -70px;
                  left: 95px;
                  transform: rotate(2deg);
                  animation-duration: 0.7s;
                }
                .button-parrot .parrot:nth-child(5) {
                  font: 14px/1 "Margarine", sans-serif;
                  top: 80px;
                  left: 105px;
                  transform: rotate(-20deg);
                  animation-duration: 0.8s;
                }
                .button-parrot .parrot:nth-child(6) {
                  font: 12px/1 "Margarine", sans-serif;
                  top: 80px;
                  left: 5px;
                  transform: rotate(10deg);
                  animation-duration: 1.2s;
                }
                .button-parrot button:hover .parrot:before {
                  content: "Do it!";
                  width: 70px;
                }

                @keyframes blink {
                  25%,
                        75% {
                    color: transparent;
                  }
                  40%,
                        60% {
                    color: #fff;
                  }
                }
                .button-hand button:before {
                  content: "&#128071;";
                  font-size: 60px;
                  transform: scaleX(-1);
                  right: 0px;
                  top: -68px;
                  animation: up-down 1s infinite;
                }
                .button-hand button .hands:before, .button-hand button .hands:after {
                  content: "&#128071;";
                  font-size: 40px;
                  opacity: 0;
                  transition: 0.4s ease-in-out;
                }
                .button-hand button .hands:before {
                  transform: rotate(-60deg);
                  left: -45px;
                  top: -10px;
                }
                .button-hand button .hands:after {
                  transform: rotate(170deg);
                  right: 30px;
                  top: 50px;
                }
                .button-hand button:hover .hands:before {
                  opacity: 1;
                  left: -35px;
                }
                .button-hand button:hover .hands:after {
                  opacity: 1;
                  top: 40px;
                }

                @keyframes up-down {
                  50% {
                    margin-top: -20px;
                  }
                }
                .button-100 .emoji {
                  position: absolute;
                  top: -45px;
                  left: 0;
                  width: 35px;
                  height: 35px;
                  overflow: hidden;
                }
                .button-100 .emoji:before {
                  content: "&#128175;";
                  display: inline-block;
                  animation: give-score 2.5s infinite;
                  position: relative;
                  top: 0;
                }
                .button-100 .emoji:nth-child(2) {
                  left: 0;
                  right: 0;
                  margin: auto;
                }
                .button-100 .emoji:nth-child(2):before {
                  animation: give-score 2.5s infinite 0.2s;
                }
                .button-100 .emoji:nth-child(3) {
                  left: auto;
                  right: 0;
                }
                .button-100 .emoji:nth-child(3):before {
                  animation: give-score 2.5s infinite 0.4s;
                }
                .button-100 button:hover .emoji:before {
                  content: "&#128079;";
                  transition: 0.5s ease;
                }

                @keyframes give-score {
                  30%,
                        80% {
                    top: 0;
                  }
                  40%,
                        70% {
                    top: 50px;
                  }
                }
                .button-pressure marquee {
                  position: absolute;
                  width: 90%;
                  top: 125%;
                  left: 5%;
                  font: 18px/1 "Margarine", sans-serif;
                }
                .button-pressure marquee span {
                  display: inline-block;
                  height: 20px;
                }
                .button-pressure marquee span:not(:last-child) {
                  margin-right: 130px;
                }
                .button-pressure button:before {
                  content: "OMG YAS";
                  transition: 0.5s ease;
                  left: 0;
                  right: 0;
                  margin: auto;
                  top: -15px;
                  font-size: 12px;
                  opacity: 0;
                }
                .button-pressure button:hover:before {
                  animation: omg-yes 1s;
                }

                .button-rainbow button {
                  animation: rainbow 3s infinite, heartbeat 0.6s infinite;
                  background: #c0392b;
                }
                .button-rainbow button .rainbow {
                  width: 120px;
                  height: 120px;
                  border-radius: 50%;
                  position: absolute;
                  left: 0;
                  right: 0;
                  margin: auto;
                  top: -40px;
                  transition: 0.5s ease;
                  opacity: 0;
                  transform: rotate(0);
                }
                .button-rainbow button .rainbow:before {
                  content: "&#127752;";
                  left: 0;
                }
                .button-rainbow button:hover .rainbow {
                  opacity: 1;
                  animation: rotate-nonstop 0.2s infinite;
                }
                .button-rainbow button + .name {
                  color: #444;
                }

                @keyframes rotate-nonstop {
                  50% {
                    transform: rotate(92deg);
                  }
                }
                @keyframes omg-yes {
                  50% {
                    opacity: 1;
                  }
                  100% {
                    top: -50px;
                  }
                }
                @keyframes rainbow {
                  0% {
                    background: #1abc9c;
                  }
                  10% {
                    background: #2ecc71;
                  }
                  20% {
                    background: #3498db;
                  }
                  30% {
                    background: #9b59b6;
                  }
                  40% {
                    background: #e74c3c;
                  }
                  50% {
                    background: #e67e22;
                  }
                  60% {
                    background: #f1c40f;
                  }
                  70% {
                    background: #2c3e50;
                  }
                  80% {
                    background: #9b59b6;
                  }
                }
                .button-jittery button {
                  animation: jittery 4s infinite;
                }
                .button-jittery button:hover {
                  animation: heartbeat 0.2s infinite;
                }

                @keyframes jittery {
                  5%,
                        50% {
                    transform: scale(1);
                  }
                  10% {
                    transform: scale(0.9);
                  }
                  15% {
                    transform: scale(1.15);
                  }
                  20% {
                    transform: scale(1.15) rotate(-5deg);
                  }
                  25% {
                    transform: scale(1.15) rotate(5deg);
                  }
                  30% {
                    transform: scale(1.15) rotate(-3deg);
                  }
                  35% {
                    transform: scale(1.15) rotate(2deg);
                  }
                  40% {
                    transform: scale(1.15) rotate(0);
                  }
                }
                @keyframes heartbeat {
                  50% {
                    transform: scale(1.1);
                  }
                }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 蚂蚁大喇叭 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档