In this tutorial, weâll learn how to change the backgrounds of CSS elements.
The background
property allows you to control the background of any element. Itâs a shorthand property, so we can write multiple properties in one code block. For example:
body {
background:
fixed /* attachment *
blue; /* color */
content-box /* clip */
url(background.jpg) /* image */
padding-box /* origin */
top center 300px 300px /* position & size */
no-repeat /* repeat */
}
This example contains each of different properties that we can apply to backgrounds. Letâs take a look at these now..
Background properties
The background of an element can be changed using each of these properties:
background-attachment
background-color
background-clip
background-image
background-origin
background-position
background-repeat
background-size
background-attachment
Using background-attachment
we can define how the background moves relative to the viewport (the part of the website, which is visible in the browser window).
We can use any of three values: scroll
, fixed
, and local
.
scroll
is the default behavior. The background will scroll with the page.
fixed
attaches the background to the viewport, so that scrolling will not affect the background:
div {
background-attachment: fixed;
}
This is often used to achieve parallax effects.
local
is new to CSS3, it causes an elementâs background to be fixed to the element itself. This resolves unexpected behavior when working with backgrounds inside of scroll box on a page.
background-color
The background-color
property is quite self-explanatory. It changes our background color by accepting a color value, it can be a color keyword, an rgb
or hsl
value:
body {
background-color: lime;
}
div {
background-color: #ff0000;
}
Check out my post to learn about working with colors.
background-clip
We can use background-clip
to create some neat effects. It lets you choose the area used by the background. The values we can use are:
border-box
the default value. The background will extend to the outside edge of the elementâs border.padding-box
clips the background at the edge of the elementâs padding, without the border.content-box
clips the background at the edge of the content box, without the padding.inherit
applies thebackground-clip
value of the parent to the element.
background-image
The background-image
property applies a graphic to the background of an element.
We specify the our image location using URL, like so:
div {
background-image: url(image.png);
}
We can use a relative path (as above) or a full web address if located externally.
background-origin
With background-origin
we can choose where to apply the background. Itâs very similar to background-clip
except it resizes the background instead clipping it.
By default our background to is applied to the entire element (including padding) with padding-box
. We could also set our background to the entire element including the border with border-box
, or to the element without padding using content-box
.
Weâll often use background-size: cover
and background-repeat: no-repeat
with this property. To prevent a background image from repeating under any borders or padding. More on these later.
background-position
When using a background image youâll most often need to set itâs position. For this we use the background-position
property. With this we can set the background image to the position specified within its container.
We can set the values using the keywords of left
, right
& center
for the X (horizontal) axis, and top
or bottom
for the Y (vertical) axis:
div {
background-position: top right;
}
The default values are 0 0. This puts your background image at the top left of the container.
To be more specific with our positioning, we could instead use length values:
div {
background-position: 100px 50px;
}
Here the first value is the horizontal position, second value is the vertical position. So 100px 50px
will move the image 100px to the right and 50px down. The values can be set in px
, em
, or any other valid CSS length value.
We can also use percentages:
div {
background-position: 100% 50%;
}
Moving a background image by percentage means the X% point in the image will align to the X% point in the container. So 50%
will align the middle of the image with the middle of the container. 100%
will align the last pixel of the image with the last pixel of the container.
background-repeat
When using an image that is smaller than the background, you can set its behavior with background-repeat
, like so:
html {
background-image: url(logo.png);
background-repeat: repeat-x;
}
The possible values for this property are:
repeat
: repeat the image in both directions (this is the default!).repeat-x
: repeat the image horizontally.repeat-y
: repeat the image vertically.no-repeat
: donât repeat the image, just show it once.space
: repeats the image in both directions, spacing them out evenly.round
: repeats the image in both directions, stretching them to fill any available space.
We could also apply differing values to our axisâ in one line:
.div {
background-repeat: repeat space;
}
The first value being our horizontal axis, the second our vertical.
background-size
The last background property is background-size
, and its perhaps one of the most useful! We can use 3 keywords: auto
, cover
and contain
. With auto
being the default.
auto
the browser automatically calculates the size based on the actual size of the image, preserving its aspect ratio.
cover
expands the image to cover the entire element. If the element stretches, the image will crop a bit off at one of the edges to fit.
contain
stops expanding the background image when one axis (x or y) covers the smallest edge of the image, which makes it fully contained within the element. Essentially, the whole image will always be shown, meaning there might be some space at the sides or bottom.
Additionally can specify a length value, which sets the width of the background image (the height will be automatic):
div {
background: url(image.jpg);
background-size: 100%;
}
If you specify a second value, the first is the width and the second the height:
div {
background: url(image.jpg);
background-size: 400px 100px;
}
Note: Any CSS size unit can be used, including px, %âs, ems, vh, vw, etc.
Multiple Background Images
You can also combine any of the above methods and apply them to multiple images, simply by adding commas between each:
html {
background: url(firstimage.jpg), url(secondimage.jpg);
background-size: 500px 100px, cover;
}
In this example, our first image is set to 500x100 pixels, it sits above our second image which covers the entire area.
When using multiple images for the background its important to remember the stacking order. Each value corresponds to a layer: the first is the top layer, the second is the second layer, and so on. If a background color is set, itâll always be the last layer.
And thatâs it! Weâve examined each of the background properties that we can work with in CSS. With this knowledge you can create some very unique layouts & unleash your inner creativity!
Related posts:
A little about me..
Hey, Iâm Tim! đ
Iâm a freelance business owner, web developer & author. I teach both new and experienced freelancers how to build a sustainable and successful freelancing business. Check out my Complete Guide to Freelancing if you'd like to find out more.
While you're here, you can browse through my blogs where I post freelancing tips, code tutorials, design inspiration, useful tools & resources, and much more! You can also join the newsletter, or find me on X.
Thanks for reading! đ