Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set size on background image with CSS?

Tags:

css

Is it possible to set the size of the background image with CSS?

I want to do something like:

background: url('bg.gif') top repeat-y; background-size: 490px; 

But it seems it's totally wrong to do it like that...

like image 754
Johan Avatar asked Aug 27 '09 14:08

Johan


People also ask

How do I change the background image size in CSS?

The background-size property is used to set the background image size using CSS. Use height and width property to set the size of the background image.

How do I automatically resize a background image?

There are four different syntaxes you can use with this property: the keyword syntax ("auto", "cover" and "contain"), the one-value syntax (sets the width of the image (height becomes "auto"), the two-value syntax (first value: width of the image, second value: height), and the multiple background syntax (separated ...

Can we specify the background-size in percentage in CSS?

If you only provide one value (e.g. background-size: 400px ) it counts for the width, and the height is set to auto . You can use any CSS size units you like, including pixels, percentages, ems, viewport units, etc.


2 Answers

CSS2

If you need to make the image bigger, you must edit the image itself in an image editor.

If you use the img tag, you can change the size, but that would not give you the desired result if you need the image to be background for some other content (and it will not repeat itself like you seems to want)...

CSS3 unleash the powers

This is possible to do in CSS3 with background-size.

All modern browsers support this, so unless you need to support old browsers, this is the way to do it.
Supported browsers:
Mozilla Firefox 4.0+ (Gecko 2.0+), Microsoft Internet Explorer 9.0+, Opera 10.0+, Safari 4.1+ (webkit 532) and Chrome 3.0+.

.stretch{ /* Will stretch to specified width/height */   background-size: 200px 150px; } .stretch-content{ /* Will stretch to width/height of element */   background-size: 100% 100%; }  .resize-width{ /* width: 150px, height: auto to retain aspect ratio */   background-size: 150px Auto; } .resize-height{ /* height: 150px, width: auto to retain aspect ratio */   background-size: Auto 150px; } .resize-fill-and-clip{    /* Resize to fill and retain aspect ratio.      Will cause clipping if aspect ratio of box is different from image. */    background-size: cover; } .resize-best-fit{ /* Resize to best fit and retain aspect ratio.    Will cause gap if aspect ratio of box is different from image. */    background-size: contain; } 

In particular, I like the cover and contain values that gives us new power of control that we didn't have before.

Round

You can also use background-size: round that have a meaning in combination with repeat:

.resize-best-fit-in-repeat{ /* Resize to best fit in a whole number of times in x-direction */    background-size: round auto; /* Height: auto is to keep aspect ratio */   background-repeat: repeat; } 

This will adjust the image width so it fits a whole number of times in the background positioning area.


Additional note
If the size you need is static pixel size, it is still smart to physically resize the actual image. This is both to improve quality of the resize (given that your image software does a better job than the browsers), and to save bandwidth if the original image is larger than what to display.

like image 170
awe Avatar answered Sep 18 '22 18:09

awe


Only CSS 3 supports that,

background-size: 200px 50px; 

But I would edit the image itself, so that the user needs to load less, and it might look better than a shrunken image without antialiasing.

like image 32
Maertz Avatar answered Sep 20 '22 18:09

Maertz