为什么固定位置在没有最小比例的移动设备上不起作用

问题描述 投票:0回答:1

我看到很多帖子面临这样的问题:添加

position:fixed
的div仍然在mobile浏览器上移动,并通过设置视口
minimum-scale=1.0
解决了。 (经过一些测试,我认为可以通过设置
minimum-scale
来匹配
initial-scale
,或者删除
initial-scale
minimum-scale
来修复)。根据定义
minimum-scale
仅定义最小缩放,为什么这可以解决问题

这里有一些帖子提出了同样的问题,并通过添加最小规模来解决。他们都没有给出这样做的原因:(有评论提到可能是宽度超过 100vw 的组件导致了问题,就是这种情况,但它仍然没有给出添加

minimum-scale
的原因解决了问题。)

这是我的测试代码(在移动设备上,删除

minimum-scale=1.1
会中断
position:fixed
):

.mylist {
    min-height: 100vh;
    height: 100vh;
    left: 0;
    right: 0;
    top: 0;
    position: fixed;
    width: 100vw;
}

.placeholder {
    height: 150vh;
    width: 101vw;
    justify-content: center;
    align-items: center;
    display: flex;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.1, minimum-scale=1.1">
    <title>Sample</title>
</head>
<body>
    <div class="placeholder">TEST</div>
    <div class="mylist">
        <ul>
            <li>t0</li>
            <li>t1</li>
            <li>t2</li>
        </ul>
    </div>
</body>
</html>

html css position css-position viewport
1个回答
0
投票

我按照我的理解来解释一下。

视口元标记在 2008 年至 2014 年之间出现在 html5 中,而该元标记在 html4 中不存在。他们引入 HTML5 意味着由于移动设备的出现,它是必要的。那时,您在许多移动设备上打开网站时都可以看到水平滚动条,因为桌面网站内容的宽度会比移动设备高得多。 (他们也不会给出百分比宽度)

对于桌面设备,我们都知道屏幕宽度只不过是分辨率的宽度部分给出的像素数。例如,如果分辨率是1920 x 1080,它明确指出屏幕尺寸是1920px。

但对于移动设备来说,情况并非如此。例如,移动设备的分辨率可能是 1080 x 2400 像素。但是当我们在mediascreen css中编写时,同样的1080px将被移动设备视为412px。而且这个 1080/420 比例并不是对所有设备都是固定的。这个比例因品牌而异。有一种叫做分辨率的东西,是由移动制造商指定的。也就是说,如果分辨率为2.6,则意味着宽度1080像素将被视为412px(1080 /412 = 2.6)。如果分辨率为 3,则宽度 1080 像素将被视为 360 像素(1080/3 = 360)。通过调整这一点,所有移动设备都可以理解 px 中的单个 css。

这里其他位置属性,即绝对、相对和所有都是元素相对于内容的位置。但是位置:固定是相对于视口的。例如,如果您提到“position:absolute;top:0;right:100px;” - 使用旧系统 - 在较小宽度的显示器中,如果内容宽度大于显示器宽度,您必须向右滚动才能看到这一点。但如果你提到,“position:fixed;right:100px”意味着,无论内容大小如何,元素都将放置在距视口右端 100px 的位置。

所以自然地,只有在视口元标记出现之后,视口相关属性才能正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.