H5页面字体大小使用rem (重置字体大小)setFontSize.js

本文介绍了一种使用JavaScript动态调整HTML根元素字体大小的方法,确保不同设备屏幕宽度下网页元素的响应式布局效果一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*by  min*/
//初始化rem
(function(){
    var getStyle = (function(){
        if(window.currentStyle){
            return function(obj, name){
                return obj.currentStyle[name];
            }
        }
        else{
            return function(obj, name){
                return getComputedStyle(obj, false)[name];
            }
        }
    })();

    var addEvent = (function(){
        if(document.attachEvent){
            return function(obj, ev, fn){
                obj.attachEvent('on'+ev, fn);
            };
        }
        else{
            return function(obj, ev, fn){
                obj.addEventListener(ev, fn, false);
            };
        }
    })();

    var oHtml = document.querySelector('html');
    var fontSize = getStyle(oHtml, 'fontSize').split('px')[0];
    var originalWidth = 750;

    setFontSize();

    addEvent(window, 'resize', function(){
        setFontSize();
    });

    function setFontSize() { 
        var size = size || 200;
        var _fontSize = (getSize()['width'] * fontSize / 750)>size?size:(getSize()['width'] * fontSize / 750);
        oHtml.style.fontSize = _fontSize + "px";
    }

    function getSize() {
        return {
            width :document.documentElement.clientWidth || document.body.clientWidth,
            height :document.documentElement.clientHeight || document.body.clientHeight
        }
    }
})();

  setFontSize.js

注意html字体大小要先设置成100px,并且JS在CSS重置为100px以后引入。

转载于:https://www.cnblogs.com/ourLifes/p/7886276.html

