This happens because your #background
element is set to "follow" the height of the window:
#background {
...
position: fixed;
top: 0;
bottom: 0;
...
}
But, the window
in Safari changes its size when you scroll down the content for the first time from 460px
to 529px
:
As you can see from these screenshots, when the web page is loaded the window.innerHeight
is equal to 460px
(on iPhone5). Then, when you begin scrolling the page down while your finger touches the screen the window.innerHeight
is increased to 529px
but the content is not yet updated. Only when the finger is released from the screen the #background
element is updated with the new window height which equals to 529px
.
To fix this issue you should make sure that the #background
element is higher than the initial window height by 529-460 = 69px
. Or the #background
element has constant height of 529px
(or higher):
#background {
...
position: fixed;
top: 0;
bottom: -69px;
...
}
OR
#background {
...
position: fixed;
top: 0;
/* use height instead of bottom */
height: 529px;
...
}
Here is a final code that fixes this issue:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Fixed background</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="css/styles.css?v=1.0">
<style>
#background {
background: url(bkgd.png) repeat;
position: fixed;
background-size: 100% auto;
top: 0;
left: 0;
right: 0;
bottom: -69px;
z-index: -1;
}
</style>
</head>
<body>
<div id="background"></div>
<div style="height: 5000px;"></div>
</body>
</html>
position: fixed
. also, why do you need position:fixed to begin with? why not set the background to<body>
? – Lauraine#background
CSS itself. – Parrisposition:fixed
. Aka: not well. For just the iOS issue you could try setting#background { height: 150% }
, but as I recall we still had the white bar. Sorry. :( – Baun