📖 Scenario: You are building a simple web page that shows a loading spinner while content is loading. This spinner should rotate continuously to indicate progress.
🎯 Goal: Create a spinning loading animation using Tailwind CSS classes on a simple HTML element.
📋 What You'll Learn
Use Tailwind CSS utility classes to create a spinner
Apply the built-in spin animation class
Use semantic HTML with a div element for the spinner
Make sure the spinner is visible and centered on the page
Add accessible text for screen readers
💡 Why This Matters
🌍 Real World
Loading spinners are common on websites and apps to show users that something is happening in the background.
💼 Career
Knowing how to create accessible and visually appealing loading animations is useful for frontend web developers and UI designers.
Progress0 / 4 steps
1
Create the HTML skeleton with a container
Create a basic HTML5 skeleton with lang="en", meta charset="UTF-8", and a body containing a div with the class flex and justify-center to center content horizontally.
Tailwind
Hint
Start with a simple HTML page and add a container div with Tailwind classes flex and justify-center inside the body.
2
Add the spinner element with size and border
Inside the centered div, add another div with Tailwind classes w-12, h-12, border-4, border-gray-300, and rounded-full to create a circle with a border.
Tailwind
Hint
Add the size and border classes to the inner div to form a circle shape with a gray border.
3
Add the spin animation and colored border segment
Add the Tailwind class animate-spin to the spinner div. Also add border-t-blue-500 to color the top border blue, so the spinner looks like it is spinning.
Tailwind
Hint
Use Tailwind's animate-spin class to make the spinner rotate. Color the top border with border-t-blue-500 for the spinning effect.
4
Add accessible text for screen readers
Inside the spinner div, add a span with the class sr-only and the text Loading... to provide accessible text for screen readers.
Tailwind
Hint
Add a span with class sr-only inside the spinner div to provide text for screen readers.
Practice
(1/5)
1. What does the Tailwind CSS class animate-spin do to an element?
easy
A. Makes the element rotate continuously like a spinner
B. Changes the element's color to spinning colors
C. Stops any animation on the element
D. Makes the element fade in and out repeatedly
Solution
Step 1: Understand the purpose of animate-spin
The animate-spin class in Tailwind applies a continuous rotation animation to the element.
Step 2: Compare with other animation effects
Other options describe color changes or fading, which are not what animate-spin does.
Final Answer:
Makes the element rotate continuously like a spinner -> Option A
Quick Check:
animate-spin = continuous rotation [OK]
Hint: Remember spin means rotate continuously [OK]
Common Mistakes:
Confusing spin with color or fade animations
Thinking it stops animation
Assuming it changes element size
2. Which of the following is the correct Tailwind CSS syntax to create a spinning loader with a border?
easy
A. <div class='border-4 border-blue-500 spin-animation rounded-full'></div>
B. <div class='border-4 border-blue-500 spin animate rounded-full'></div>
C. <div class='border-4 border-blue-500 animate-spin-round rounded-full'></div>
D. <div class='border-4 border-blue-500 animate-spin rounded-full'></div>
Solution
Step 1: Identify the correct animation class
The official Tailwind class for spinning is animate-spin, so options A, B, and C use incorrect or non-existent classes.
Step 2: Check the border and shape classes
<div class='border-4 border-blue-500 animate-spin rounded-full'></div> correctly uses border-4 for thickness, border-blue-500 for color, and rounded-full for a circle shape.
Final Answer:
<div class='border-4 border-blue-500 animate-spin rounded-full'></div> -> Option D
B. A 48x48 pixel gray circle with a blue top border spinning continuously
C. A spinning square with gray and blue borders
D. A 12x12 pixel blue circle spinning continuously
Solution
Step 1: Analyze size and shape classes
w-12 and h-12 set width and height to 3rem (48px). rounded-full makes it a circle.
Step 2: Understand border colors and animation
border-4 sets border thickness. border-gray-300 colors all borders gray except border-t-blue-600 which colors top border blue. animate-spin makes it spin continuously.
Final Answer:
A 48x48 pixel gray circle with a blue top border spinning continuously -> Option B
Quick Check:
Size 12 + rounded + border colors + spin = 48x48 pixel gray circle with a blue top border spinning continuously [OK]
Hint: Remember w-12 = 3rem (48px), rounded-full = circle [OK]
A. The class spin is not a valid Tailwind animation class
B. Missing border-t-transparent to create spinner effect
C. The border-4 class is too thin to show animation
D. The rounded-full class disables animation
Solution
Step 1: Check animation class correctness
The class spin does not exist in Tailwind. The correct class for spinning is animate-spin.
Step 2: Understand other classes' roles
border-4 and rounded-full do not affect animation. Missing border-t-transparent affects spinner style but not rotation.
Final Answer:
The class spin is not a valid Tailwind animation class -> Option A
Quick Check:
Use animate-spin for rotation [OK]
Hint: Use exact class animate-spin for spinning [OK]
Common Mistakes:
Using spin instead of animate-spin
Thinking border thickness affects animation
Assuming rounded-full disables animation
5. You want to create an accessible spinning loader that announces "Loading" to screen readers but is visually hidden. Which Tailwind classes and attributes should you add?
hard
A. <div role='alert' aria-live='off'>Loading</div>
B. <div aria-hidden='true'>Loading...</div>
C. <div role='status' aria-live='polite'><span class='sr-only'>Loading...</span></div>
D. <div class='animate-spin' aria-label='Loading spinner'>Loading</div>
Solution
Step 1: Use ARIA roles and live regions for announcements
Setting role='status' and aria-live='polite' tells screen readers to announce changes politely.
Step 2: Hide visible text but keep it accessible
The sr-only class hides text visually but keeps it readable by screen readers, perfect for "Loading..." message.
Final Answer:
<div role='status' aria-live='polite'><span class='sr-only'>Loading...</span></div> -> Option C
Quick Check:
Use role='status' + sr-only for accessible loading [OK]
Hint: Use sr-only for hidden accessible text [OK]
Common Mistakes:
Using aria-hidden hides content from screen readers
Wrong aria-live values prevent announcements
Not using sr-only hides text visually and accessibly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.