iphoneioscssipadbackground

Background image not showing on iPad and iPhone


I want to create a section with a background covering it in a mobile web page, so I was using the following CSS code:

#section1{
    background: url("background1.png") auto 749px;
    height: 749px;
}

The background is showing correctly on Android (Chrome, Firefox ...), but it is not showing at all on iPhone or iPad (Safari, Chrome iOS ...). I have tried to set these properties using jQuery when the DOM is ready, but no luck. I read that the size might be a problem, but the image is about 700kB (1124x749px) so it should accomplish the Safari Web Content Guide rules. Which is the problem?


Solution

  • There's a problem with your CSS rule:

    Your using the shorthand notation in which the background-size-property comes after the background-position-property and it must be separated by a /.

    What you're trying to do is to set the position, but it will fail as auto is not a valid value for it.

    To get it to work in shorthand notation it has to look like this:

    background: url([URL]) 0 0 / auto 749px;
    

    Also note that there's a value called cover, which may be suitable and more flexible here:

    background: url([URL]) 0 0 / cover;
    

    The support for background-size in the shorthand notation is also not very broad, as it's supported in Firefox 18+, Chrome 21+, IE9+ and Opera. It is not supported in Safari at all. Regarding this, I would suggest to always use:

    background: url("background1.png");
    background-size: auto 749px; /* or cover */
    

    Here are a few examples and a demo, to demonstrate that behavior. You'll see that Firefox for example shows every image except the fist one. Safari on the other hand shows only the last.

    CSS

    section {
        width: 200px;
        height: 100px;
        border: 1px solid grey;
    }
    
    #section1 {
        background: url(http://placehold.it/350x150) auto 100px;
    }
    
    #section2 {
        background: url(http://placehold.it/350x150) 0 0 / auto 100px;
    }
    
    #section3 {
        background: url(http://placehold.it/350x150) 0 0 / cover;
    }
    
    #section4 {
        background: url(http://placehold.it/350x150) 0 0;
        background-size: cover;
    }
    

    Demo

    Try before buy

    Further reading

    MDN CSS reference "background"
    MDN CSS reference "background-size"

    <'background-size'>
    See background-size. This property must be specified after background-position, separated with the '/' character.