发条戏子 2020-05-30
<script> // 适用于750的设计稿 var iScale = 1; // 通过页面加载的时候去获取用户设备的物理像素比 iScale = iScale / window.devicePixelRatio; // 然后来设置html的<meta>表现的缩放属性,从而达到在任意页面实现页面布局的自适应的效果 document.write(‘<meta name="viewport" content="width=device-width,‘ + ‘initial-scale=‘ + iScale + ‘,minimum-scale=‘ + iScale + ‘,maximum-scale=‘ + iScale + ‘,user-scalable=no" />‘) // 获取浏览器窗口文档显示区域的宽度,不包括滚动条。 var iWidth = document.documentElement.clientWidth; // 设置页面基础的字体大小 document.getElementsByTagName(‘html‘)[0].style.fontSize = iWidth / 15 + ‘px‘; </script>
WebSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放
,一般的安卓的app的开发者都会默认禁止这条属性;说是会对其他的东西有影响。那么这样的话,就不能够实现任意比例的缩放了,也当然达不到我们想要的结果。<script> var docEl = document.documentElement, //当设备的方向变化(设备横向持或纵向持)此事件被触发。绑定此事件时, //注意现在当浏览器不支持orientationChange事件的时候我们绑定了resize 事件。 //总来的来就是监听当前窗口的变化,一旦有变化就需要重新设置根字体的值 resizeEvt = ‘orientationchange‘ in window ? ‘orientationchange‘ : ‘resize‘, recalc = function () { //设置根字体大小1:50适用于375的设计稿,需要变更,就更改基础字体的数值 docEl.style.fontSize = 100 * (docEl.clientWidth / 750) + ‘px‘; }; //绑定浏览器缩放与加载时间 window.addEventListener(resizeEvt, recalc, false); document.addEventListener(‘DOMContentLoaded‘, recalc, false); </script>
第二个方案相比第一个方案来说有两个有点。
<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
这样就可以了。这样就避免了在app中安卓禁止页面任意比例缩放后,页面不能自适应的这个bug。给大家上一个小的demo希望给大家一些直观的感受,不要问为什么不给链接!
<!DOCTYPE html> <html> <head> <meta HTTP-EQUIV="Pragma" CONTENT="no-cache"> <meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> <meta HTTP-EQUIV="Expires" CONTENT="0"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" charset="utf-8"> <title>我姓李名乾坤</title> <script type="text/javascript"> var docEl = document.documentElement, //当设备的方向变化(设备横向持或纵向持)此事件被触发。绑定此事件时, //注意现在当浏览器不支持orientationChange事件的时候我们绑定了resize 事件。 //总来的来就是监听当前窗口的变化,一旦有变化就需要重新设置根字体的值 resizeEvt = ‘orientationchange‘ in window ? ‘orientationchange‘ : ‘resize‘, recalc = function () { //设置根字体大小 docEl.style.fontSize = 100 * (docEl.clientWidth / 750) + ‘px‘; }; //绑定浏览器缩放与加载时间 window.addEventListener(resizeEvt, recalc, false); document.addEventListener(‘DOMContentLoaded‘, recalc, false); </script> <style type="text/css"> * { margin: 0; padding: 0; } ul, li { list-style: none; background: white; margin-top: .01rem; } html, body { font-family: "微软雅黑"; width: 100%; height: 100%; background: #E9E9E9; } .left { float: left; } .loan { width: 7.2rem; } .loan>li { width: 7.5rem; height: 1.99rem; border-bottom: 1px solid #E9E9E9; } .logoBox { width: 1.45rem; height: 1.57rem; padding-left: .3rem; padding-top: .4rem; } .logoBox>img { width: 1.17rem; height: 1.17rem; } .contentBox { width: 4.5rem; height: 1.17rem; padding-top: .4rem; } .Name { width: 4.5rem; height: .5rem; line-height: .5rem; font-size: .3rem; color: #333333; } .description { width: 4.5rem; height: .22rem; line-height: .22rem; font-size: .22rem; color: #666666; margin-bottom: .1rem; } .contentBox>span { padding: .05rem .06rem; font-size: .14rem; line-height: .14rem; color: #fc936d; background: #fff4f0; margin-right: .05rem; } .optBtn { width: 1.1rem; height: .4rem; line-height: .4rem; text-align: center; background: #FFFFFF; font-size: .22rem; color: #fc936d; margin-top: 1rem; border-radius: .1rem; } </style> </head> <body> <ul class="loan"> <li id="paipaidai"> <div class="logoBox left"> ![](1.png) </div> <div class="contentBox left"> <p class="Name">贴代码</p> <p class="description">贴代码,贴代码</p> <span class="left">贴代码</span> <span class="left">贴代码</span> <span class="left">贴代码</span> </div> <div class="optBtn left">喜欢代码</div> </li> <li id="paipaidai"> <div class="logoBox left"> ![](1.png) </div> <div class="contentBox left"> <p class="Name">贴代码</p> <p class="description">贴代码,贴代码</p> <span class="left">贴代码</span> <span class="left">贴代码</span> <span class="left">贴代码</span> </div> <div class="optBtn left">喜欢代码</div> </li> <li id="paipaidai"> <div class="logoBox left"> ![](1.png) </div> <div class="contentBox left"> <p class="Name">贴代码</p> <p class="description">贴代码,贴代码</p> <span class="left">贴代码</span> <span class="left">贴代码</span> <span class="left">贴代码</span> </div> <div class="optBtn left">喜欢代码</div> </li> </ul> </body> </html>
window.onload=function(){ var e=(document.documentElement.clientWidth>=640?640:document.documentElement.clientWidth)/320*12; document.documentElement.clientHeight;document.getElementsByTagName("html")[0].style.fontSize=e+"px"};
这种方案的的好处是它的rem和px比值在浏览器模拟机器上面的比值是1:12,其数值大小也同样是可以调整的,这样的做的好处就是,在安卓原生的app上面,即使app的开发者禁止了js的使用,也可以做到一个相对的自适应,效果要比前面的两个要好一点,但是缺点就是px和rem之间的换算有点麻烦。
不知道上面的分享有没有帮助到你,你要是问我有没有推荐的,我已经把适用的场景说的很明白了。你可以自己选择,我现在一般是用的第二种的。
希望能帮助到你们~如果有什么问题,请大家多多指出。