win系统调整显示器缩放比与浏览器缩放比对web PC端项目的影响

win用户为什么会手动调整显示器缩放比或者浏览器缩放比

因为在屏幕物理尺寸没怎么改变的情况下,我们的像素密度越来越高。如果不调整缩放比(通常是放大),那么我们会觉得字体或图标偏小

猜测浏览器缩放实现原理

猜测原理: 使浏览器视口减小,从而使整体看起来,进行了放大

100%表示不缩放,125%表示放大,90%表示缩小。因为通常是因为100%比例下看不清楚,为了看清楚,win用户会选择,调大缩放比,使界面放大,因此我们以调整到125%为例,进行说明。

浏览器视口宽度查看方式

javascript 复制代码
document.documentElement.offsetWidth

显示器dpr查看方式

javascript 复制代码
window.devicePixelRatio

我的笔记本分辨率为:1920 * 1080, 在win显示器默认缩放比为100%,浏览器缩放比也是100%的情况下。浏览器充满屏幕,浏览器视口的实际宽度为1912(drp为1), 当我将浏览器缩放比调到125%时,浏览器视口的实际宽度为1530(dpr为1.25),在这个过程中(浏览器缩放比从100%放大到125%),个人的观感是文字和图标都在变大

将浏览器缩放比调整回100%,这次改为调整显示器的缩放比,将显示器缩放比调整到125%时,浏览器的视口宽度变成了1528(dpr: 1.25), 为什么与浏览器的1530不一致,个人猜测是因为浏览器即使充满屏幕,浏览器视口的左右两边也没有完全贴合屏幕的左右两边导致。

win用户调整浏览器缩放比或调整显示器缩放比对web PC端项目有什么影响?

会影响界面的布局,可能导致布局错乱。

依然以1920px视口宽度为例(dpr:1),在显示器缩放比和浏览器缩放比都是100%的情况下,如果是191.2px宽度的元素,可以横着放10个

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
html,body{
    margin:0;
    padding:0;
}
.size{
    width: 191.2px;
    height: 200px;
    background-color: red;
    border: 10px solid green;
    box-sizing: border-box;
    float:left;
}
.flex{
    /* display: flex;
    flex-direction: row; */
}
    </style>
</head>
<body>
    <div class="flex">
        <div class="size">1</div>
        <div class="size">2</div>
        <div class="size">3</div>
        <div class="size">4</div>
        <div class="size">5</div>
        <div class="size">6</div>
        <div class="size">7</div>
        <div class="size">8</div>
        <div class="size">9</div>
        <div class="size">10</div>
    </div>
</body>
</html>

但当你调整浏览器缩放比为125%时,布局就乱了

猜测浏览器缩放实现原理我们可以知道,增大浏览器缩放比,实际会减小浏览器视口宽度,100%缩放比下,浏览器视口宽度为1912, 125%缩放比下,浏览器视口宽度为1530,我们每个方块的大小都是固定的,视口宽度变小,自然无法再容纳那么多个方块。

这种问题如何解决?

对于可能会影响页面整体布局的元素的宽度,不采用固定值

比如前面那个例子,如果将方块的宽度设置为width: calc(100vw / 10), 能实现同样的效果,且不会被缩放比调整而影响

但有时候我们确实还是需要设置固定的宽度,这个方式对于这种情况就无解了

js监听浏览器视口变化,随着视口变化而进行修正

总言之就是监测到浏览器缩放比变了,那就通过css的zoom,再修正过来。但firefox不支持zoom,且通过zoom缩放之后,还可能有其他的兼容问题。

禁止web页面缩放解决方案 - 掘金 (juejin.cn)

前端处理用户设备缩放 - 知乎 (zhihu.com)

页面缩放之zoom和transform:scale的比较 - 掘金 (juejin.cn)

css媒体查询方式适配

既然是浏览器视口分辨率变化导致的布局错乱,那可以通过css媒体查询方式,适配呀。

如果是老旧项目,且实际工作量不大,确实可以考虑此方案。

采用移动端的适配方案

没错,既然都是要适配不同的分辨率屏幕,那移动端那套rem,vw,vh适配方案,当然也是可以的。但这只适用于新项目,老旧项目就无法采用此方案

限制body的最小宽度

这个简单也省事,但就是高分辨率大屏,可能就显得很别扭,如果是老旧项目,且大量界面存在这样的问题,那可以考虑此方案。

总结

遇到这种问题,不要局限一种方案,应该综合考量,可以多种方式同时采用,应该以工作量最少或最快保证系统可用为原则进行选择实现。

参考资料

(4 封私信 / 84 条消息) css设置元素的宽高为整数,为什么有的浏览器解析出来的宽高是小数? - 知乎 (zhihu.com)

前端处理用户设备缩放 - 知乎 (zhihu.com)

css - 前端如何解决pc端屏幕显示设置缩放比例对页面布局的影响? - SegmentFault 思否

禁止web页面缩放解决方案 - 掘金 (juejin.cn)

CSS-浏览器缩放使边框大小改变,导致布局改变的问题 - 掘金 (juejin.cn)

css_解决浏览器显示盒子的实际像素和你设置的像素不一致的问题;_css的px与渲染出的px不一样-CSDN博客

border-width比实际值小_前端-CSDN问答

Window.devicePixelRatio - Web API 接口参考 | MDN (mozilla.org)

页面缩放之zoom和transform:scale的比较 - 掘金 (juejin.cn)

相关推荐
GISer_Jing2 小时前
前端面试通关:Cesium+Three+React优化+TypeScript实战+ECharts性能方案
前端·react.js·面试
落霞的思绪3 小时前
CSS复习
前端·css
咖啡の猫5 小时前
Shell脚本-for循环应用案例
前端·chrome
百万蹄蹄向前冲7 小时前
Trae分析Phaser.js游戏《洋葱头捡星星》
前端·游戏开发·trae
朝阳5818 小时前
在浏览器端使用 xml2js 遇到的报错及解决方法
前端
GIS之路8 小时前
GeoTools 读取影像元数据
前端
ssshooter9 小时前
VSCode 自带的 TS 版本可能跟项目TS 版本不一样
前端·面试·typescript
Jerry9 小时前
Jetpack Compose 中的状态
前端
dae bal10 小时前
关于RSA和AES加密
前端·vue.js
柳杉10 小时前
使用three.js搭建3d隧道监测-2
前端·javascript·数据可视化