当前位置: 首页 > 知识库问答 >
问题:

前端 - rem适配生产环境不生效?

周超英
2024-07-23

背景:
vue3+vite项目。

rem配置相关代码

// rem设置
function setRem() {
  const designSize = 1920; // 设计图尺寸-测试jenkin分支部署

  const html = document.documentElement;

  const wW = html.clientWidth; // 窗口宽度
  const rem = (wW * 100) / designSize;

  document.documentElement.style.fontSize = rem + 'px';
}
window.addEventListener('load', setRem);

使用rem时,本地开发环境测试正常,部署到生产环境,界面错乱,应该如何修复呀?

共有2个答案

仲孙飞文
2024-07-23

load 改成 DOMContentLoaded 试试

齐凯康
2024-07-23

可能的问题和解决方案

问题 1: 加载时机问题

在你的代码中,setRem 函数只在 windowload 事件触发时执行一次。然而,如果生产环境的页面在加载后发生了尺寸变化(例如,由于用户改变了浏览器窗口大小或者页面布局在加载后发生了动态变化),那么 rem 值可能不会自动更新。

解决方案 1: 监听窗口大小变化

setRem 函数之外,添加对 resize 事件的监听,并在事件触发时重新计算 rem 值。

window.addEventListener('resize', setRem);

但是,请注意,频繁地改变 htmlfontSize 可能会导致页面重排和重绘,这可能会影响性能。因此,你可以考虑使用防抖(debounce)或节流(throttle)函数来限制 resize 事件的触发频率。

问题 2: 初始设置时机问题

在某些情况下,load 事件可能不是最佳的时机来设置 rem 值,尤其是在生产环境中,可能有更多的资源需要加载。

解决方案 2: 监听 DOMContentLoaded

尝试在 DOMContentLoaded 事件触发时设置 rem 值,而不是在 load 事件触发时。DOMContentLoaded 事件会在 DOM 完全加载和解析完成后触发,而不必等待样式表、图片和子框架完成加载。

document.addEventListener('DOMContentLoaded', setRem);

但是,如果你需要确保图片等所有资源都加载完成后再设置 rem 值,那么 load 事件仍然是必要的。

问题 3: 缓存或部署问题

在生产环境中,可能会存在缓存或部署问题,导致你的 setRem 函数没有被正确执行或更新。

解决方案 3: 清除缓存或重新部署

确保在生产环境中清除了缓存,并重新部署了你的应用。此外,检查你的构建和部署流程,确保没有错误或遗漏。

问题 4: CSS单位冲突

确保你的 CSS 中没有同时使用 pxrem 单位,并且这些单位之间的转换是正确的。如果同时使用这两种单位,可能会导致布局问题。

解决方案 4: 统一使用 rem 单位

尽量在你的 CSS 中统一使用 rem 单位,而不是混合使用 pxrem。这样,你就可以更容易地控制页面的布局和缩放。

总结

检查你的 setRem 函数的加载时机、事件监听和 CSS 单位使用,确保它们在生产环境中能够正常工作。同时,确保你的构建和部署流程没有错误或遗漏。如果以上方法都不能解决问题,你可能需要进一步检查你的代码和生产环境的具体配置。

 类似资料:
  • 生产环境打包要做两件事: 压缩应用代码; 使用 Vue.js 指南中描述的部署方式去除 Vue.js 中的警告。 下面是配置示例: // webpack.config.js module.exports = { // ... other options plugins: [ // short-circuits all Vue.js warning code new webp

  • 在构建我们的生产bundle时有两件事情要做: 1.压缩我们的应用代码; 2.使用Vue.js指南中描述的设置删除Vue.js源代码中的所有警告。 这里有一个示例的配置: // webpack.config.js module.exports = { // ... 其余配置 plugins: [ // 忽略所有Vue.js警告代码 new webpack.DefinePlu

  • 更新时间:2019-08-31 11:22:33 服务分为生产环境与开发环境,未发布的服务认为是在开发环境,发布后的服务为生产环境的服务。生产环境的服务才可以在web工作台,或代码工程内调用。生产环境的服务不可再进行修改,需要在开发环境中修改部署发布服务后,才可生效。 服务运维监控功能是为生产环境的服务提供的,您可以在此查看生产环境服务的调用量及运行日志。

  • 生产中的EAP EAP在默认的FreeRADIUS安装中开箱即用。但是,也有一些要点需要注意或更改以适应您的环境。在本节中,我们将介绍以下几点: 适当的公钥基础设施(PKI)的重要性 配置内部隧道虚拟服务器 内部和外部隧道识别的问题 禁用未使用的EAP方法 公共密钥基础设施简介公钥基础结构主要用于两件事: 验证某人的身份 通过不安全的连接交换安全数据 为了确保某人是他们声称的人,我们使用证书颁发机

  • 引言 Sentinel 目前已可用于生产环境,除了阿里巴巴以外,也有很多企业在生产环境中广泛使用 Sentinel。 生产环境的 Sentinel Dashboard 需要具备下面几个特性: 规则管理及推送,集中管理和推送规则。sentinel-core 提供 API 和扩展接口来接收信息。开发者需要根据自己的环境,选取一个可靠的推送规则方式;同时,规则最好在控制台中集中管理。 监控,支持可靠、快

  • 删除警告 为了减少文件大小,Vue 精简独立版本已经删除了所有警告,但是当你使用 Webpack 或 Browserify 等工具时,你需要一些额外的配置实现这点。 Webpack 使用 Webpack 的 DefinePlugin 来指定生产环境,以便在压缩时可以让 UglifyJS 自动删除代码块内的警告语句。例如配置: var webpack = require('webpack') mo

  • Kibana5 是是一个完整的 web 应用。使用时,你需要做的只是打开浏览器,然后输入你运行 Kibana 的机器地址然后加上端口号。比如说:localhost:5601 或者 http://YOURDOMAIN.com:5601。 但是当你准备在生产环境使用 Kibana5 的时候,比起在本机运行,就需要多考虑一些问题: 在哪运行 kibana 是否需要加密 Kibana 出入的流量 是否需要

  • Kibana 的配置很大程度上依赖于您的使用场景。如果只有自己使用,可以在自己的机器上运行 Kibana,配置它指向任何您想要交互的 Elasticsearch 实例。相反,如果有大量的 Kibana 使用者,需要多个 Kibana 实例连接至同一个 Elasticsearch 节点,来保证负载均衡。 尽管 Kibana 不是非常耗费资源,我们仍然建议运行 Kibana 的节点和 Elastics