当前位置: 首页 > news >正文

关于移动端页面在手机调整字体大小后无法正常显示(已解决)

关于移动端页面在手机调整字体大小后内容适配的问题,作为新手我也刚好是第一次遇到,

已经完成的移动端页面,正常情况下在手机上的浏览器端和App端都可以正常显示,可当测

试把手机字体调大后,布局就忽然变乱了....盒子里面的内容向内挤了。说实话,刚开始感觉

这种问题应该可以忽略,毕竟字体调大后,又可以调回原来的啊,而且大部分手机都是默认

显示标准字体吧。而且我在移动端的meta标签里已经给viewport容器添加了相应属性值,

也是用rem布局的,还会出现这种错乱的情况,我能怎么办....不过后来想了想,既然你是前

端工程师,搞技术的,就应该要学会解决技术问题啊,所以我还是打开了浏览器,开始动手

我最熟悉的骚操作Ctrl+C、Ctrl+V...

刚开始我在找是不是viewport容器里还有些属性值少添加了。

我自己原来的值是这样的:

<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=0">复制代码


感觉是正常的,因为已经调整好了设备宽度、默认缩放比、还有禁止用户手动缩放,所以应该没问题,不过我之后

还是多添加了两个属性值:

<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0">复制代码


添加的属性值是最小和最大缩放比,其实感觉没必要了,因为已经设置了初始化缩放比,不过还是提交测试了,

意料之中,还是没用....

之后上网终于找了一篇大佬文章,关于如何处理移动端调整字体大小问题的解决方案

文章链接:www.cnblogs.com/axl234/p/77…

我下面的代码也是参考他的,不过自己有一些小改动,反正我的移动端页面已经适应了。[耶][耶][耶]

(注:需要注意的是每次调整手机字体大小后,需要重新刷新下页面才有效)

fontAdapt();

function fontAdapt(){
    /*适应移动端APP调整字体大小*/
    (function() {
        //新创建一个div元素,并设置该元素的字体大小
        var $dom = document.createElement('div');
        //移动端采用rem布局,所以设置新创建的元素字体单位为rem
        //这里设置字体大小为10,方便后面计算
        $dom.style = 'font-size:10rem;';
        document.body.appendChild($dom);
        //计算出新创建元素调整后的字体大小
        var scaledFontSize = parseInt(window.getComputedStyle($dom, null).getPropertyValue('font-size'));
        //移除新创建元素,以免影响页面布局
        document.body.removeChild($dom);
        //计算原字体和调整后字体的比例,原字体为10rem,取数字10,
        var scaleFactor = 10 / scaledFontSize;
        
        //取出html元素字体的大小
        //注意,这个大小也经过缩放了
        var originRootFontSize = parseInt(window.getComputedStyle(document.documentElement, null).getPropertyValue('font-size'));
        //通过上面的比例调整页面当前的字体大小,以适应移动端,单位为rem
        document.documentElement.style.fontSize = originRootFontSize * scaleFactor + 'rem';
    })();

    /*适应手机端浏览器调整字体大小*/
    (function(doc, win) {
        //用原生方法获取用户设置的浏览器的字体大小(兼容ie)
        if(doc.documentElement.currentStyle) {
             var user_webset_font=doc.documentElement.currentStyle['fontSize'];
        }
        else {
             var user_webset_font=getComputedStyle(doc.documentElement,false)['fontSize'];
        }
        //取整后与默认16px的比例系数
        var xs=parseFloat(user_webset_font)/16;
        //设置rem的js设置的字体大小
        var view_jsset_font,result_font;
        var docEl = doc.documentElement,
        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
        clientWidth,
        recalc = function() {
            clientWidth = docEl.clientWidth;
            if(!clientWidth) return;
            if(!doc.addEventListener) return;
            if(clientWidth<750){
                //设置rem的js设置的字体大小
                view_jsset_font=100 * (clientWidth / 750);
                //最终的字体大小为rem字体/系数
                result_font=view_jsset_font/xs;
                //设置根字体大小
                docEl.style.fontSize = result_font + 'px';
            }
            else{
                docEl.style.fontSize = 100 + 'px';
            }
       };
       win.addEventListener(resizeEvt, recalc, false);
       doc.addEventListener('DOMContentLoaded', recalc, false);
    })(document, window);
}复制代码

有哪里不懂或有更好建议的欢迎留言~~


转载于:https://juejin.im/post/5c7cd9896fb9a049f9134bde

相关文章:

  • 一位90后的自述:如何从年薪3w到30w
  • POJ 2594 Treasure Exploration(最小可相交路径覆盖)题解
  • Docker下部署自己的LNMP工作环境
  • 移动APP安全测试
  • 如何让一个矩形外围为同一个数
  • Spark入Hbase的四种方式效率对比
  • 如何用30分钟快速优化家中Wi-Fi?阿里工程师有绝招
  • Notepad++ 7.6.4 发布,不会再有可信任的 UAC 弹窗
  • SAP 联合忽米网、重庆高新区,共建「重庆中小企业智能化赋能中心」
  • Elasticsearch在后台启动
  • 小程序开发-8-流行页面编码与组件的细节知识
  • 向量的基本运算
  • 计算几何函数库(转)
  • java并发多线程显式锁Condition条件简介分析与监视器 多线程下篇(四)
  • 2019阿里云峰会-边缘计算专场,邀您共话大连接低时延场景下的技术探索与实践...
  • 【译】JS基础算法脚本:字符串结尾
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Android组件 - 收藏集 - 掘金
  • Angular2开发踩坑系列-生产环境编译
  • co模块的前端实现
  • es6(二):字符串的扩展
  • Fundebug计费标准解释:事件数是如何定义的?
  • gulp 教程
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript DOM 10 - 滚动
  • JavaScript实现分页效果
  • Java比较器对数组,集合排序
  • MySQL QA
  • Xmanager 远程桌面 CentOS 7
  • 闭包,sync使用细节
  • 规范化安全开发 KOA 手脚架
  • 数据结构java版之冒泡排序及优化
  • 怎样选择前端框架
  • mysql面试题分组并合并列
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 国内开源镜像站点
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #14vue3生成表单并跳转到外部地址的方式
  • #宝哥教你#查看jquery绑定的事件函数
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (10)ATF MMU转换表
  • (7)STL算法之交换赋值
  • (8)STL算法之替换
  • (实战篇)如何缓存数据
  • (转)负载均衡,回话保持,cookie
  • ***原理与防范
  • .NET NPOI导出Excel详解
  • .NET 动态调用WebService + WSE + UsernameToken
  • @ConditionalOnProperty注解使用说明
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [APIO2012] 派遣 dispatching
  • [Asp.net mvc]国际化
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [FROM COM张]如何解决Nios II SBTE中出现的undefined reference to `xxx'警告
  • [HNOI2006]鬼谷子的钱袋