THE REFERENCE ROOM

Make it respond.

HTML supplies the elements. CSS gives them a visual state. JavaScript listens for an action and changes that state.

Variables and selection

Variables and selection

const names a value you do not reassign. querySelector finds the first matching element.

<button type="button" id="trigger">Try it</button>
<p id="message">Down the Rabbit-Hole</p>
Edit HTML
.highlight { background: #7FFF00; padding: 20px; }
.enter { animation: enter .8s ease-out; }
@keyframes enter {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .enter { animation: none; }
}
Edit CSS
const message = document.querySelector("#message");
const chapter = "A curious beginning";
message.textContent = chapter;
Edit JAVASCRIPT

Try this → Change the selected element, class or displayed text, then click Try it.

Events and text

Events and text

addEventListener waits for an event. A native button handles keyboard activation too.

<button type="button" id="trigger">Try it</button>
<p id="message">Down the Rabbit-Hole</p>
Edit HTML
.highlight { background: #7FFF00; padding: 20px; }
.enter { animation: enter .8s ease-out; }
@keyframes enter {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .enter { animation: none; }
}
Edit CSS
const button = document.querySelector("#trigger");
const message = document.querySelector("#message");
button.addEventListener("click", () => {
  message.textContent = "Curiouser and curiouser!";
});
Edit JAVASCRIPT

Try this → Change the selected element, class or displayed text, then click Try it.

Adding a class

Adding a class

JavaScript changes state; CSS defines its appearance.

<button type="button" id="trigger">Try it</button>
<p id="message">Down the Rabbit-Hole</p>
Edit HTML
.highlight { background: #7FFF00; padding: 20px; }
.enter { animation: enter .8s ease-out; }
@keyframes enter {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .enter { animation: none; }
}
Edit CSS
document.querySelector("#trigger").addEventListener("click", () => {
  document.querySelector("#message").classList.add("highlight");
});
Edit JAVASCRIPT

Try this → Change the selected element, class or displayed text, then click Try it.

Removing a class

Removing a class

Start with a class, then remove it on click.

<button type="button" id="trigger">Try it</button>
<p id="message">Down the Rabbit-Hole</p>
Edit HTML
.highlight { background: #7FFF00; padding: 20px; }
.enter { animation: enter .8s ease-out; }
@keyframes enter {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .enter { animation: none; }
}
Edit CSS
const message = document.querySelector("#message");
message.classList.add("highlight");
document.querySelector("#trigger").addEventListener("click", () => {
  message.classList.remove("highlight");
});
Edit JAVASCRIPT

Try this → Change the selected element, class or displayed text, then click Try it.

Toggling a class

Toggling a class

toggle adds a missing class or removes an existing one.

<button type="button" id="trigger">Try it</button>
<p id="message">Down the Rabbit-Hole</p>
Edit HTML
.highlight { background: #7FFF00; padding: 20px; }
.enter { animation: enter .8s ease-out; }
@keyframes enter {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .enter { animation: none; }
}
Edit CSS
document.querySelector("#trigger").addEventListener("click", () => {
  document.querySelector("#message").classList.toggle("highlight");
});
Edit JAVASCRIPT

Try this → Change the selected element, class or displayed text, then click Try it.

Showing and hiding

Showing and hiding

The hidden property controls whether an element is displayed.

<button type="button" id="trigger">Try it</button>
<p id="message">Down the Rabbit-Hole</p>
Edit HTML
.highlight { background: #7FFF00; padding: 20px; }
.enter { animation: enter .8s ease-out; }
@keyframes enter {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .enter { animation: none; }
}
Edit CSS
document.querySelector("#trigger").addEventListener("click", () => {
  const message = document.querySelector("#message");
  message.hidden = !message.hidden;
});
Edit JAVASCRIPT

Try this → Change the selected element, class or displayed text, then click Try it.

Triggering an animation

Triggering an animation

Remove the class and allow two frames before restoring it to restart the same animation.

<button type="button" id="trigger">Try it</button>
<p id="message">Down the Rabbit-Hole</p>
Edit HTML
.highlight { background: #7FFF00; padding: 20px; }
.enter { animation: enter .8s ease-out; }
@keyframes enter {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .enter { animation: none; }
}
Edit CSS
const message = document.querySelector("#message");
document.querySelector("#trigger").addEventListener("click", () => {
  message.classList.remove("enter");
  requestAnimationFrame(() => {
    requestAnimationFrame(() => message.classList.add("enter"));
  });
});
Edit JAVASCRIPT

Try this → Change the selected element, class or displayed text, then click Try it.