JS toggle class animation example

Change class name on click

by Emanuele del Grande

HTML

<div class="logo">
    <span>CSS</span> <span>Transition</span>
    <div>CSS transition with class swap</div>
</div>

<p>
The CSS class is swapped through JS, the transition applied only through CSS.
</p>

<div id="banner-message">
  <p>Click to animate popup size and colors</p>
  <button>Change color</button>
</div>

CSS

@import url(https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap);

:root {
  --font-color: #444;
  --font-family: Inter, Roboto, Arial, Helvetica;
  --font-size: 14px;
  --font-weight: 300;
  --letter-spacing: -0.5px;
  --main-color: #607f8b; /* #4ae */
  --inner-border-width: 1px;
  --border-color: #ddd;
  --v-padding: 10px;
}


/* GENERIC STYLE */
*, *:before, *:after { margin; 0; padding: 0; box-sizing: border-box; outline: none; }
html, body {
    font: 14px var(--font-family); color: var(--font-color); line-height: 1.4em;
    font-weight: var(--font-weight); letter-spacing: var(--letter-spacing);
}
.logo { font: 42px var(--font-family); margin: 0; padding: 10px 0 0 20px; font-weight: 800; letter-spacing: -3px; white-space: nowrap; }
.logo span:first-child {
    position: relative; top: 0; left: 0; padding: 0 13px 0 10px; color: var(--main-color); background: var(--main-color); color: #fff;
    clip-path: ellipse(100% 125% at 100% 50%); z-index: 1;
}
.logo span:nth-child(2) { position: relative;top: 0; left: 0; margin: 0 0 0 -13px; background: transparent; z-index: 2; }

.logo div { font: 12px var(--font-family); padding: 0 0 0 70px; letter-spacing: -0.5px; }


/* POPUP STYLES */
body { background: #eee; }
#banner-message {
    width: 300px; margin: 0 auto; padding: 20px; border-radius: 4px; font-size: 25px;
    line-height: 1em; background: #fff; text-align: center; transition: all 0.2s;
}
button {
  padding: 8px 14px; border: none; border-radius: 5px; font-size: 15px;
  color: #fff; background: #0084ff;
}
#banner-message.alt { width: 200px; margin-top: 40px; color: #fff; background: #0084ff; }
#banner-message.alt button { background: #fff; color: #000; }

JavaScript

// find elements
var $banner = document.querySelector("#banner-message");
var $btn = document.querySelector("button");

// handle click and add class
$btn.addEventListener("click", function(e) {
	$banner.classList.toggle("alt");
});