Vue不同分辨率大小下的屏幕适配

vue 如何PC端不同屏幕大小分辨率自适应 需求:vue自适应屏幕分辨率PC端      如果你做了一个vue的pc端项目,但是需要适应不同的分辨率和屏幕大小,你会发现在1080p*1920下开发的页面,把分辨率切换到1366或者其他的时候,页面会变得非常丑,字体变得超级大,还会换行等等,也许有很多公司都不会做这项业务,因为pc端项目,特别是后台管理,很少做分辨率自适应,但是如果有此需求呢 所以来开干吧,废话不多说,上代码吧!!!!! 1、安装  postcss-px2rem及px2rem 阅读详情

亲测可用

安装

npm i lib-flexible
npm i postcss-px2rem-exclude
utils文件夹下创建rem.js

复制以下全部代码

(function() {
  // flexible.css
  let cssText =
    '' +
    '@charset "utf-8";html{color:#000;background:#fff;overflow-y:scroll;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-overflow-scrolling:touch}html *{outline:0;-webkit-text-size-adjust:none;-webkit-tap-highlight-color:transparent}body,html{font-family:"Microsoft YaHei",sans-serif,Tahoma,Arial}article,aside,blockquote,body,button,code,dd,details,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,input,legend,li,menu,nav,ol,p,pre,section,td,textarea,th,ul{margin:0;padding:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}input,input[type=button],input[type=reset],input[type=submit]{resize:none;border:none;-webkit-appearance:none;border-radius:0}input,select,textarea{font-size:100%}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}abbr,acronym{border:0;font-variant:normal}del{text-decoration:line-through}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:500}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:500}q:after,q:before{content:\'\'}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}a:hover{text-decoration:underline}a,ins{text-decoration:none}a:active,a:hover,a:link,a:visited{background:0 0;-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:transparent;outline:0;text-decoration:none}';
  // cssText end

  let styleEl = document.createElement('style');
  document.getElementsByTagName('head')[0].appendChild(styleEl);
  if (styleEl.styleSheet) {
    if (!styleEl.styleSheet.disabled) {
      styleEl.styleSheet.cssText = cssText;
    }
  } else {
    try {
      styleEl.innerHTML = cssText;
    } catch (e) {
      styleEl.innerText = cssText;
    }
  }
})();

(function(win, lib) {
  let doc = win.document;
  let docEl = doc.documentElement;
  let metaEl = doc.querySelector('meta[name="viewport"]');
  let flexibleEl = doc.querySelector('meta[name="flexible"]');
  let dpr = 0;
  let scale = 0;
  let tid;
  let flexible = lib.flexible || (lib.flexible = {});

  if (metaEl) {
    console.warn('将根据已有的meta标签来设置缩放比例');
    let match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/);
    if (match) {
      scale = parseFloat(match[1]);
      dpr = parseInt(1 / scale);
    }
  } else if (flexibleEl) {
    let content = flexibleEl.getAttribute('content');
    if (content) {
      let initialDpr = content.match(/initial\-dpr=([\d\.]+)/);
      let maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/);
      if (initialDpr) {
        dpr = parseFloat(initialDpr[1]);
        scale = parseFloat((1 / dpr).toFixed(2));
      }
      if (maximumDpr) {
        dpr = parseFloat(maximumDpr[1]);
        scale = parseFloat((1 / dpr).toFixed(2));
      }
    }
  }

  if (!dpr && !scale) {
    let isAndroid = win.navigator.appVersion.match(/android/gi);
    let isIPhone = win.navigator.appVersion.match(/iphone/gi);
    let { devicePixelRatio } = win;
    if (isIPhone) {
      // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案
      if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {
        dpr = 3;
      } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) {
        dpr = 2;
      } else {
        dpr = 1;
      }
    } else {
      // 其他设备下,仍旧使用1倍的方案
      dpr = 1;
    }
    scale = 1 / dpr;
  }

  docEl.setAttribute('data-dpr', dpr);
  if (!metaEl) {
    metaEl = doc.createElement('meta');
    metaEl.setAttribute('name', 'viewport');
    metaEl.setAttribute('content', `initial-scale=${scale}, maximum-scale=${scale}, minimum-scale=${scale}, user-scalable=no`);
    if (docEl.firstElementChild) {
      docEl.firstElementChild.appendChild(metaEl);
    } else {
      let wrap = doc.createElement('div');
      wrap.appendChild(metaEl);
      doc.write(wrap.innerHTML);
    }
  }

  function refreshRem() {
    let { width } = docEl.getBoundingClientRect();
    if (width / dpr > 540) {
      width *= dpr;
    }
    let rem = width / 10;
    docEl.style.fontSize = `${rem}px`;
    flexible.rem = win.rem = rem;
  }

  win.addEventListener(
    'resize',
    () => {
      clearTimeout(tid);
      tid = setTimeout(refreshRem, 300);
    },
    false
  );
  win.addEventListener(
    'pageshow',
    (e) => {
      if (e.persisted) {
        clearTimeout(tid);
        tid = setTimeout(refreshRem, 300);
      }
    },
    false
  );

  if (doc.readyState === 'complete') {
    doc.body.style.fontSize = `${12 * dpr}px`;
  } else {
    doc.addEventListener(
      'DOMContentLoaded',
      (e) => {
        doc.body.style.fontSize = `${12 * dpr}px`;
      },
      false
    );
  }

  refreshRem();

  flexible.dpr = win.dpr = dpr;
  flexible.refreshRem = refreshRem;
  flexible.rem2px = function(d) {
    let val = parseFloat(d) * this.rem;
    if (typeof d === 'string' && d.match(/rem$/)) {
      val += 'px';
    }
    return val;
  };
  flexible.px2rem = function(d) {
    let val = parseFloat(d) / this.rem;
    if (typeof d === 'string' && d.match(/px$/)) {
      val += 'rem';
    }
    return val;
  };
})(window, window.lib || (window.lib = {}));

