> 웹 프론트엔드 > JS 튜토리얼 > 모바일 터미널 적응 rem.js

모바일 터미널 적응 rem.js

不言
풀어 주다: 2018-04-10 11:26:01
원래의
3190명이 탐색했습니다.

다음 기사는 모바일 단말기 적응 rem.js에 대해 공유합니다. 특정 참조 값이 있습니다. 필요한 친구는 이를 참조할 수 있습니다.

모바일 단말기 웹 페이지 적응은 번거로운 문제이며 미디어 쿼리가 포함되는 방법이 일반적입니다. , js 컨트롤 등
개인적으로는 미디어 쿼리가 중복되고 소량으로 사용할 수 있습니다.

다음은 rem.js에 대한 나만의 요약입니다.

(function(doc, win) {

  // html元素字体
  // 这里基础字体设置为10在uc, WX上没效果,  不知道为什么
  // 设置为10时, dpr=1的手机, 宽度360, 计算出来html的字体大小为5px, 可能是字体太小了
  // 尽量设置大一些, 这样避免12px字体大小的限制
  var _rootFontSize = window._rootFontSize || 25;  // 默认不支持缩放
  var _remMetaScalable = typeof window._remMetaScalable === 'undefined' 
    ? false 
    : !!window._remMetaScalable;  var docEl = doc.documentElement,
    isIOS = navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),    // 只针对IOS设备
    dpr = isIOS ? Math.min(win.devicePixelRatio, 3) : 1,    // 计算缩放比
    scale = 1 / dpr,    // 检测支持的"缩放"事件
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
  docEl.dataset.dpr = dpr;  // 被iframe引用时,禁止缩放
  dpr = window.top === window.self ? dpr : 1;  var metaEl = doc.createElement('meta');
  metaEl.name = 'viewport';  var metaElContent = 'width=device-width, ';  // 支持缩放
  if (_remMetaScalable) {
    metaElContent += 'initial-scale=' + scale;
  } else {
    metaElContent += (      'initial-scale=' + scale 
      + ',maximum-scale=' + scale 
      + ', minimum-scale=' + scale 
      + ', user-scalable=no');
  }
  metaEl.content = metaElContent;
  docEl.firstElementChild.appendChild(metaEl);  // 缩放/旋转设备检测函数
  var recalc = function() {
    var width = docEl.clientWidth;    // 750为设计用的宽度, 比如它以iphone6标准(宽750)
    // 此时, 按照设计稿的尺寸写就可以了
    // 如: 设计稿为100px, 那么就写4rem(100 / 25), 25是自己设置的
    // 也可以设置成100, 这样就写100px就写1rem
    docEl.style.fontSize = _rootFontSize * (width / 750) + 'px';
  };
  recalc();  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
})(document, window);
로그인 후 복사

사용 예:

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport"
    content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"><title>rem</title><style type="text/css">
  .c1 {    border: 2px solid black;    font-size: 32px;  }

  .c2 {    border: 2px solid black;    font-size: 1.28rem;  }

  .c3 {    border: 1px solid black;    font-size: 1.28rem;  }</style><script type="text/javascript" src="rem.js"></script></head><body>
  <pre class="c1">
  .c1 {
    border: 2px solid black;
    font-size: 32px;
  }  
로그인 후 복사
  .c2 {
    border: 2px solid black;
    font-size: 1.28rem;
  }  
로그인 후 복사
  .c3 {
    border: 1px solid black;
    font-size: 1.28rem;
  }    
  
로그인 후 복사

실제 효과:
모바일 터미널 적응 rem.js

다음과 같이 알 수 있습니다.

DPR이 1이면 실제로 무엇이든 사용할 수 있습니다. 이는 일반적으로 PC 페이지에 쓰는 방식입니다.
DPR이 2인 경우:

  1. rem.js를 사용하지 마세요. 실제 표시 효과는 우리가 작성한 것의 두 배입니다
    . 이것이 바로 우리가 작성한 1px 테두리가 iPhone에서 더 두꺼워 보이는 이유입니다.

  2. rem.js를 사용하면 예상했던 효과가 나옵니다.

Google Chrome은 어떻습니까? 사용자 정의 시뮬레이션 장치를 추가하세요
모바일 터미널 적응 rem.js


요약:

여기서 rem.js를 사용하면 미디어 쿼리가 필요하지 않습니다.
글로벌 제어에 편리하며 iPhone 아래의 "1px 테두리 문제"도 해결할 수 있습니다.
postcss와 결합하면-도움말로. pxtorem, sublime cssrem 등의 플러그인을
PC에서와 마찬가지로 단위로 px로 작성할 수 있어 매우 편리합니다.

수정 추가를 환영합니다!

관련 권장 사항:


관성 슬라이딩 및 리바운드 모바일 측 Vue 탐색

js를 구현하여 PC인지 모바일인지 확인하는 방법


위 내용은 모바일 터미널 적응 rem.js의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