Hello worldHello worldHello worldHello world
Hello worldHello worldHello worldHello world
MarqueeTag.tsx
MarqueeTag.module.css
import React from "react";import styles from "./MarqueeTag.module.css";interface MarqueeStyles extends React.CSSProperties { "--duration": string;}export default function MarqueeTag() { const [numOfElements, setNumOfElements] = React.useState(4); const [duration, setDuration] = React.useState(5); const marqueeStyles: MarqueeStyles = { "--duration": `${duration}s`, }; return ( <> <div className="overflow-hidden border border-solid "> <div className="flex w-[200%]"> <div className={`w-1/2 flex justify-around ${styles.marquee}`} style={marqueeStyles} > {[...Array(numOfElements)].map((_, i) => { return <span key={i}>Hello world</span>; })} </div> <div className={`w-1/2 flex justify-around ${styles.marquee}`} style={marqueeStyles} > {[...Array(numOfElements)].map((_, i) => { return <span key={i}>Hello world</span>; })} </div> </div> </div> <label> Number of elements <input type="range" min={1} max={6} value={numOfElements} onChange={(e) => setNumOfElements(Number(e.target.value))} /> </label> <label> Duration <input type="range" min={1} max={10} value={duration} onChange={(e) => setDuration(Number(e.target.value))} /> </label> </> );}