svg 中断位置:移动浏览器上的粘性
svg breaks position: sticky on mobile browser
我尝试制作一个使用固定导航栏和包含一些粘性元素和 svg 的列表的网页。
它在我的 Firefox 桌面上工作正常,但在我的 Fennec 中的 phone 上表现得很奇怪(Firefox 在使用响应式设计工具时显示相同的行为(Ctrl + Shift + M)).
向下滚动时,固定导航栏和粘性 header 滚动出视图,再次向上滚动时,导航栏和 header 突然再次出现并粘在顶部,直到页面完全滚动到顶部。
当我删除 svg 时,桌面和移动浏览器在粘性方面没有差异。
svg 有什么问题?
知道如何解决这个问题吗?
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
</head>
<body style="padding-top: 4.5rem;">
<nav style="position: fixed; top:0; height: 4.5rem; width:100%; background-color: #fa78;">
Status
</nav>
<main>
<div>
<div style="z-index: 10; position: -webkit-sticky; position: sticky; top: 4.5rem;">
<div style="background-color:#5558; color: white;">
Header 1
</div>
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
</div>
<div>
<div style="z-index: 10; position: -webkit-sticky; position: sticky; top: 4.5rem;">
<div style="background-color:#5558; color: white;">
Header 2
</div>
</div>
<div>
<svg width="590" height="250"></svg>
</div>
</div>
<div>
<div style="z-index: 10; position: -webkit-sticky; position: sticky; top: 4.5rem;">
<div style="background-color:#5558; color: white;">
Header 3
</div>
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
</div>
</main>
</body>
</html>
要用 svg 测试的文件:https://filebin.net/6ue8y9219gajvxnc/stickytestwithsvg.html
不使用 svg 进行测试的文件:https://filebin.net/6ue8y9219gajvxnc/stickytestwithoutsvg.html
(文件将于 2020 年 3 月 30 日到期)
一些 css 更改应该有效 -
CSS
html{
height: 100%;
overflow: hidden;
}
body{
position: relative;
height: 100%;
overflow: auto;
box-sizing: border-box;
}
我尝试制作一个使用固定导航栏和包含一些粘性元素和 svg 的列表的网页。
它在我的 Firefox 桌面上工作正常,但在我的 Fennec 中的 phone 上表现得很奇怪(Firefox 在使用响应式设计工具时显示相同的行为(Ctrl + Shift + M)).
向下滚动时,固定导航栏和粘性 header 滚动出视图,再次向上滚动时,导航栏和 header 突然再次出现并粘在顶部,直到页面完全滚动到顶部。
当我删除 svg 时,桌面和移动浏览器在粘性方面没有差异。
svg 有什么问题?
知道如何解决这个问题吗?
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
</head>
<body style="padding-top: 4.5rem;">
<nav style="position: fixed; top:0; height: 4.5rem; width:100%; background-color: #fa78;">
Status
</nav>
<main>
<div>
<div style="z-index: 10; position: -webkit-sticky; position: sticky; top: 4.5rem;">
<div style="background-color:#5558; color: white;">
Header 1
</div>
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
</div>
<div>
<div style="z-index: 10; position: -webkit-sticky; position: sticky; top: 4.5rem;">
<div style="background-color:#5558; color: white;">
Header 2
</div>
</div>
<div>
<svg width="590" height="250"></svg>
</div>
</div>
<div>
<div style="z-index: 10; position: -webkit-sticky; position: sticky; top: 4.5rem;">
<div style="background-color:#5558; color: white;">
Header 3
</div>
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
</div>
</main>
</body>
</html>
要用 svg 测试的文件:https://filebin.net/6ue8y9219gajvxnc/stickytestwithsvg.html
不使用 svg 进行测试的文件:https://filebin.net/6ue8y9219gajvxnc/stickytestwithoutsvg.html
(文件将于 2020 年 3 月 30 日到期)
一些 css 更改应该有效 -
CSS
html{
height: 100%;
overflow: hidden;
}
body{
position: relative;
height: 100%;
overflow: auto;
box-sizing: border-box;
}