虽互不曾谋面,但希望能和您成为笔尖下的朋友
以读书,技术,生活为主,偶尔撒点鸡汤
不作,不敷衍,意在真诚吐露,用心分享
点击左上方,可关注本刊
标星公众号(ID:itclanCoder)
如果不知道如何操作
点击这里,标星不迷路
说一下rem 与 em 有什么区别
rem 是基于 html 元素的字体大小来决定,而 em 则根据使用它的元素的大小决定,一般被称为相对长度单位,是根据它父元素的字体大小来计算的,一般默认情况下:16px = 1em
如果父元素font-size:16px,子元素margin:0.8em。那么得到的大小就是:0.8 * 16 =12.8。
当所有单位都采用em时,我们只需要改变body的font-size,那么其他子元素宽度就能动态变化了,显然方便很多
em 和 rem 单位之间的区别是浏览器根据谁来转化成 px 值
rem是css3新增的一个相对长度单位,它的出现是为了解决em的缺点,em可以说是相对于父级元素的字体大小,当父级元素字体大小改变时,又得重新计算。
rem出现就可以解决这样的问题,rem只相对于根目录,即HTML元素。有了rem这个单位,我们只需要调整根元素html的font-size就能达到所有元素的动态适配了
移动端-以一个固定尺寸(750px)为标准-将 px 转化为 rem
(function(win, lib) {
var doc = win.document;
var docEl = doc.documentElement;
var devicePixelRatio = win.devicePixelRatio;
var dpr = 1;
var scale = 1;
// 设置vierPort
function setViewport() {
dpr = 1;
win.devicePixelRatioValue = dpr;
scale = 1 / dpr;
var metaEl = doc.createElement('meta');
metaEl.setAttribute('name', 'viewport');
metaEl.setAttribute(
'content',
'initial-scale=' +
scale +
', maximum-scale=' +
scale +
', minimum-scale=' +
scale +
', user-scalable=no'
);
if (docEl.firstElementChild) {
docEl.firstElementChild.appendChild(metaEl);
} else {
var wrap = doc.createElement('div');
wrap.appendChild(metaEl);
doc.write(wrap.innerHTML);
}
}
setViewport();
var newBase = 100; // 把页面划分为100等分
// 设置Rem
function setRem() {
var visualView = Math.min(
docEl.getBoundingClientRect().width,
lib.maxWidth
);
newBase = (100 * visualView) / lib.desinWidth;
docEl.style.fontSize = newBase + 'px';
}
var tid;
lib.desinWidth = 640;
lib.baseFont = 18;
lib.maxWidth = 540;
lib.init = function() {
win.addEventListener(
'resize',
function() {
clearTimeout(tid);
tid = setTimeout(setRem, 300);
},
false
);
win.addEventListener(
'pageshow',
function(e) {
if (e.persisted) {
clearTimeout(tid);
tid = setTimeout(setRem, 300);
}
},
false
);
if (doc.readyState === 'complete') {
doc.body.style.fontSize = lib.baseFont * dpr + 'px';
} else {
doc.addEventListener(
'DOMContentLoaded',
function(e) {
doc.body.style.fontSize = lib.baseFont * dpr + 'px';
},
false
);
}
setRem();
docEl.setAttribute('data-dpr', dpr);
};
})(window, window['adaptive'] || (window['adaptive'] = {}));
window['adaptive'].desinWidth = 750;
window['adaptive'].baseFont = 12;
window['adaptive'].maxWidth = 540;
window['adaptive'].init();
以上代码以设计稿 750px 的为标准,如果是非 750px,在实际页面中,将它转化为 750,然后再做转化,根据rem,将一个页面平均分成多少个等分,做移动端适配
100px = 1rem;
750px = 7.5rem;
将这段js代码命名为一个mobile-adaption.js引入到页面中,就可以愉快的使用了,将px转化为rem,实现自适应布局
在不同的设备当中保持一致
每个公司都有自己的一套标准,有的也用手淘那一方案.遵循自己公司开发规范即可.

公众号(ID:itclanCoder)
码能让您早脱菜籍,文能让您洗净铅华
可能您还想看更多:
本文介绍了CSS中的rem与em单位的区别。rem是相对于根元素html的字体大小,而em是相对于父元素的字体大小。在移动端适配中,使用rem能简化动态适配过程。文章还探讨了如何以750px为标准将px转化为rem进行移动端布局,并提及不同公司的适配方案和事件循环、数组排序等JS相关面试知识点。




898

被折叠的 条评论
为什么被折叠?



