iOS Safari:100% 宽度固定位置 header 比视口宽
iOS Safari: 100% width fixed position header wider than viewport
我 运行 遇到了一个问题,该问题特别影响 iOS 上的 Safari。
我正在构建一个具有固定位置 header 的页面,即视口的宽度。页面的内容是一系列应该向右滚动的图像(数量可变)。 header 应该在用户滚动时保持原位。
在 iOS Safari 上,固定的 header 比视口稍大,滚动速度也与其他内容不同。
我已将代码缩减为以下内容,但仍然无法解决这个问题 - 以下代码在我测试过的所有其他浏览器中都能完美运行。 (我的目标是 IE8+)
我主持过这个问题的例子here.
感谢您的建议和帮助。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<style>
html {
font-size: 10px;
height:100%;
white-space: nowrap;
}
body {
height:100%;
padding:0;
margin:0;
}
#dgs2 {
height:75%;
display:inline-block;
}
img{
height: 100%;
}
#pad{
height:6em;
padding-bottom:1px;
}
#header{
position:fixed;
width:100%;
height:6em;
border-bottom:1px solid;
}
.menuRight{
float:right;
}
</style>
</head>
<body>
<div id="header">
<div class="menuRight"><h2>Menu</h2></div>
<h1>Testing scroll on iPhone</h1>
</div>
<div id="pad"></div>
<div id="dgs2">
<img src='img/red.png'/><img src='img/blue.png'/><img src='img/red.png'/><img src='img/blue.png'/><img src='img/red.png'/><img src='img/blue.png'/><img src='img/red.png'/><img src='img/blue.png'/>
</div>
</body>
</html>
如果您喜欢使用 jQuery,那么您可以使用类似的东西:
$(window).ready(function() {
var bodyWidth = $(window).width();
$("#header").width(bodyWidth).css('width', bodyWidth);
});
我包括了属性宽度和 css 宽度,只是为了确保它适用于所有浏览器。此外,如果您将元标记更改为:
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
这也应该有所帮助。
更新 1
抱歉,我没有正确阅读页眉的 CSS 样式。页眉样式应如下所示:
#header{
position:fixed;
top: 0; // Set these positioning attributes
left: 0; // to hold the header in the top left.
width:100%;
height:6em;
border-bottom:1px solid;
}
更新 2
再次 CSS 更新。我注意到您有如下代码:
html {
font-size: 10px;
height:100%;
white-space: nowrap;
}
body {
height:100%;
padding:0;
margin:0;
}
#dgs2 {
height:75%;
display:inline-block;
}
您需要将其更改为如下所示:
html {
font-size: 10px;
height:100%;
}
body {
height:100%;
padding:0;
margin:0;
}
#dgs2 {
height:75%;
display:inline-block;
white-space: nowrap;
}
如果您将 white-space: nowrap;
移动到 #dsg2
div 而不是将其分配给 html
那么这应该是您的最终解决方案。此外,将以下内容添加到 jQuery 代码以配合您已有的代码:
$(window).resize(function() {
var bodyWidth = $(window).width();
$("#header").width(bodyWidth).css('width', bodyWidth);
});
我知道这个问题已经有一年了,但问题仍然存在于 iOS 中,我遇到了与固定元素漂移完全相同的问题,这让我抓狂。答案很简单:只需用 div.wrapper 包裹 div #bgs2(或任何包含 "white-space:nowrap" 的元素)(class 显然不重要),然后设置溢出到自动:
.wrapper {
overflow: auto;
-webkit-overflow-scrolling: touch;
}
我还添加了 webkit-overflow-scrolling,这有助于避免重绘。
以后一定会有人发现这个奇怪的问题,希望对您有所帮助。
我 运行 遇到了一个问题,该问题特别影响 iOS 上的 Safari。
我正在构建一个具有固定位置 header 的页面,即视口的宽度。页面的内容是一系列应该向右滚动的图像(数量可变)。 header 应该在用户滚动时保持原位。
在 iOS Safari 上,固定的 header 比视口稍大,滚动速度也与其他内容不同。
我已将代码缩减为以下内容,但仍然无法解决这个问题 - 以下代码在我测试过的所有其他浏览器中都能完美运行。 (我的目标是 IE8+)
我主持过这个问题的例子here.
感谢您的建议和帮助。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<style>
html {
font-size: 10px;
height:100%;
white-space: nowrap;
}
body {
height:100%;
padding:0;
margin:0;
}
#dgs2 {
height:75%;
display:inline-block;
}
img{
height: 100%;
}
#pad{
height:6em;
padding-bottom:1px;
}
#header{
position:fixed;
width:100%;
height:6em;
border-bottom:1px solid;
}
.menuRight{
float:right;
}
</style>
</head>
<body>
<div id="header">
<div class="menuRight"><h2>Menu</h2></div>
<h1>Testing scroll on iPhone</h1>
</div>
<div id="pad"></div>
<div id="dgs2">
<img src='img/red.png'/><img src='img/blue.png'/><img src='img/red.png'/><img src='img/blue.png'/><img src='img/red.png'/><img src='img/blue.png'/><img src='img/red.png'/><img src='img/blue.png'/>
</div>
</body>
</html>
如果您喜欢使用 jQuery,那么您可以使用类似的东西:
$(window).ready(function() {
var bodyWidth = $(window).width();
$("#header").width(bodyWidth).css('width', bodyWidth);
});
我包括了属性宽度和 css 宽度,只是为了确保它适用于所有浏览器。此外,如果您将元标记更改为:
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
这也应该有所帮助。
更新 1
抱歉,我没有正确阅读页眉的 CSS 样式。页眉样式应如下所示:
#header{
position:fixed;
top: 0; // Set these positioning attributes
left: 0; // to hold the header in the top left.
width:100%;
height:6em;
border-bottom:1px solid;
}
更新 2
再次 CSS 更新。我注意到您有如下代码:
html {
font-size: 10px;
height:100%;
white-space: nowrap;
}
body {
height:100%;
padding:0;
margin:0;
}
#dgs2 {
height:75%;
display:inline-block;
}
您需要将其更改为如下所示:
html {
font-size: 10px;
height:100%;
}
body {
height:100%;
padding:0;
margin:0;
}
#dgs2 {
height:75%;
display:inline-block;
white-space: nowrap;
}
如果您将 white-space: nowrap;
移动到 #dsg2
div 而不是将其分配给 html
那么这应该是您的最终解决方案。此外,将以下内容添加到 jQuery 代码以配合您已有的代码:
$(window).resize(function() {
var bodyWidth = $(window).width();
$("#header").width(bodyWidth).css('width', bodyWidth);
});
我知道这个问题已经有一年了,但问题仍然存在于 iOS 中,我遇到了与固定元素漂移完全相同的问题,这让我抓狂。答案很简单:只需用 div.wrapper 包裹 div #bgs2(或任何包含 "white-space:nowrap" 的元素)(class 显然不重要),然后设置溢出到自动:
.wrapper {
overflow: auto;
-webkit-overflow-scrolling: touch;
}
我还添加了 webkit-overflow-scrolling,这有助于避免重绘。
以后一定会有人发现这个奇怪的问题,希望对您有所帮助。