国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

手機(jī)端頁面rem寬度自適應(yīng)腳本

2024-05-06 16:20:38
字體:
供稿:網(wǎng)友
網(wǎng)上關(guān)于這方面的文章有很多,重復(fù)的東西本文不再贅述,僅提供思路,并解釋一些其他文章講述模糊的地方。重點(diǎn)給大家介紹下rem.有需要的小伙伴可以參考下。
 

什么是rem

在我看來,rem就是1rem單位就等于html節(jié)點(diǎn)fontsize的像素值。所以改變html節(jié)點(diǎn)的fontsize是最為關(guān)鍵的一步。根據(jù)手機(jī)寬度改變相對大小就可以實(shí)現(xiàn)自適應(yīng)了,就不用什么媒體查詢那些的。

我們的設(shè)計(jì)圖往往寬度是640或者其他尺寸的,不過我建議是用這個(gè)尺寸,以640為基準(zhǔn),以小到大,實(shí)現(xiàn)自適應(yīng),下面實(shí)現(xiàn)的比例為1rem=40px(640寬度)。

為什么這樣搞?

這樣一套代碼就搞定手機(jī)端尺寸自適應(yīng),不需要媒體查詢,而且利用Sass和Less能夠給我們節(jié)約更多的時(shí)間,以及更好的體驗(yàn)。

擴(kuò)展
因?yàn)槭且?jì)算rem的值,所以我們前端在看到設(shè)計(jì)圖量尺寸的時(shí)候會(huì)去計(jì)算下這個(gè)東西,需要花費(fèi)一些時(shí)間,所以我提供了Sass(不知道的自己去百度)和Less(不知道的自己去百度)相對變量的代碼,

Sass相對變量地址:Sass相對變量

Less相對變量地址:Less相對變量

打開頁面,1-400的相對變量都在上面,只需要全選復(fù)制,然后放入你的項(xiàng)目中,直接拿來用就是了,當(dāng)然我寫的css雪碧圖生成工具也會(huì)用到里面的變量,大家不妨一試。

手機(jī)自適應(yīng)代碼

下面的代碼是拷貝自淘寶的手機(jī)app,當(dāng)然,我把有的變量還原了,有的注釋了。

viewport標(biāo)簽

 

復(fù)制代碼代碼如下:

<meta name="viewport"content="initial-scale=0.5, minimum-scale=0.5, maximum-scale=0.5,user-scalable=no,minimal-ui"/>

 

js代碼
 

  1. !function(win) { 
  2.  function resize() { 
  3.   var domWidth = domEle.getBoundingClientRect().width; 
  4.   if(domWidth / v > 540){ 
  5.    domWidth = 540 * v; 
  6.   } 
  7.   win.rem = domWidth / 16; 
  8.   domEle.style.fontSize = win.rem + "px"
  9.  } 
  10.  var v, initial_scale, timeCode, dom = win.document, domEle = dom.documentElement, viewport = dom.querySelector('meta[name="viewport"]'), flexible = dom.querySelector('meta[name="flexible"]'); 
  11.  if (viewport) { 
  12.   //viewport:<meta name="viewport"content="initial-scale=0.5, minimum-scale=0.5, maximum-scale=0.5,user-scalable=no,minimal-ui"/> 
  13.   var o = viewport.getAttribute("content").match(/initial/-scale=(["']?)([/d/.]+)/1?/); 
  14.   if(o){ 
  15.    initial_scale = parseFloat(o[2]); 
  16.    v = parseInt(1 / initial_scale); 
  17.   } 
  18.  } else { 
  19.   if (flexible) { 
  20.    var o = flexible.getAttribute("content").match(/initial/-dpr=(["']?)([/d/.]+)/1?/); 
  21.    if(o){ 
  22.     v = parseFloat(o[2]); 
  23.     initial_scale = parseFloat((1 / v).toFixed(2)) 
  24.    } 
  25.   } 
  26.  } 
  27.  if (!v && !initial_scale) { 
  28.   var n = (win.navigator.appVersion.match(/android/gi), win.navigator.appVersion.match(/iphone/gi)); 
  29.   v = win.devicePixelRatio; 
  30.   v = n ? v >= 3 ? 3 : v >= 2 ? 2 : 1 : 1, initial_scale = 1 / v 
  31.  } 
  32.  //沒有viewport標(biāo)簽的情況下 
  33.  if (domEle.setAttribute("data-dpr", v), !viewport) { 
  34.   if (viewport = dom.createElement("meta"), viewport.setAttribute("name""viewport"), viewport.setAttribute("content""initial-scale=" + initial_scale + ", maximum-scale=" + initial_scale + ", minimum-scale=" + initial_scale + ", user-scalable=no"), domEle.firstElementChild) { 
  35.    domEle.firstElementChild.appendChild(viewport) 
  36.   } else { 
  37.    var m = dom.createElement("div"); 
  38.    m.appendChild(viewport), dom.write(m.innerHTML) 
  39.   } 
  40.  } 
  41.  win.dpr = v; 
  42.  win.addEventListener("resize"function() { 
  43.   clearTimeout(timeCode), timeCode = setTimeout(resize, 300) 
  44.  }, false); 
  45.  win.addEventListener("pageshow"function(b) { 
  46.   b.persisted && (clearTimeout(timeCode), timeCode = setTimeout(resize, 300)) 
  47.  }, false); 
  48.  /* 個(gè)人覺得沒必要完成后就把body的字體設(shè)置為12 
  49.  "complete" === dom.readyState ? dom.body.style.fontSize = 12 * v + "px" : dom.addEventListener("DOMContentLoaded", function() { 
  50.   //dom.body.style.fontSize = 12 * v + "px" 
  51.  }, false); 
  52.  */ 
  53.  resize(); 
  54. }(window); 
?
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 龙山县| 河津市| 东阳市| 同江市| 会理县| 林甸县| 依兰县| 合川市| 荆州市| 斗六市| 天台县| 萝北县| 苏尼特右旗| 旬邑县| 福贡县| 原平市| 沾益县| 临江市| 克什克腾旗| 忻州市| 揭阳市| 和政县| 阜阳市| 剑阁县| 玉屏| 拜泉县| 苏尼特右旗| 绥宁县| 隆昌县| 平泉县| 高陵县| 萨嘎县| 兴海县| 潞西市| 新乡县| 崇文区| 浦江县| 宝应县| 崇左市| 临武县| 汝南县|