JS는 rem 적응을 구현합니다.

1.rem 정의

rem은 상대 길이 단위입니다. 루트 요소(html)의 font-size 값의 css 단위(adaptation unit rem)입니다.

예: 페이지에서 html 태그의 글꼴 크기를 16px로 설정한 경우 1rem = 16px

html{
    font-size:16px;//根元素字体大小,此时1rem = 16px
}

2. 다른 장치에서 rem의 적응을 실현하기 위해 다른 장치의 너비에 따라 html 글꼴 크기를 동적으로 설정합니다.

 예: 컴퓨터 1920px 디자인 너비를 예로 들어 HTML 루트 요소의 글꼴 크기를 실제 화면 너비에 따라 설정합니다. 1rem은 다음과 같습니다.

rem = 화면 너비/디자인 드래프트 너비(1920px) *100

화면 너비가 1920px, 즉 1rem = 100px인 경우 div 제목 크기를 20px로, 너비를 200px로, 높이를 100px로 설정해야 한다면

div{
    font-size:0.2rem,
    width:2rem,
    height:1rem
}

이러한 방식으로 서로 다른 화면에서 서로 다른 DOM 요소의 실제 크기는  화면 너비/1920 이며 비례 배율을 달성합니다.

rem 적응 코드 구현:

(function(designWidth, maxWidth) {
	var doc = document,
		win = window,
		docEl = doc.documentElement,
		remStyle = document.createElement("style"),
		tid;

	function refreshRem() {
		var width = docEl.getBoundingClientRect().width;//屏幕宽度
		maxWidth = maxWidth || 540;//设置最大宽度
		width < 800  && (width = 800);//设置最小宽度
		width > maxWidth && (width = maxWidth);
		var rem = width * 100 / designWidth;//屏幕宽度 / 设计稿宽度 * 100,若为电脑运行,此时rem=100
		remStyle.innerHTML = 'html{font-size:' + rem + 'px;}'//此时重新定义html根元素大小为1rem,即100px
	}

	if (docEl.firstElementChild) {
		docEl.firstElementChild.appendChild(remStyle);
	} else {
		var wrap = doc.createElement("div");
		wrap.appendChild(remStyle);
		doc.write(wrap.innerHTML);
		wrap = null;
	}
	//要等 wiewport 设置好后才能执行 refreshRem,不然 refreshRem 会执行2次;
	refreshRem();

	win.addEventListener("resize", function() {
		clearTimeout(tid); //防止执行两次
		tid = setTimeout(refreshRem, 300);
	}, false);

	win.addEventListener("pageshow", function(e) {
		if (e.persisted) { // 浏览器后退的时候重新计算
			clearTimeout(tid);
			tid = setTimeout(refreshRem, 300);
		}
	}, false);

	if (doc.readyState === "complete") {
		doc.body.style.fontSize = "16px";
	} else {
		doc.addEventListener("DOMContentLoaded", function(e) {
			doc.body.style.fontSize = "16px";
		}, false);
	}
})(1920, maxWidth);//此处传入设计稿宽度及最大宽度

코드를 js 파일에 넣거나 페이지에서 호출하거나 index.html 페이지의 스크립트 태그에 직접 작성하십시오.

추천

출처blog.csdn.net/dai556688/article/details/129667781