Back
Learn how to design an eye-catching neon button with vibrant glow effects and subtle pulse animation using CSS.
<div class="button-container">
<button class="neon-button">Neon Glow</button>
</div>
You can customize the button text to match your specific design needs.
.button-container {
display: flex;
justify-content: center;
align-items: center;
background-color: #0F172A;
padding: 20px;
border-radius: 8px;
}
Next, we define our neon button with CSS variables for easy customization:
.neon-button {
--neon-color: #00FFFF;
--neon-color-dim: rgba(0, 255, 255, 0.2);
--button-padding: 14px 28px;
--button-font-size: 18px;
--glow-spread: 10px;
--pulse-duration: 2s;
position: relative;
font-family: 'Arial', sans-serif;
font-weight: bold;
font-size: var(--button-font-size);
text-transform: uppercase;
letter-spacing: 2px;
color: var(--neon-color);
background-color: transparent;
border: 2px solid var(--neon-color);
border-radius: 4px;
padding: var(--button-padding);
cursor: pointer;
text-shadow: 0 0 8px var(--neon-color-dim);
box-shadow:
0 0 var(--glow-spread) var(--neon-color-dim),
inset 0 0 var(--glow-spread) var(--neon-color-dim);
transition: all 0.3s ease;
overflow: hidden;
animation: pulse var(--pulse-duration) infinite alternate;
}
The key properties here:
- We define the neon color and a dimmer version for the glow effects
- The transparent background and border create the neon tube appearance
- Text-shadow and box-shadow create the glow effect
- We apply a pulse animation that runs infinitely, alternating between states
To create the fill effect on hover, we use a pseudo-element:
.neon-button::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: var(--neon-color);
opacity: 0;
z-index: -1;
transition: opacity 0.3s ease;
}
Next, we define the hover and active states for interactive feedback:
.neon-button:hover {
color: #000;
text-shadow: none;
box-shadow:
0 0 calc(var(--glow-spread) * 1.5) var(--neon-color),
inset 0 0 calc(var(--glow-spread) * 1.5) var(--neon-color);
}
.neon-button:hover::before {
opacity: 0.8;
}
.neon-button:active {
transform: scale(0.95);
box-shadow:
0 0 calc(var(--glow-spread) * 2) var(--neon-color),
inset 0 0 calc(var(--glow-spread) * 2) var(--neon-color);
}
The hover effect creates a stronger glow and fills the button with the neon color, while the active state adds a scale transform for a press effect.
The pulse animation is defined using @keyframes:
/* Pulsing animation */
@keyframes pulse {
0% {
box-shadow:
0 0 var(--glow-spread) var(--neon-color-dim),
inset 0 0 var(--glow-spread) var(--neon-color-dim);
}
100% {
box-shadow:
0 0 calc(var(--glow-spread) * 1.2) var(--neon-color),
inset 0 0 calc(var(--glow-spread) * 0.8) var(--neon-color);
}
}
This animation cycles the glow intensity from dim to bright, creating the classic neon pulsing effect.
Finally, we add focus styles for accessibility and show how to create color variations:
/* Focus state for accessibility */
.neon-button:focus {
outline: none;
box-shadow:
0 0 var(--glow-spread) var(--neon-color),
inset 0 0 var(--glow-spread) var(--neon-color),
0 0 0 3px rgba(0, 255, 255, 0.3);
}
/* Change neon color by modifying variables */
/* Example for different colors: */
.neon-button.magenta {
--neon-color: #FF00FF;
--neon-color-dim: rgba(255, 0, 255, 0.2);
}
.neon-button.green {
--neon-color: #00FF00;
--neon-color-dim: rgba(0, 255, 0, 0.2);
}
The focus state maintains the neon effect while adding a subtle focus ring, and the color variations show how to easily create different neon colors using CSS variables.
This neon glow button offers several advantages:
- Visual impact: Stands out dramatically on dark backgrounds.
- Attention-grabbing: The pulsing glow naturally draws the user's eye.
- Versatile theming: Easy to adapt to different color schemes by changing a few variables.
- Interactive feedback: Multiple states (hover, active) provide clear interaction cues.
- Engaging animation: The subtle pulse creates movement without being distracting.
This button style is perfect for gaming websites, entertainment platforms, nightlife venues, or any interface with a dark theme where you want to create a vibrant, energetic feel.
<div class="button-container">
<button class="neon-button">Neon Glow</button>
</div>
<style>
.button-container {
display: flex;
justify-content: center;
align-items: center;
background-color: #0F172A;
padding: 20px;
border-radius: 8px;
}
.neon-button {
--neon-color: #00FFFF;
--neon-color-dim: rgba(0, 255, 255, 0.2);
--button-padding: 14px 28px;
--button-font-size: 18px;
--glow-spread: 10px;
--pulse-duration: 2s;
position: relative;
font-family: 'Arial', sans-serif;
font-weight: bold;
font-size: var(--button-font-size);
text-transform: uppercase;
letter-spacing: 2px;
color: var(--neon-color);
background-color: transparent;
border: 2px solid var(--neon-color);
border-radius: 4px;
padding: var(--button-padding);
cursor: pointer;
text-shadow: 0 0 8px var(--neon-color-dim);
box-shadow:
0 0 var(--glow-spread) var(--neon-color-dim),
inset 0 0 var(--glow-spread) var(--neon-color-dim);
transition: all 0.3s ease;
overflow: hidden;
animation: pulse var(--pulse-duration) infinite alternate;
}
.neon-button::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: var(--neon-color);
opacity: 0;
z-index: -1;
transition: opacity 0.3s ease;
}
.neon-button:hover {
color: #000;
text-shadow: none;
box-shadow:
0 0 calc(var(--glow-spread) * 1.5) var(--neon-color),
inset 0 0 calc(var(--glow-spread) * 1.5) var(--neon-color);
}
.neon-button:hover::before {
opacity: 0.8;
}
.neon-button:active {
transform: scale(0.95);
box-shadow:
0 0 calc(var(--glow-spread) * 2) var(--neon-color),
inset 0 0 calc(var(--glow-spread) * 2) var(--neon-color);
}
/* Pulsing animation */
@keyframes pulse {
0% {
box-shadow:
0 0 var(--glow-spread) var(--neon-color-dim),
inset 0 0 var(--glow-spread) var(--neon-color-dim);
}
100% {
box-shadow:
0 0 calc(var(--glow-spread) * 1.2) var(--neon-color),
inset 0 0 calc(var(--glow-spread) * 0.8) var(--neon-color);
}
}
/* Focus state for accessibility */
.neon-button:focus {
outline: none;
box-shadow:
0 0 var(--glow-spread) var(--neon-color),
inset 0 0 var(--glow-spread) var(--neon-color),
0 0 0 3px rgba(0, 255, 255, 0.3);
}
/* Change neon color by modifying variables */
/* Example for different colors: */
.neon-button.magenta {
--neon-color: #FF00FF;
--neon-color-dim: rgba(255, 0, 255, 0.2);
}
.neon-button.green {
--neon-color: #00FF00;
--neon-color-dim: rgba(0, 255, 0, 0.2);
}
</style>
Thank you for reading this article.
Comments
No comments yet. Be the first to comment!