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)

相关推荐
WindrunnerMax4 分钟前
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
前端·架构·github
CodeSheep9 分钟前
宇树科技,改名了!
前端·后端·程序员
Hilaku16 分钟前
为什么我们用了 Vite 还是构建慢?——真正的优化在这几步
前端·javascript·vite
XI锐真的烦17 分钟前
横向对比npm和yarn
前端·npm·node.js
国家不保护废物17 分钟前
🧩 React 组件化进阶:像乐高大师一样搭建你的应用世界!
前端·react.js·ai编程
TimelessHaze24 分钟前
从"切图崽"到前端工程师:React 到底是个啥?🚀
前端·react.js·ai编程
站在风口的猪110829 分钟前
《前端面试题:CSS的display属性》
前端·css·html·css3·html5
wandongle30 分钟前
HTML 面试题错题总结与解析
前端·面试·html
Code_Geo31 分钟前
前端打包工具简单介绍
前端·打包工具