vue,适配电脑不同分辨问题,适配比例为100%和125%分辨率导致页面样式错乱问题

第一步:

新建一个js文件,名字随便起,这里命名为devicePixelRatio.js

class DevicePixelRatio {
    constructor() {
            //this.flag = false;
        }
        //获取系统类型
    _getSystem() {
            let flag = false;
            var agent = navigator.userAgent.toLowerCase();
            //		var isMac = /macintosh|mac os x/i.test(navigator.userAgent);
            //		if(isMac) {
            //			return false;
            //		}
            //现只针对windows处理,其它系统暂无该情况,如有,继续在此添加
            if (agent.indexOf("windows") >= 0) {
                return true;
            }
        }
        //获取页面缩放比例
        //	_getDevicePixelRatio() {
        //		let t = this;
        //	}
        //监听方法兼容写法
    _addHandler(element, type, handler) {
            if (element.addEventListener) {
                element.addEventListener(type, handler, false);
            } else if (element.attachEvent) {
                element.attachEvent("on" + type, handler);
            } else {
                element["on" + type] = handler;
            }
        }
        //校正浏览器缩放比例
    _correct() {
            let t = this;
            //页面devicePixelRatio(设备像素比例)变化后,计算页面body标签zoom修改其大小,来抵消devicePixelRatio带来的变化。
            document.getElementsByTagName('body')[0].style.zoom = 1 / window.devicePixelRatio;
        }
        //监听页面缩放
    _watch() {
            let t = this;
            t._addHandler(window, 'resize', function() { //注意这个方法是解决全局有两个window.resize
                //重新校正
                t._correct()
            })
        }
        //初始化页面比例
    init() {
        let t = this;
        if (t._getSystem()) { //判断设备,目前只在windows系统下校正浏览器缩放比例
            //初始化页面校正浏览器缩放比例
            t._correct();
            //开启监听页面缩放
            t._watch();
        }
    }
}
export default DevicePixelRatio;

第二步

在app.vue或者其它全局的文件中引入并使用

import DevicePixelRatio from './utils/devicePixelRatio';
export default {
  name: "App",
  created() {
    new DevicePixelRatio().init();
	}
};

他基本是固定了关于vue项目的显示,不管是屏幕显示比例还是浏览器显示比例改变,项目的显示都不会受到影响,但是其他外部嵌入页面依然会随显示比例的改变而改变。

