Overview
The Marquee component creates an eye-catching, infinitely scrolling banner that showcases your tech stack. It features a slanted design with bold typography and smooth CSS animations.Features
- Infinite horizontal scroll animation
- Duplicated tracks for seamless looping
- Slanted container design (-1.5deg rotation)
- Tech stack with icon separators
- Fully customizable tech list
- Pure CSS animation (no JavaScript)
- Responsive typography
Implementation
The component is located atsrc/components/Marquee/Marquee.jsx:
How It Works
Tech Stack Array
The component uses a simple array to define the technologies:Track Component
TheTrack function creates a single track of technologies with icon separators:
Multiple Tracks for Seamless Loop
Four<Track /> components are rendered to ensure the animation never shows gaps:
CSS Module Styling
Wrapper with Slanted Design
- 110% width extends beyond viewport
- Negative margin centers the extended width
- -1.5deg rotation creates dynamic angle
- Overflow hidden prevents content spillage
Scroll Container
Track and Items
Animation
The animation is defined globally inindex.css:
-50% transform creates a perfect loop when combined with duplicated tracks.
Customization
Update Tech Stack
Modify thetechs array in Marquee.jsx:
Change Icon
Replace the Material Icon name:Adjust Animation Speed
Modify the animation duration inindex.css:
Change Background Color
Update the wrapper background inMarquee.module.css:
Adjust Rotation Angle
Change the slant degree:Modify Typography
Adjust font size range:Change Border Style
Adjust Padding/Height
Add Gradient Background
Usage in App
Import and place the Marquee component anywhere in your layout:Performance Considerations
- Pure CSS animation (GPU accelerated)
- No JavaScript calculations during animation
- Uses
transformfor optimal performance - Linear timing function for smooth, consistent speed
Accessibility
- Decorative component (primarily visual)
- Consider adding
aria-labelfor screen readers:
- Respects
prefers-reduced-motion:
Material Icons Dependency
This component requires Material Icons. Ensure you have it loaded in yourindex.html:
CSS Variables Used
--color-primary- Marquee background color
Browser Support
- Modern browsers with CSS animations support
- Flexbox support required
- CSS transforms support required
- CSS custom properties support required