I made this tutorial on how to make the marquee text you see on my homepage. Here's how it should look:
You will need two files: marq.js and marq.css. You can name them whatever you'd like, or you can even just embed everything in your HTML directly.
Let's start with the css. Add this first.
#marquee-container {
border: 1px solid black;
background: white;
color: black; /* text color */
margin: auto;
width: 100%;
max-width: 900px;
height: 30px;
overflow: hidden; /* this hides text as it scrolls in/out */
position: relative; /* lets it be absolutely positioned */
font-size: 20px;
line-height: 30px; /* vertically centers one line of text */
white-space: nowrap; /* keep the text on one line */
}
This is where the scrolling text will be. It will also create a one-line strip with a fixed height, hide overflow, and set up positioning.
Then we will add this!
#marquee-text {
position: absolute;
white-space: nowrap;
animation: marquee 10s linear infinite;
}
@keyframes marquee {
from { left: 100%; }
to { left: -100%; }
}
It is absolutely positioned and continuously translated from its starting position to -100%, making it glide left and loop forever. The padding-left: 100% pushes the content off-screen initially so it sorta slides in.
Yeah, that's pretty much it for the css, feel free to edit it however you like! I think this part is pretty straightforward, so now I'll do my best to explain the js :>
So for the js, we can start off by adding our messages. For this tutorial, there will be a welcoming message and 3 random messages.
// Javascript by caramelpuddinz on neocities
// Waits until the page has fully loaded before running the code
document.addEventListener('DOMContentLoaded', () => {
// Your list of random messages will go here
const messages = [
"seals are cool",
"moon jellies are my favourite",
"what does it feel like to be stung by a jellyfish?",
];
// This will grab the with id="marquee-text"
const marqueeText = document.getElementById('marquee-text');
// This is the special welcome message that only shows the first time
const welcomeMessage = "welcome~ this message will change every refresh, if you do it right!";
// Checks if the user has visited before using sessionStorage
if (!sessionStorage.getItem('visited')) {
// If not visited, it will show the welcome message
marqueeText.textContent = welcomeMessage;
// Then mark that they’ve visited, so next time it won’t show again
sessionStorage.setItem('visited', 'yes');
} else {
// If visited before, it will pick a random message from the list
const randomIndex = Math.floor(Math.random() * messages.length);
marqueeText.textContent = messages[randomIndex];
}
});
That's all for the js, hopefully my comments clear things up
Lastly, put this in your html, wherever you want the message box to be
<div id="marquee-container">
<div id="marquee-text"></div>
</div>
If you did everything correctly, it should work! The welcoming message will first appear but if you refresh it will display one of the random messages from the list. I hope my tutorial helps, credit would be appreciated :D
© caramelpuddinz 2025 - all rights reserved