/ Gists / Neon button
On gists

Neon button

CSS CSS trick

index.html Raw #

<!-- https://jsbin.com/liyigoniku/edit?html,css,output -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="style.css">
  <title>Neon Button</title>
</head>
<body>
  <a class="neon">Neon</a>
</body>
</html>

index.css Raw #

/**
*  @project   CSS Neon Button
*  @author    Jamshid Elmi
*  @created   2022-04-06 23:37:45
*  @modified  2022-04-06 23:37:45
*  @tutorial  https://youtu.be/Jqsb06RlQ6g
*/
@import url('https://fonts.googleapis.com/css2?family=Balsamiq+Sans&display=swap');

:root {
  --clr-neon: #14f7ff;
  --clr-bg: #001414;
  --font-size: 3rem;
}

*, 
*::after,
*::before {
  box-sizing: border-box;
}

body {
  min-height: 100vh;
  display: grid;
  place-items: center;
  background: var(--clr-bg);
  color: var(--clr-neon);
  font-family: "Balsamiq Sans";
  overflow: hidden;
}

.neon {
  margin-top: -150px;
  font-size: var(--font-size);
  display: inline-block;
  position: relative;
  cursor: pointer;
  border: var(--clr-neon) 0.125em solid;
  padding: 0.25em 1em;
  border-radius: 0.25em;
  text-shadow: 
    0 0 .20em #FFF7,
    0 0 .30em var(--clr-neon);
  box-shadow: 
    inset 0 0 .5em var(--clr-neon),
          0 0 .5em var(--clr-neon);
}

.neon::before {
  content: "";
  position: absolute;
  top: 140%;
  left: 0;
  width: 100%;
  height: 100%;
  background: var(--clr-neon);
  transform: 
    perspective(0.2em)
    rotateX(10deg) 
    scale(1.3, 0.40);
  filter: blur(0.5em);
  opacity: 0.6;

  pointer-events: none;
  transition: opacity 100ms linear;
}

.neon::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: var(--clr-neon);
  box-shadow: 0 0 2em var(--clr-neon);
  z-index: -1;
  opacity: 0;
  transition: opacity 100ms linear;
}

.neon:hover::after {
  opacity: 1;
}
.neon:hover, .neon:focus {
  color: white;
}
.neon:hover::before {
  opacity: 0.8;
}