视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
js实现rem自动匹配计算font-size
2020-11-27 20:05:34 责编:小OO
文档

本文主要介绍了js实现rem自动匹配计算font-size的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

实际开发过程中,我们经常会被各种宽度,高度计算搞晕。尤其是使用了rem的计算方式,自适应布局难倒一大片程序员。为了解决这类问题,我觉得可以利用js监听屏幕宽度变化来实现更改HTML 根元素font-size的值。

下面是相关JavaScript的实现代码:

此代码选0px为基准值,为什么选0呢,

0px的页面宽度是一个安全的最大宽度,保证了移动端页面两边不会留白。注意这里的px是css逻辑像素,与设备的物理像素是有区别的。如iPhone 5使用的是Retina视网膜屏幕,使用2px x 2px的 device pixel 代表 1px x 1px 的 css pixel,所以设备像素数为0 x 1136px,而它的CSS逻辑像素数为320 x 568px。
所以当要切移动端的页面的时候,需要把效果图宽度等比例缩放到0px。

比如当页面中某一p的宽度为60,高度为65的时候,就可以直接这样写样式:

{
 width:0.6rem;
 height:0.65rem
}

浏览器的兼容性

rem是CSS3新引进来的一个度量单位,大家心里肯定会觉得心灰意冷呀,担心浏览器的支持情况。其实大家不用害怕,你可能会惊讶,支持的浏览器还是蛮多的,比如:Mozilla Firefox 3.6+、Apple Safari 5+、Google Chrome、IE9+和Opera11+。只是可怜的IE6-8无法,你们就把他们当透明了吧,我向来都是如此。

不过使用单位设置字体,可不能完全不考虑IE了,如果你想使用这个REM,但也想兼容IE下的效果,可你可考虑“px”和“rem”一起使用,用"px"来实现IE6-8下的效果,然后使用“Rem”来实现代浏览器的效果。就让IE6-8不能随文字的改变而改变吧,谁让这个Ie6-8这么老呢?大家不仿试试,还蛮有意思,说不定这个就是主流的度量单位了。

完整实例代码:

<!DOCTYPE html>
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" />
 <meta content="telephone=no" name="format-detection" />
 <meta name="format-detection" content="email=no" />
 <meta http-equiv="Cache-Control" content="no-cache"/>
 <title>响应式布局</title>
 <style>
 html{font-size: 20px;width: 100%;height: 100%;}
 body{margin: 0;padding: 0;}
 header,footer{width: 100%;background: #17A578;color: #fff;font-size:1rem;text-align: center;line-height: 2rem;}
 .footer{position: fixed;bottom: 0;}
 .box{}
 .public{width: 5rem;height: 5rem;font-size: 1.2rem;display: inline-block;text-align: center;color: #fff;line-height: 5rem;margin-top: 1rem;}
 .left{background: #f00;}
 .center{background: #048F74;}
 .right{background: #000;}
 </style>
 </head>
 <body>
 <header>页面头部</header>
 <p class="box">
 <p class="public left">左</p>
 <p class="public center">中</p>
 <p class="public right">右</p>
 <p class="public left">左</p>
 <p class="public center">中</p>
 <p class="public right">右</p>
 </p>
 <footer class="footer">页面底部</footer>
 <script>
 //orientationchange方向改变事件
 (function (doc, win) {
 var docEl = doc.documentElement,//根元素html
 //判断窗口有没有orientationchange这个方法,有就赋值给一个变量,没有就返回resize方法。
 resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
 recalc = function () {
 var clientWidth = docEl.clientWidth;
 if (!clientWidth) return;
 //把document的fontSize大小设置成跟窗口成一定比例的大小,从而实现响应式效果。
 docEl.style.fontSize = 20 * (clientWidth / 320) + 'px';
 };
 //alert(docEl)
 if (!doc.addEventListener) return;
 win.addEventListener(resizeEvt, recalc, false);//addEventListener事件方法接受三个参数:第一个是事件名称比如点击事件onclick,第二个是要执行的函数,第三个是布尔值
 doc.addEventListener('DOMContentLoaded', recalc, false)//绑定浏览器缩放与加载时间
 })(document, window);
 //alert(document.documentElement.clientWidth/320)

 </script>
 </body>
</html>

下载本文
显示全文
专题