A CSS sprite bundles many small images, icons, buttons, logos, into a single larger image file, then uses CSS background-position to show only the relevant slice of that combined file wherever each individual icon is needed. The browser downloads one file instead of a dozen or more separate small ones, cutting down the number of individual HTTP requests a page has to make.
The technique mattered enormously under HTTP/1.1, where browsers could only open a limited number of simultaneous connections to a server, so cutting request count directly and substantially improved load time. HTTP/2 and HTTP/3, now widely supported, handle multiple simultaneous requests over a single connection far more efficiently, which has genuinely reduced how much sprites matter for raw request-count savings. Modern alternatives, like inlining small icons directly as SVG or using icon fonts, have also taken over much of what sprites used to solve. Sprites still show up in older codebases and in some specific cases (a large set of tiny, frequently reused icons), but they're a less universally necessary technique now than they were in the HTTP/1.1 era they were originally built to work around.