Recently, I've been working on my portfolio (shameless plug π ) and learning about how to make it more responsive. A responsive website will adapt to a change in screen size so that the website will nicely display the page content.
You can create a responsive background image with just CSS.
HTML
<div class="bg"></div>
CSS
.bg {
height: 100vh;
min-height: 500px;
background-image: url(images/bg.jpeg);
background-position: center center;
background-repeat: no-repeat;
background-attachment: fixed;
background-size: cover;
background-color: #1d3557;
}
-
height: 100vhmeans the height of this bg element to be 100% of the viewport height -
min-height: 500pxsets the minimum height of the element -
background-position: center centerwill center the image vertically and horizontally at all times -
background-repeat: no-repeatprevents the image from repeating and creating the tiled look -
background-attachment: fixedkeeps the image fixed in the viewport so even when you scroll down it won't move. Creates the parallax scrolling effect where the background content moves at a different speed than the foreground content while scrolling. When scrolling, it looks like the rest of the website scrolls on top of the background image. -
background-size: coverwill make the background image resize to fit the size of the screen -
background-color: #1d3557will set a background color that will be displayed while the background image is loading
This code worked well on laptops, but on iPhones and iPads (haven't tested on other types of devices), the background image was very zoomed-in, leaving me with a pixelated image.
After some research, I learned that the problem was with the background-attachment property. Some mobile devices have a problem with background-attachment being fixed, so to fix this, you just need to use media queries to turn off the parallax effect for mobile devices by setting background-attachment to scroll.
/* Increase/decrease the pixels if needed */
/* For all devices with a screen size smaller than 1366px, the background-attachment property will be scroll instead of fixed */
@media only screen and (max-device-width: 1366px) {
.bg {
background-attachment: scroll;
}
}
Now, you should be able to see the full background image on all devices instead of a pixelated corner of the image!
Top comments (1)
Thanks, Cindy. I will soon add this to my portfolio as well.