解决pc端屏幕缩放比例对页面布局的影响

摘要:
现在许多笔记本电脑建议将缩放比例设置为125%,以便均匀放大显示。这将对头版的布局产生一些影响。首先,单独的响应布局不能防止这个问题,因为问题是设备像素比。问题是,在高分割屏幕下调整的东西在普通分割屏幕下会被放大;在普通分割屏幕下调整的内容将在高分割屏幕上收缩。这个问题不需要高屏幕分割来再现。直接使用Ctrl++或Ctrl+-的效果与高屏幕分割一致。

现在很多笔记本电脑都推荐将缩放设置为125%,等比例放大显示。

解决pc端屏幕缩放比例对页面布局的影响第1张

这对我们前端的页面的布局会产生一些影响

  1. 首先,单独的响应式布局hold不住这个问题,因为出问题的是device-pixel-ratio
  2. 问题现象是高分屏下整好的东西,在普分屏下会放大;而普分屏下整好的东西,在高分屏上会缩小。
  3. 重现这个问题不需要高分屏,直接用Ctrl++或者Ctrl+-出来的效果是跟高分屏一致的(所以搞定这个问题之后,也可以同时预防用户误触网页缩放)。另外恢复是Ctrl+Num0
  4. 解决的关键就是你得在媒体适配里写device-pixel-ratio单独适配像素比;另外,需要把绝大多数组件由px单位转换为rem单位,因为需要在前边提到的device-pixel-ratio里调节:rootfont-size`,以达到动态缩放的目的

方案1

@media all
and (-moz-min-device-pixel-ratio: 1.09) and (-moz-max-device-pixel-ratio: 1.18),
    (-webkit-min-device-pixel-ratio: 1.09) and (-webkit-max-device-pixel-ratio: 1.18),
    (min-resolution: 1.09dppx) and (max-resolution: 1.18dppx) {
    :root {
        font-size: 14px;
    }
}
@media all
and (-moz-min-device-pixel-ratio: 1.19) and (-moz-max-device-pixel-ratio: 1.28),
    (-webkit-min-device-pixel-ratio: 1.19) and (-webkit-max-device-pixel-ratio: 1.28),
    (min-resolution: 1.19dppx) and (max-resolution: 1.28dppx) {
    :root {
        font-size: 13px;
    }
}
@media all
and (-moz-min-device-pixel-ratio: 1.29) and (-moz-max-device-pixel-ratio: 1.4),
    (-webkit-min-device-pixel-ratio: 1.29) and (-webkit-max-device-pixel-ratio: 1.4),
    (min-resolution: 1.29dppx) and (max-resolution: 1.4dppx) {
    :root {
        font-size: 12px;
    }
}
@media all
and (-moz-min-device-pixel-ratio: 1.41) and (-moz-max-device-pixel-ratio: 1.6),
    (-webkit-min-device-pixel-ratio: 1.41) and (-webkit-max-device-pixel-ratio: 1.6),
    (min-resolution: 1.41dppx) and (max-resolution: 1.6dppx) {
    :root {
        font-size: 10px;
    }
}
@media all
and (-moz-min-device-pixel-ratio: 1.61) and (-moz-max-device-pixel-ratio: 1.8),
    (-webkit-min-device-pixel-ratio: 1.61) and (-webkit-max-device-pixel-ratio: 1.8),
    (min-resolution: 1.61dppx) and (max-resolution: 1.8dppx) {
    :root {
        font-size: 9px;
    }
}
@media all
and (-moz-min-device-pixel-ratio: 1.81) and (-moz-max-device-pixel-ratio: 2.1),
    (-webkit-min-device-pixel-ratio: 1.81) and (-webkit-max-device-pixel-ratio: 2.1),
    (min-resolution: 1.81dppx) and (max-resolution: 2.1dppx) {
    :root {
        font-size: 8px;
    }
}

方案2

/***js代码***/
function handleScreen(){
    const m = detectZoom();
    document.body.style.zoom = 100/Number(m);
}
function detectZoom () {
      let ratio = 0,
        screen = window.screen,
        ua = navigator.userAgent.toLowerCase();
      if (window.devicePixelRatio !== undefined) {
        ratio = window.devicePixelRatio;
      } else if (~ua.indexOf('msie')) {
        if (screen.deviceXDPI && screen.logicalXDPI) {
          ratio = screen.deviceXDPI / screen.logicalXDPI;
        }
      } else if (window.outerWidth !== undefined && window.innerWidth !== undefined) {
        ratio = window.outerWidth / window.innerWidth;
      }
      if (ratio) {
        ratio = Math.round(ratio * 100);
      }
      return ratio;
}

function getWindowHeight() {
    var zoom = document.body.style.zoom;
    var height = $(window).height();
    if (zoom) {
        return height / zoom;
    }
    return height;
}

function getWindowWidth() {
    var zoom = document.body.style.zoom;
    var width = $(window).width();
    if (zoom) {
        return width / zoom;
    }
    return width;
}

window.onresize = function(){
    handleScreen()
}

/***或html的body加上onresize***/
<body onresize="handleScreen();">

免责声明:文章转载自《解决pc端屏幕缩放比例对页面布局的影响》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇uniapp 使用u-loadmore 分页linux 权限命令行 xshell 切换用户下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

滚动条样式修改

::-webkit-scrollbar {width:5px;//对垂直流动条有效 height:10px;//对水平流动条有效 } //定义滚动条的轨道颜色、内阴影及圆角 ::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:t...

小工具之apk黑屏自动检测

在打包测试的时候经常发送给测试组之后,发现已进入游戏就黑屏,这个就浪费了测试组的精力,如果要测试多款产品的话,就会因为黑屏问题做很多无用功,这是程序就需要在发给测试的时候自己先测试产品会不会黑屏。同样,数量一多,就会浪费精力。需要先安装到设备上,在点击测试,浪费时间。 这是,你就需要一款全自动的测试工具来帮你检查产品是否黑屏,用不耗精力的方式把每个包的黑屏...

从0开始编译安卓 9.0

手机是Google Pixel XL 编译环境的准备 google 9月更新了地址 https://source.android.com/setup/build/initializinghttps://source.android.com/setup/build/building ubuntu 16.0.4 x64 需要安装的软件包 看上面 的网址 经过测...

基于wke封装的duilib的webkit浏览器控件,可以c++与js互交,源码及demo下载地址

转载请说明原出处,谢谢~~ 前些日子用wke内核封装了duilib的webkit浏览器控件,好多群里朋友私聊我希望可以我公布源码,今天把这个控件的源码和使用demo公布。其实这个控件封装起来没什么难度,我只是按照原来作者的demo,把相应的消息封装成duilib对应的。 在此首先要感谢wke内核的作者BlzFans以及soui2界面库的作者flyhigh,...

去掉谷歌浏览器输入框的默认黄色背景

谷歌浏览器登录记住密码后  下次登录会自动填充,并且有黄色背景。 谷歌浏览器的设置如下: input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill {  rgb(250, 255, 189);  background-image: none;  colo...

浏览器工作原理和实践(三)——页面

《浏览器工作原理与实践》是极客时间上的一个浏览器学习系列,在学习之后特在此做记录和总结。 一、事件循环 消息队列是一种数据结构,可以存放要执行的任务。它符合队列“先进先出”的特点,也就是说要添加任务的话,添加到队列的尾部;要取出任务的话,从队列头部去取。 从上图可以看出,改造可以分为下面三个步骤: (1)添加一个消息队列; (2)IO 线程中产生的新任务...