边框像素问题为什么解决不了

边框像素问题为什么解决不了


http://img1.sycdn.imooc.com//climg/5f5ae8fa0910813218441020.jpg

代码哪里有问题吗?

(function($) {
                'use strict'
                var docEl = document.documentElement;

            // 解决dpr一边框像素问题
            var dpr = window.devicePixelRatio || 1,
                viewPortEl = document.querySelector('meta[name="viewport"]'),
                maxWidth = 540,
                minWidth = 320;

            dpr = dpr >= 3 ? 3:(dpr >= 2 ? 2 :1);

            docEl.setAttribute('data-dpr',dpr);
            docEl.setAttribute('max-width', maxWidth);
            docEl.setAttribute('min-width', minWidth);

            var scale = 1/ dpr,
            content = 'width=device-width, initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' +scale+',user-scalable=no';  

            if(viewPortEl){
                viewPortEl.setAttribute('content',content);
            }else{
                viewPortEl = createElement('meta');
                viewPortEl.setAttribute('name','viewport');
                viewPortEl.setAttribute('content',content);
                document.head.appendChild(viewPortEl);
            }

            // 设置Rem的单位
            function setRemUnit(){
                // 获取rem基准值
                var viewWidth = docEl.clientWidth;
                
                if(viewWidth && (viewWidth / dpr > maxWidth)) {
                    viewWidth = maxWidth * dpr;
                }else if(viewWidth && (viewWidth / dpr < minWidth)){
                    viewWidth = minWidth * dpr;
                }

                var rem =viewWidth / 10;

                docEl.style.fontSize= rem + 'px';
            }
            setRemUnit();

            // 页面发生变化执行setRemUnit方法计算html根元素的font-size
            window.addEventListener('resize',setRemUnit);
            window.addEventListener('pageshow',setRemUnit);
            })(jQuery);


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
好帮手慕久久 2020-09-11 13:39:46

同学你好,老师这边测试,计算出来的fontsize是75px,如下:

http://img1.sycdn.imooc.com//climg/5f5b0cfe09f29b1c12000218.jpg


可能是浏览器计算有误差,所以差了0.1px,建议同学刷新一下试试.

另外,测试dpr=2时,直接将设备调成iphone6/7/8即可,如下:

http://img1.sycdn.imooc.com//climg/5f5b0d35098596ee10850217.jpg

因为dpr为2的设备大多都是指iphone6/7/8这几种机型。

祝学习愉快!

好帮手慕久久 2020-09-11 11:57:20

同学你好,问题解答如下:

1. 同学的适配代码是没有问题的,所以改变dpr之后,html的fontsize就会改变,而fontsize的改变,也能从侧面说明我们的代码是对的。

2. 同学理解是对的。但是描述要优化一下,即“DPR从1改为2的时候,水平方向或垂直方向(或者说成高度方向),由原来的一个物理像素渲染一个css像素,改为用2个物理像素渲染一个CSS像素”,因此就造成了1px看起来变粗了。 解决该问题的办法就是,利用dpr将页面进行缩放,即dpr为1时,页面是375px的,而dpr=2时,我们将页面宽度变成750px,这样的转变,就解决了1px的问题。对此,目前同学里了解这么多即可,等以后实际开发了,理解的会深些。

祝学习愉快!

  • 提问者 陈立天 #1
    但是还有个问题就是dpr=1的时候 font-size是37.5 到了dpr=2的时候 为什么是75.1 而不是75? 37.5*2不是等于75么?
    2020-09-11 12:00:28
好帮手慕久久 2020-09-11 11:22:05

同学你好,老师测试你的代码,可以解决1px边框问题,如下:

http://img1.sycdn.imooc.com//climg/5f5aec5809bab81208810259.jpg

有几种注意事项,同学看下:

1.  同学适配方案中,使用了jquery,所以要将引入jquery的代码,写在适配代码上面,如下:

http://img1.sycdn.imooc.com//climg/5f5aeca709a0012608760149.jpg

2. 截图时,要选择如下红框中的选项:

http://img1.sycdn.imooc.com//climg/5f5aece10936f83105100305.jpg

这样得到的截图才是750px宽的,才会看的准确:

http://img1.sycdn.imooc.com//climg/5f5aed1a0995e23114640426.jpg

同学再检查一下自己的操作。

如果我的回答帮到了你,欢迎采纳,祝学习愉快!

  • 提问者 陈立天 #1
    老师后面还有问了一些问题 看看我理解正确吗?
    2020-09-11 11:31:39
提问者 陈立天 2020-09-11 11:16:27

改变dpr之后fontsize会发生改变 这样是不是就成功了?就可以解决边框1px像素问题了?

我不太明白这个原理是啥意思。或者说我理解的对么?DPR从1改为2的时候由原来的一个物理像素渲染一个css像素,改为用2个物理像素渲染一个CSS像素,所以屏幕就出现了1px 看起来是2px? 所以需要给css像素放大2倍和dpr放大为2之后的比例关系适配?

http://img1.sycdn.imooc.com//climg/5f5aeb2509c8e49824211045.jpg

http://img1.sycdn.imooc.com//climg/5f5aeb50099ed89c21980638.jpg

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.WebAPP开发与小程序
  • 参与学习           人
  • 提交作业       622    份
  • 解答问题       6815    个

微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师