html 元素是文档的根元素,对html设置了字体大小,其子元素会继承html字体的大小。
不同的浏览器默认有的默认html的字体是16px,有的是14px。
同时浏览器字体的大小还会受到你自己在手机里配置的系统字体大小的影响。
这么多因素,如果只靠css里配置html字体大小,子元素基于html的rem是不能保证在不同的手机端适配的。
所以可以通过js动态来计算html应该配置多大的字体。
<script>
function htmlFontSize() {
var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
var width = w > h ? h : w;
width = width > 720 ? 720 : width;
var fz = ~~(width * 100000 / 36) / 10000/2;
document.getElementsByTagName("html")[0].style.cssText = 'font-size: ' + fz + "px";
var realfz = ~~(+window.getComputedStyle(document.getElementsByTagName("html")[0]).fontSize.replace('px', '') * 10000) / 10000;
if (fz !== realfz) {
document.getElementsByTagName("html")[0].style.cssText = 'font-size: ' + fz * (fz / realfz) + "px";
}
}
htmlFontSize();
</script>
在js计算出html的字体大小以后,就可以在这个基础上配置各子元素的字体大小了。
html的字体大小设置为font-size100px原因:
html{font-size:100px;}
h1{font-size: 0.16rem;//100*0.16=16px }
.cc{font-size:0.14rem;//14px}
又为什么要把html的font-size设置成50px:
因为设备像素比有2的,还有3的,我们按照设备像素比是2的开发,如果html{font-size:50px;}那么设计稿ui中得头部header的高度是86px:height:0.86rem.(即:50px*0.86rem=43px,那么到了设备像素比是2的设备上,header的高度就是86px)这样就省去了除以2的计算。