欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何运用rem单位让网页元素自动适配屏幕尺寸

最编程 2024-02-12 08:44:24
...

文章目录

  • rem是什么?
  • 计算公式
  • 是用js监听页面的宽度,动态改变页面的font-siz

rem是什么?

rem即是根元素的大小,页面一些元素的宽度使用rem实现自适应,比如width=“2rem”,
使用@media或者js监听当页面宽度发生变化时,改变font-size的大小,实现元素大小的自适应。

    html{
		  font-size="10px"
  }
  	.ele{
			width:2rem;
			height:3rem;
}

计算公式

1、你有一个设计稿A(假定640px),有一个预设的rem和px的比例B(假如是1rem = 10px)
2、获取用户浏览器的可视区域的宽度C(假如是320px),那么他此时1rem的尺寸D 可以根据 B/A = D/C 这个公式得知
3、原因是你假定屏幕可以容纳多少个rem,这是一个固定比例(如这里就是64rem)
1 rem = B / A * C;
//代入可得
1 rem = 10px / 640px * 320px = 5px;

是用js监听页面的宽度,动态改变页面的font-siz

可在全局引入,或者引入在单页面里面。实现根据页面宽度,动态改变font-size,实现自适应。

// 设置 rem 函数
function setRem() {
    let pageWidth = window.innerWidth;    
    //为了ie也能拿到可视窗口宽度
    if (typeof pageWidth != "number") {
        //标准模式
        if (document.compatMode == "CSS1Compat") {
            pageWidth = document.documentElement.clientWidth;
            //怪异模式
        } else {
            pageWidth = document.body.clientWidth;
        }
    }
    if (pageWidth <= 768) {        
        const baseSize = 75
             // 当前页面宽度相对于 750 宽的缩放比例,可根据自己需要修改。
        const scale = document.documentElement.clientWidth / pageWidth
        // 设置页面根节点字体大小
        document.documentElement.style.fontSize = (baseSize * Math.min(scale, 2)) + 'px'
        // console.log("document.documentElement.style.fontSize",document.documentElement.style.fontSize);
    } else if (pageWidth > 768 && pageWidth <= 1920) {
        const baseSize = 10
        // 当前页面宽度相对于 750 宽的缩放比例,可根据自己需要修改。
        const scale = document.documentElement.clientWidth / pageWidth

        
        // 设置页面根节点字体大小
        document.documentElement.style.fontSize = (10/1739)*pageWidth + 'px'
    } else {
        const baseSize = 100
        // 当前页面宽度相对于 750 宽的缩放比例,可根据自己需要修改。
        const scale = document.documentElement.clientWidth / 1920
        // 设置页面根节点字体大小
        document.documentElement.style.fontSize = (baseSize * Math.min(scale, 2)) + 'px'
        // console.log("document.documentElement.style.fontSize",document.documentElement.style.fontSize);
    }
}
// 初始化
setRem()
// 改变窗口大小时重新设置 rem
window.onresize = function () {
    setRem()
}