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-si
If your users use only Opera 9.5+, Safari 3+, Internet Explorer 9+ and Firefox 3.6+ then the answer is yes. Otherwise, no.
The background-size property is part of CSS 3, but it won't work on most browsers.
For your purposes just make the actual image larger.
You can't set the size of your background image with the current version of CSS (2.1).
You can only set: position
, fix
, image-url
, repeat-mode
, and color
.
You have written
background: url('bg.gif') top repeat-y;
background-size: 490px;
but you will only see the background depending on the size of the container.
if you have an empty container with the background url and whatever the background-size is, you will not see the bg.gif.
If you set the size of the continer to
background: url('bg.gif') top repeat-y;
background-size: 490px;
height: 490px;
width: 490px;
combined to the code you wrote above, you will be able to see the bg.gif file.
For example:
Background image will always fit to container size (width 100% and height 100px).
Cross-browser CSS:
.app-header {
background: url("themes/default/images/background.jpg") no-repeat;
-moz-background-size: 100% 100px;
-webkit-background-size: 100% 100px;
-o-background-size: 100% 100px;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src = "themes/default/images/background.jpg", sizingMethod = 'scale');
background-size: 100% 100px;
}
You can use two <div>
elements:
One is a container (it is the one which you originally wanted the background image to appear at).
The second one is contained within. You set its size to the size of the background image (or the size you wish to be appearing).
The contained div is then set to be positioned absolute
. This way it does not interfere with the normal flow of items in the containing div.
It enables you to use sprite images efficiently.
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)...
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.
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.