<think>我们正在讨论的是在UniApp的H5项目中使用rem布局时是否需要设置html的字体大小。根据引用[2]和引用[3]中的信息,我们可以分析如下:1.**rem单位的特点**:-rem(rootem)是相对于根元素(即html元素)字体大小的单位。如果根元素的字体大小为16px,那么1rem就等于16px。-因此,使用rem布局的核心就是通过改变html的字体大小来调整页面元素的大小,从而实现适配不同屏幕的目的。2.**UniAppH5项目中的rem使用**:-在UniApp中,默认使用的是rpx单位,它在小程序端会自动转换为remH5端则转换为rem或百分比,具体取决于配置)。-但是,如果我们在H5项目中直接使用rem单位,那么我们就需要自己控制html的字体大小,因为rem是相对于根元素字体大小的。3.**设置html字体大小的必要性**:-如果我们希望使用rem单位来实现页面的自适应(响应式布局),那么设置html的字体大小是必要的。因为如果不设置,浏览器默认的字体大小通常是16px,这样我们就无法根据屏幕尺寸动态调整元素大小。-引用[2]中提到了一个示例,通过媒体查询设置html的字体大小,并且使用了`!important`来提高权重,覆盖lib-flexible设置的字体大小。这说明了在响应式布局中设置根字体大小的重要性。4.**如何设置html字体大小**:-我们可以使用JavaScript(如lib-flexible库)或CSS媒体查询来动态设置html的字体大小。-例如,使用媒体查询:```css@mediascreenand(min-width:768px){html{/*设置字体大小为50px*/font-size:50px!important;}}```-或者使用JavaScript根据屏幕宽度动态计算并设置。5.**UniApp中的配置**:-在UniApp中,如果我们使用rpx单位,则不需要手动设置html的字体大小,因为UniApp会自动处理。-但如果我们直接使用rem单位,那么就需要自己设置。我们可以在项目的入口文件(如main.js)中引入一个脚本来设置根字体大小,或者在App.vue的样式部分使用媒体查询来设置。6.**注意事项**:-引用[2]中提到,在设置根字体大小时,需要注意避免被其他样式覆盖(使用`!important`可以提高权重)。-同时,为了防止在大屏幕上字体过大,可以设置一个最大字体大小(如示例中在媒体查询中设置字体大小为50px)。**结论**:在UniApp的H5项目中使用rem单位时,**需要设置html的字体大小**,因为rem单位依赖于根元素的字体大小。如果不设置,则无法实现根据屏幕尺寸调整元素大小的效果。**实现建议**:1.如果使用纯CSS方案,可以在全局样式文件中(如common.css)使用媒体查询设置html的字体大小。2.如果使用动态计算方案,可以在项目入口文件中添加一个脚本,监听窗口大小变化并动态设置html的字体大小。例如,动态设置:```javascript//在main.js中document.addEventListener('DOMContentLoaded',()=>{constsetRootFontSize=()=>{constwidth=document.documentElement.clientWidth;//以设计稿宽度750px为例,设置1rem=100px(这样设计稿上100px的元素就可以写成1rem)constfontSize=(width/750)*100;document.documentElement.style.fontSize=fontSize+'px';};setRootFontSize();window.addEventListener('resize',setRootFontSize);});```或者使用CSS媒体查询(推荐,避免频繁触发resize事件):```css/*在App.vue的style标签中,或者全局样式文件中*/html{font-size:13.3333vw;/*以设计稿750px为例,100px=1rem,则100/750≈0.133333,即13.3333vw(1vw=1%视口宽度)*/}/*设置最大字体大小,避免在大屏幕上过大*/@mediascreenand(min-width:560px){html{font-size:54px;}}```这样,我们就可以在项目中使用rem单位了。**相关问题**:1.在UniApp中,如何将设计稿的尺寸转换为rem单位?2.使用rem布局时,如何解决移动端1px边框问题?3.UniApp的rpx和rem有什么区别?在H5端如何选择?</think>在 UniApp 的 H5 项目中使用 rem 单位时,**设置 HTML 根字体大小是必要的**,原因如下: ### 必要性分析 ✅ 1. **rem 单位的工作原理** rem(root em)是相对于根元素(HTML)字体大小的相对单位。若不设置 HTML 字体大小: ```css /* 未设置 html font-size 时 */ .element { width: 10rem; /* 默认 1rem=16px → 实际宽度160px */ } ``` 浏览器默认 `1rem = 16px`,这将导致布局无法适配不同屏幕尺寸[^3]。 2. **响应式适配的核心** 通过动态设置 HTML 字体大小,实现响应式布局: ```css /* 设置基准值(设计稿750px宽时,1rem=100px) */ html { font-size: calc(100vw / 7.5); /* 100vw/750*100 */ } .box { width: 7.5rem; /* 在任何屏幕都占满宽度 */ } ``` 3. **防止超大屏幕显示异常** 如引用[2]所述,需限制最大字体尺寸: ```less @media screen and (min-width: 768px) { html { font-size: 50PX !important; /* 大屏锁定50px */ } } ``` 否则在 PC 端会出现元素过大的问题[^2]。 ### 最佳实践方案 🚀 **步骤 1:设置根字体大小** ```html <!-- App.vue --> <style> html { font-size: calc(100vw / 7.5); /* 基于750px设计稿 */ max-font-size: 50px; /* 大屏上限 */ } </style> ``` **步骤 2:配合 UniApp 的 rpx 使用** UniApp 内置的 `rpx` 会自动转换为 remH5 模式): ```vue <view class="container"> <text style="font-size: 28rpx">自动适配文本</text> </view> ``` 编译后: ```css /* H5 端输出 */ text { font-size: 0.28rem; /* 基于html的font-size计算 */ } ``` ### 注意事项 ⚠️ 1. **与 rpx 的关系** 在 UniApp 中: - 小程序端:`rpx` → 微信小程序自适应单位 - H5 端:`rpx` → 自动转换为 `rem` 无需手动处理 rem 计算[^2] 2. **第三方库冲突** 如使用 `lib-flexible` 等适配库,需覆盖其设置: ```css html { font-size: 50PX !important; /* 提高权重覆盖库设置 */ } ``` 3. **设计稿尺寸匹配** | 设计稿宽度 | HTML font-size 公式 | 1rem 代表 | |------------|-------------------------|-----------| | 750px | `calc(100vw / 7.5)` | 100px | | 375px | `calc(100vw / 3.75)` | 100px | ### 替代方案对比 🔄 | **方案** | 是否需要设置 html font-size | 优点 | 缺点 | |----------------|-----------------------------|-----------------------|--------------------| | **原生 rem** | ✅ 必需 | 完全控制响应式逻辑 | 需手动计算 | | **UniApp rpx** | ❌ 自动处理 | 零配置,跨平台一致 | 灵活性较低 | | **vw/vh** | ❌ 不需要 | 纯CSS方案,无JS依赖 | 兼容性要求IE10+ | > ✨ **推荐**:直接使用 UniApp 的 `rpx` 单位,无需手动设置 rem 基准值,框架会自动完成转换[^2]。 --- ### 相关问题 1. UniApp 中 rpx 和 rem 有什么区别? 2. 如何在 UniApp 中实现 PC 端和移动端响应式布局? 3. 使用 rem 布局时如何解决 1px 边框问题? 4. UniApp 的 rpx 在不同平台是如何转换的? 5. 第三方 UI 库(如 Vant)在 UniApp 中如何做响应式适配?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值