<think>嗯,用户问的是关于Vue PC后台管理窗口缩小后内容错乱问题。首先,我需要确定用户的具体需求。他们可能是在开发一个后台管理系统,当浏览器窗口缩小时,布局出现混乱,比如元素堆叠、文字溢出或者排版错位。用户希望找到解决方案,确保在不同屏幕尺寸下内容能正确适配。 接下来,我应该考虑常见的适配方案。响应式布局是关键,可能涉及到FlexboxGrid布局的使用。然后,媒体查询(Media Queries)也是必须的,用来根据不同屏幕尺寸应用不同样式。另外,组件库的响应式支持,比如Element UI或Ant Design Vue,是否有按需引入,或者是否正确配置了断点。 还可能涉及到rem或vw单位的使用,确保元素尺寸随屏幕变化而调整。图片表格的适配问题,比如图片是否设置了max-width: 100%,表格在窄屏下是否出现横向滚动条。第三方组件可能需要单独的响应式配置,比如表格或弹窗的宽度设置。 另外,用户可能没有考虑到移动端优先的设计原则,或者在开发时只关注了大屏幕,忽略了小屏幕的测试。需要提醒他们进行多设备测试,使用Chrome的开发者工具模拟不同分辨率。 可能还需要检查是否缺少viewport元标签,这会影响移动端的缩放行为。还有,CSS中的固定宽度(如px单位)是否过多,导致无法自适应。应该建议改用百分比或相对单位。 最后,总结解决方案的步骤,提供一个清晰的指南,帮助用户逐步排查解决问题,确保他们的后台管理系统在不同窗口尺寸下都能良好显示。</think>在Vue PC端后台管理系统开发中,实现窗口缩放适配需要综合运用以下技术方案(附具体实现示例): 1. **响应式布局基础** ```html <!-- 使用flex弹性布局 --> <div class="container"> <div class="sidebar">侧边栏</div> <div class="main-content">主区域</div> </div> <style> .container { display: flex; min-height: 100vh; } .sidebar { flex: 0 0 200px; /* 固定宽度 */ background: #304156; } .main-content { flex: 1; /* 自动填充剩余空间 */ padding: 20px; } </style> ``` 2. **媒体查询断点设置** ```css /* 在768px以下隐藏侧边栏 */ @media (max-width: 768px) { .sidebar { display: none; } .main-content { padding: 10px; } } /* 超小屏幕处理 */ @media (max-width: 480px) { .el-form-item__label { float: none; /* 表单标签换行显示 */ width: 100% !important; } } ``` 3. **Element UI适配技巧** ```javascript // 在main.js中按需引入组件 import { ElRow, ElCol } from 'element-plus' const app = createApp(App) app.use(ElRow) app.use(ElCol) ``` 模板示例: ```html <el-row :gutter="20"> <el-col :xs="24" :sm="12" :md="8" :lg="6"> <!-- 内容区块 --> </el-col> </el-row> ``` 4. **表格适配方案** ```html <div class="table-wrapper"> <el-table :data="tableData" style="width: 100%" :max-height="tableHeight" > <!-- 表格列配置 --> </el-table> </div> <script> export default { mounted() { this.calcTableHeight() window.addEventListener('resize', this.calcTableHeight) }, methods: { calcTableHeight() { this.tableHeight = window.innerHeight - 200 // 动态计算高度 } } } </script> <style> .table-wrapper { overflow-x: auto; /* 横向滚动 */ min-width: 600px; /* 保证最小宽度 */ } </style> ``` 5. **动态rem适配(推荐)** ```javascript // 在入口文件main.js中添加 function setRem() { const baseSize = 16 // 基准值 const scale = document.documentElement.clientWidth / 1920 // 设计稿宽度 document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px' // 最大缩放2倍 } window.addEventListener('resize', setRem) setRem() ``` 6. **复杂组件适配策略** ```html <el-dialog :visible.sync="dialogVisible" :width="dialogWidth" top="5vh" > <!-- 弹窗内容 --> </el-dialog> <script> export default { computed: { dialogWidth() { return window.innerWidth < 768 ? '90%' : '60%' } } } </script> ``` 7. **实用工具函数** ```javascript // 在utils/dom.js中 export const debounce = (func, wait = 100) => { let timeout return function(...args) { clearTimeout(timeout) timeout = setTimeout(() => { func.apply(this, args) }, wait) } } // 在组件中使用 import { debounce } from '@/utils/dom' mounted() { this.resizeHandler = debounce(this.handleResize, 300) window.addEventListener('resize', this.resizeHandler) } ``` **调试建议:** 1. 使用Chrome开发者工具: - 切换设备模式(Ctrl+Shift+M) - 自定义断点调试 - 开启CSS媒体查询检测 2. 关键检查点: - 容器overflow处理 - 图片最大宽度设置 - 表格横向滚动 - 文本折行策略(word-break) - 固定宽度的元素是否必要 3. 推荐测试分辨率: - 1920×1080(默认) - 1440×900 - 1366×768 - 1280×720 - 移动端横屏(1024px) **常见问题排查:** 1. 布局坍塌: - 检查父容器高度是否设置 - 是否缺少clearfix清除浮动 2. 内容溢出: ```css .text-content { word-break: break-all; overflow-wrap: anywhere; } ``` 3. 第三方组件适配: ```javascript // 配置element-plus的全局尺寸 import { ElConfigProvider } from 'element-plus' <el-config-provider :size="screenWidth < 768 ? 'small' : 'default'"> <!-- 应用内容 --> </el-config-provider> ``` 通过以上方案的系统性实施,可以确保后台管理系统在不同分辨率下保持可用性美观性。建议在开发过程中持续进行响应式测试,并优先采用百分比布局、flex/grid等现代CSS方案。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z_Xshan

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值