main.js引入import utils/rem.js

main.js引入import ‘lib-flexible’;

Vuec-li3下package.json添加

前面有个逗号

  ,"postcss": {
    "plugins": {
      "autoprefixer": {},
      "postcss-px2rem-exclude": {
        "remUnit": 192,//设计稿的分辨率/10
        "exclude": "/node_modules|floder_name/i"
      }
    }
  }

注:
对需要控制高度的模块进行高度绑定

  computed: {
    // 最大滚动距离
    scrollTopLength() {
      return document.documentElement.scrollHeight - document.documentElement.clientHeight;
    },
    // 获取可视区域的高度
    clientHeight() {
      return `${document.documentElement.clientHeight}px`;
    },
  },
vue项目PC端如何适配不同分辨率屏幕 本文为优快云博主「楚猴修」的原创文章 原文链接:https://blog.csdn.net/weixin_43607164/article/details/100512220 我只是记录下 防止以后遇到弄丢 配置前言 项目构建:基于vue-cli3构建,使用postcss-px2rem px2rem-loader进行rem适配 实现原理:每次打包,webpack通过使用插件postcss-px2rem,帮我们自动将px单位转换成rem单位 前方有坑:UI框架部分组件使用JavaScript将css作为内联 阅读详情

相关推荐

根据浏览器屏幕大小高度自适应

根据浏览器屏幕大小高度自适应

vue项目PC端随屏幕分辨率与窗口大小自适应(五步完成)

<template> <div class="big"> <div class="box1"></div> <div class="box2"></div> <div class="box3" style="width:1920px;background: skyblue;"&g...

51yunOA 2万+

详解vue2.0 不同屏幕适配及px与rem转换问题

因为项目需要,vue开发项目,必须将已写的以px为单位的部分,转换为rem。要是全部转换,这大量的计算量,哪怕是sublime Text 的cssrem插件,也是一个庞大的工作量。所以,直接使用插件没商量。 第一步:因为rem是根据更元素来计算大小,所以,捕捉到当前屏幕的大小并赋值给html,这是其一 第二步:使用px2rem插件,来捕捉当前项目的所有px,直接计算相对应数值。 这样,以后写界面,就可以直接用px来构建界面,不用自己去计算啦! 1、安装插件(我是安装了淘宝镜像,所以是cnpm,若是没装淘宝镜像,就npm) $ cnpm i postcss-px2rem --save $

vue 自适应屏幕分辨率,在不同分辨率,以及缩放都按照设计稿展示

vue项目自适应1920或者1366的分辨率

qq_39548550的博客 1万+

js实现适配不同的屏幕大小

本文主要介绍了通过js适配不同的屏幕大小的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧

[官方培训]07-UE材质基础 孙丹璐 Epic 笔记

