前言
前端开发中,有时候元素的大小或者字体大小需要随着屏幕的缩放而改变其相应的大小,因此,我们可以通过flexible.js来实现,具体步骤如下。
步骤
创建前端项目目录
如下图所示,我这创建了一个my-data-view的项目,并创建相应的目录结构,my-data-view/js目录下放flexible.js,my-data-view目录下放我们创建好的index.html,具体如下图所示:
index.html代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>欢迎光临</title>
</head>
<body style="width: 100%;height: 100%">
<div style="font-size: 2rem">欢迎光临</div>
<script src="js/flexible.js"></script>
</body>
</html>
flexible.js代码(也可以从相应的网站上下载)如下:
(function flexible(window, document) {
var docEl = document.documentElement;
var dpr = window.devicePixelRatio || 1;
// adjust body font size
function setBodyFontSize() {
if (document.body) {
document.body.style.fontSize = 12 * dpr + "px";
} else {
document.addEventListener("DOMContentLoaded", setBodyFontSize);
}
}
setBodyFontSize();
// set 1rem = viewWidth / 10
function setRemUnit() {
var rem = docEl.clientWidth / 24;
docEl.style.fontSize = rem + "px";
}
setRemUnit();
// reset rem unit on page resize
window.addEventListener("resize", setRemUnit);
window.addEventListener("pageshow", function(e) {
if (e.persisted) {
setRemUnit();
}
});
// detect 0.5px supports
if (dpr >= 2) {
var fakeBody = document.createElement("body");
var testElement = document.createElement("div");
testElement.style.border = ".5px solid transparent";
fakeBody.appendChild(testElement);
docEl.appendChild(fakeBody);
if (testElement.offsetHeight === 1) {
docEl.classList.add("hairlines");
}
docEl.removeChild(fakeBody);
}
})(window, document);
打开浏览器访问,此时,字体大小会随着浏览器的放大缩小而放大缩小:
flexible.js视频