Background Repeat and its Possibilities

There is a humble CSS Property that gets overlooked a lot, the humble background-repeat.

I recently only learned that there a few options other than no-repeat or repeat available to this, and that they have really good browser support.

New Keywords

There are two CSS level 3 specification additions to the background-repeat property - space and round.

space

background-repeat: space;

With a repeating background image, using this keyword will repeat the image as many times as it can without clipping the image. Much like flexbox and justify-content: space-between, it will distribute the remaining space between the items that fit. The images in the background will stay their original size (or the one specified by background-size).

Note - if you use the space value, for the most part a background-position declaration will be ignored.

round

background-repeat: round;

I think this value is even more interesting, because what it does is actually scales the repeated image such that all available room is taken up, until there is enough room for another instance of the image.

In the below example I've added an SVG background image with a border to illustrate how the image will scale up until another can fit, then they all scale down again:

Older Keywords

Just in case you didn't know the other keywords, they are:

background-repeat: repeat;

This is the default for background images - they will repeat in a tile-like fashion in both dimensions.

background-repeat: repeat-x; /* repeats horizontally */
background-repeat: repeat-y; /* repeats vertically */

If you only want a background to repeat in one direction, use these.

background-repeat: no-repeat;

If you don't want any repetition at all.

And it supports these global values:

background-repeat: inherit;
background-repeat: initial;
background-repeat: unset;

Two Value Syntax

You can also specify separate repeat rules in two dimensions with the two value syntax:

background-repeat: horizontal-keyword vertical-keyword;

So you could have:

background-repeat: repeat space;

See how the background tile clips because we use repeat in the horizontal dimension?

Multiple Background Images

You can even manipulate background-repeat for multiple background images, so each follows different rules.

background-image: url(path/to/image_1), url(path/to/image_2);
background-repeat: round round /* image_1 */, space no-repeat /*  image_2 */;

So, take a fresh look at background-repeat - it can provide a lot of opportunities for happy discoveries.