勾选允许自定义深度写入再在模型上勾选然后可以通过Scene Texture节点拿到渲染的自定义深度信息,有了自定义深度信息就可以与当前渲染的像素深度进行对比,自定义深度信息存放的是最靠近我们的深度,如果当前像素离自定义深度比较远我们就不要这个像素。效果如下这种方案的缺点也很明显,因为这样看不到第二层的透明了,如果是两层的半透明的裙摆,这样就看不到第二层的裙摆了。对于半透明排序问题最根本能解决的还是光线追踪,ue5中又加入了OIT(基于像素的排序)。官方透明材质的理解和应用。

Tcohneyn的博客 1562

vue项目在不同分辨率下页面的适配

媒体查询适配页面

qq_41973526的博客 6835

别再到处找包了!Keil5芯片支持包(Pack)最全管理指南:安装、更新、迁移与离线备份

本文详细解析了Keil5芯片支持包(Pack)的全生命周期管理,包括安装、更新、迁移与离线备份的工程化解决方案。针对STM32F10x等常见芯片,提供了高效获取Pack的策略、版本管理技巧及团队协作方案,帮助开发者解决常见的'Device Family Pack missing'等问题,提升嵌入式开发效率。

weixin_28729205的博客 541

vue 适配各种屏幕大小

首先要找到项目中的index.html文件,添加如下代码 <script> (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWid

weixin_50606255的博客 1965

Android 15.0 首次开机默认授予app运行时权限(去掉运行时授权弹窗)

在15.0的系统rom产品定制化开发中,在6.0以后对于权限的申请,都需要动态申请,所以会在系统首次启动后,在app的首次运行时, 会弹出授权窗口,会让用户手动授予app运行时权限,在由于系统产品开发需要要求默认授予app运行时权限,不需要用户默认授予运行时弹窗,所以需要在首次开机默认授予所有app运行时权限

安卓兼职framework和app工程师的博客 1204

【AUTOSAR-RTE】-1-聊一聊RTE(Run-Time Environment)

RTE(Run-Time Environment)是AUTOSAR ECU架构的核心。

「汽车电子助手」的博客 6502

前端vue适配不同的分辨率_前端基础:必须要知道的移动端适配(2)——分辨率...

分辨率像素即一个小方块,它具有特定的位置和颜色。图片、电子屏幕(手机、电脑)就是由无数个具有特定颜色和特定位置的小方块拼接而成。像素可以作为图片或电子屏幕的最小组成单位。下面我们使用sketch打开一张图片:将这些图片放大即可看到这些像素点:通常我们所说的分辨率有两种,屏幕分辨率和图像分辨率。 屏幕分辨率屏幕分辨率指一个屏幕具体由多少个像素点组成。下面是apple的官网上对手机分辨率的描述:iPh...

weixin_39734399的博客 2286

【AI Agent教程】各种Agent开发框架都是如何实现ReAct思想的?深入源码学习一下

驱动大模型有很多种方式,例如纯Prompt方式、思维链方式、ReAct方式等。ReAct 方式是 AI Agent 最常用的实现思路之一,它强调在执行任务时结合推理(Reasoning)和行动(Acting)两个方面,使得Agent能够在复杂和动态的环境中更有效地工作。

同学小张的博客 6396

vue项目页面不同分辨率适配

vue项目页面不同分辨率适配

m0_72586861的博客 2073

如何在 DevOps 管道中实现 AI?

AI与DevOps的融合(AIOps)正在重塑软件开发生命周期。本文系统阐述了AI在DevOps中的五大应用场景:智能监控、自动化测试、安全防护、CI/CD优化和事件管理,并提出了六步实施框架:痛点识别、工具选型、流程集成、智能监控、MLOps和治理合规。通过Netflix、Google等企业的实践案例,验证了AI在提升部署效率(降低40%故障率)、缩短问题解决时间(MTTR减少60%)方面的显著价值,同时指出数据质量、模型偏差等实施挑战。研究表明,战略性地

介绍AWS Azure GCP devops Terraform 等技术 497

大数据与宠物:健康监测数据分析

随着全球宠物市场规模的快速增长(2023年全球宠物产业规模已达3500亿美元),宠物健康管理需求呈现指数级上升。传统宠物医疗依赖定期体检和症状观察,存在滞后性和主观性缺陷。本文聚焦如何通过物联网(IoT)设备采集宠物生理数据(体温、心率、活动量等),利用大数据分析技术构建实时健康监测系统,实现宠物健康状态的动态评估、异常预警和疾病预测。研究范围涵盖数据采集技术、数据预处理方法、机器学习模型构建及实际应用场景落地。背景介绍:明确研究目的、目标读者及核心术语核心概念与联系。

2502_91592937的博客 1068

vue pc端分辨率自适应

vue pc端分辨率自适应

weixin_47226062的博客 816

使用lightGBM进行数据建模及预测

在机器学习领域中,数据建模和预测一直是非常重要的任务。而lightGBM作为一种基于梯度提升算法的高效机器学习框架,被广泛应用于数据建模和预测中。本文将介绍如何使用lightGBM进行数据建模和预测。到此,我们已经成功使用lightGBM对数据进行了建模和预测。使用lightGBM可以快速、高效地完成数据建模和预测任务,是机器学习领域中不可或缺的工具之一。使用lightGBM进行数据建模及预测。

qq_37934722的博客 1016

vue项目PC端如何适配不同分辨率屏幕字体和整体布局适应(一)

主要应用:lib-flexible和postcss-px2rem-exclude 第一部分:项目中全局引入lib-flexible 1.项目全局中安装lib-flexible npm install lib-flexible --save 2、在项目的入口main.js文件中引入lib-flexible import 'lib-flexible' 3. 打开./node_modules/lib-flexible/flexible.js,找到如下片段源码: (1). (2). (3)

m0_49714202的博客 2821

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

用transform的scale放大缩小比例做数据大屏

4、用可视区宽度 window.innerWidth / 1920(这里以1920为例),window.innerHeight / 1080(这里以1080为例),得到缩放比例,7、watch 监听window.innerWidth 、window.innerHeight 可视区宽高变化,然后设置缩放比例his.3、window.innerWidth 、window.innerHeight 获取可视区宽高。1、将class为container元素的宽高设置跟可视区宽高一至,即100vw,100vh。

qq_40057138的博客 1309

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

cocos-js,屏幕适配

一、基础概念五种适配模式: EXACT_FIT:会靠拉伸来填满屏幕,背景图会变形来充满屏幕,因为1024:768=1.3, 480:320=1.5,宽高比不同,图片也就无法等比缩放来填满屏幕,只能变形了。 NO_BORDER:看不到黑边,实际就是宽高等比缩放,但缩放比例取宽比和高比中大的那一个 SHOW_ALL:全部显示,可以理解为保证内容都显示在屏幕之内,实际也是宽高等比缩放,但缩放比例取宽比

WADE 1825

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

vue3大屏自适应

vue3大屏自适应

m0_70953528的博客 1554

electron vue 根据不同的电脑分辨率改窗口大小和让页面适配各种屏幕问题

根据不同的电脑分辨率改窗口大小 在electron里面的一个main.js改段代码 本项目是开发时候按照1920*1080大小做的,fullscreenable是确定窗口是否全屏的,在低于1920*1080的大小,不同分辨率宽高比例不同,为了页面正常显示,小于1920*1080的,给它设置宽高 function createWindow () { let size = requir...

weixin_44088739的博客 2万+

vue适配不同屏幕大小_Cocos creator教程 屏幕适配的3个小妙招

引言cocos creator是什么?Cocos Creator 是触控科技旗下的产品,以内容创作为核心的游戏开发工具,在 Cocos2d-x 基础上实现了彻底脚本化、组件化和数据驱动等特点。屏幕适配是cocos creator面试题中必问的一个题目,今天给大家说说怎么样做屏幕适配。1: 屏幕适配的2个核心的配置 a: 设计分辨率: 美术设计资源时候的分辨率, 也是我们所有资源的参考分辨率,我们就...

weixin_39965673的博客 619

Vue pc端使用第三方包配合rem适配不同分辨率屏幕

pc端一般是不需要适配的,因为现在的显示器分辨率一般都是1920*1080(设计图也是),一般不用管。但是有一种情况你的设计图是1920*1080,开发完了。发现别人设备因为某些原因不是这个分辨率,就要适配需求是:使用不同分辨率设备,注意是高度可能会出现滚动条。只是临时解决方案。

路虽远行则将至,事虽难做则必成。 6922
上一篇: 推荐好用的可做动画控制的js库Gsapjs
下一篇: Vue视频背景自动播放组件
Boriska1996
博客等级 码龄7年 22粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值