0HTML5 LogoResponsive background images for websites

I’ve recently been updat­ing my web­sites and web serv­er and adding a new site (LoveCrete.org). I wanted to have a back­ground image on LoveCrete and real­ised that of course 1 size does­n’t fit all screens. Here is a sum­mary of what my think­ing was and what I did to cater for the numer­ous screen sizes and ori­ent­a­tions.

Which orientation

I star­ted by mak­ing myself a little table of all the com­mon res­ol­u­tions used on PCs and tab­lets (in hori­zont­al ori­ent­a­tion). I decided to focus on this because most images are avail­able in land­scape so this is a sens­ible place to start.

I decided that I would place images cent­rally on the page and let the edges be lost off the edge of the screen in some instances. When a phone is used in por­trait ori­ent­a­tion it will load the image based on height (not width) and will lose a lot from both edge of the image. Doing it any oth­er way would mean need­ing images cropped to a totally dif­fer­ent shape or hav­ing a land­scape image “tile” on a tall screen, which is not desir­able.

The ratios of the max­im­um size image to make in each group were all around 1.6 with a few a bit high­er. To keep things sim­pler I decided to use a ratio of 16:10 for all images and came up with sizes to make accord­ingly.

This means in most cases the image will not be a per­fect fit to the screen size, but all screens will get some­thing very close and no screen will end up with some­thing too small. It also means a source image can be cropped to 16:10 once and then mul­tiple sizes eas­ily cre­ated

Common landscape resolution groups

HeightWidthImage to makeCom­ments
4:316:1016:9
2160288038402400×38404k UHD
1600
1536
1440
-
2048
1920
2560
-
-
-
-
2560
1600×2560
1200
1080
1050
1600
1440
1400
1920
-
1680
-
1920
-
1200×1920Full HD 1080p
960
900
1280
1200
1536
1440
-
1600
1000×1600
800
768
720
-
1024
960
1280
-
-
-
-
1280
800×1280720p
600
576
800
768
960
-
-
1024
640×1024
480640768480×768

As you can see I have grouped quite a few res­ol­u­tions and will then make 1 image that will cov­er all heights up to the largest height in that group. I will make sure the image is also wide enough for the max­im­um width such a height might be paired with on a nor­mal screen. I haven’t taken account of unusu­al con­fig­ur­a­tions like 21:9 mon­it­ors or mul­tiple screens — there has to be a lim­it some­where!

Because CSS uses the view­port or browser size and not the screen size land­scape screens need to use width rather than height — as on most sys­tems the top and bot­tom lose space to title bars etc whilst the width is usu­ally max­im­ised. How­ever, for por­trait dis­plays it is bet­ter to use the height prop­erty. This can be done as CSS can identi­fy the screen ori­ent­a­tion

The CSS used then looks as fol­lows

body{background-repeat: no-repeat; background-attachment: fixed; background-position: center center; background-size: cover;}

@media (max-width: 768px) {body { background-image: url(bg480.jpg); }}
@media (min-width:769px) and (max-width: 1024px) {body { background-image: url(bg640.jpg); }}
@media (min-width:1025px) and (max-width: 1280px) {body { background-image: url(bg800.jpg); }}
@media (min-width:1281px) and (max-width: 1600px) {body { background-image: url(bg1000.jpg); }}
@media (min-width:1601px) and (max-width: 1920px) {body { background-image: url(bg1200.jpg); }}
@media (min-width:1921px) and (max-width: 2560px) {body { background-image: url(bg1600.jpg); }}
@media (min-width:2561px) {body { background-image: url(../images/bg2400.jpg); }}

@media (orientation: portrait){
@media (max-height: 480px) {body { background-image: url(bg480.jpg); }}
@media (min-height:481px) and (max-height: 640px) {body { background-image: url(bg640.jpg); }}
@media (min-height:641px) and (max-height: 800px) {body { background-image: url(bg800.jpg); }}
@media (min-height:801px) and (max-height: 1000px) {body { background-image: url(bg1000.jpg); }}
@media (min-height:1001px) and (max-height: 1200px) {body { background-image: url(bg1200.jpg); }}
@media (min-height:1201px) and (max-height: 1600px) {body { background-image: url(bg1600.jpg); }}
@media (min-height:1601px) {body { background-image: url(bg2400.jpg); }}
}

Think we've missed something? Let us know by commenting below. If you would like to subscribe please use the subscribe link on the menu at the top right. You can also share this with your friends by using the social links below. Cheers.

Leave a Reply