移动端适配

介绍百分比,em,rem

  • 百分比的情况比较复杂:主要分5种情况
    1. withpaddingmarginrightleft相对于父元素的width。
    2. heighttopbottom相对于父元素的height。
    3. font-size相对于父元素的font-size。
    4. line-height相对于自身的font-size。
    5. border-radiusbackground-sizetransform: translate()transform-originzoomclip-path相对于自身宽/高
  • em 表示自身字体尺寸的倍数(不是相对于父元素)
  • rem Equal to the computed value of font-size on the root element.相当于根元素的计算值

适配方案

  • 首先一定要加上<meta name="viewport" content="width=device-width, initial-scale=1.0">为了让页面可视宽度与手机可视宽度相同

  • 我们试着让1rem=页面宽度的一半

function init (){
  var style = document.createElement('style')
  var pageWidth = document.documentElement.clientWidth;
  style.innerHTML = 'html{font-size :' + pageWidth/2 + 'px !important;}'
  document.head.appendChild(style);
}
window.onresize=function(){
  init()
}
window.onload=function(){
  init()
}

demo

这样做虽然可以将rem做成类百分比。但是,当你遇到除不尽的尺寸的时候,写起来会很麻烦。而且,如果设计稿有定高的模块的时候,你还得额外计算屏幕宽度的影响。所以这样做是很麻烦的,所以我们试着让1rem与设计稿联系起来,假设我们设计稿宽度是750。那么我们可以这样写。

function init (designWidth){
  var style = document.createElement('style')
  var pageWidth = document.documentElement.clientWidth;
  style.innerHTML = 'html{font-size :' + pageWidth/designWidth + 'px !important;}'
  document.head.appendChild(style);
}
window.onresize=function(){
  init(750)
}
window.onload=function(){
  init(750)
}

这样写就能让1rem等于设计稿的1px。但是还是会出现问题,浏览器font-size的最小单位是12px,假设你在iphone6下面开发,html的font-size.5px但是会被强制成12px。这样你做的就是无用功了。所以我们还需要一个rem2px的变量来放大我们的font-size

//设计稿的尺寸750
//设置之后1rem=设计稿的40px
function init (desginWidth,rem2px){
    var style = document.createElement('style')
    var pageWidth = document.documentElement.clientWidth;
    style.innerHTML = 'html{font-size :' + 40*pageWidth/desginWidth + 'px !important;}'
    document.head.appendChild(style);
}
window.onload=function(){ init(750,40) }

我个人比较喜欢将rem2px设置成40,有人会好奇,为什么不是20。还是因为最小font-size的限制,如果rem2px为20在ipad下面很容易突破12px的限制。

  • 到目前为止还不算完,因为rem其实是一个计算值,在 html 的 fontSize 设置为 px 的情况下1rem = 1 * (htmlFontSize / 16) * defaultFontSize一般浏览器的默认值是16,但是如果用户主动设置了defaultFontSize就会出现偏差,这种情况我们可以用百分比来绕过去。
function init (designWidth,rem2px){
    var d = window.document.createElement('div');
    d.style.width = '1rem';
    d.style.display = "none";
    var head = window.document.getElementsByTagName('head')[0];
    head.appendChild(d);
    var defaultFontSize = parseFloat(window.getComputedStyle(d, null).getPropertyValue('width'));
    d.remove();
  /*
    到这里是为了获得defaultFontSize系统默认字体
  */
    document.documentElement.style.fontSize = window.innerWidth / designWidth * rem2px / defaultFontSize * 100 + '%';
}

这样设置在defaultFontSize为16与我们第三步没什么区别

Reference

了解真实的rem

除了上面方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容