vue - 常见的移动端适配方案

news2024/11/18 18:17:16

移动端适配方案

    • rem适配原理
    • 方案1:rem+媒体查询
    • 方案2:js+rem
    • 方案3:vw+rem(不用查询屏幕宽度)

移动端适配经常使用的就是 rem; 主要有以下几种方案:
1rem + 媒体查询(@media)
2js + rem(查询屏幕宽度)
3VW + rem(不需要查询屏幕宽度)
这几种方式最终css写的单位是 rem;

rem适配原理

rem是一个相对单位。
是相对于根元素html的font-size宽度值。大多数浏览器默认字体宽度是16px(如果没有设置过),也就是 1rem = 16px;

如下图所示:
在这里插入图片描述
既然rem相对于根据html的font-size来的,那再不同的屏幕宽度时改变html的字体宽度值,那么rem的值也会相应的改变;这也就是为什么要频繁的改变html下面font-size值的原因;

方案1:rem+媒体查询


计算公式当前屏幕宽度下的html字体值 = 当前屏幕宽度*预设字体值/psd设计稿的宽度(750px)

预设字体值可以随意设,计算方便我通常设置为100;

媒体查询适配模板

以下font-size的字体值是根据预设字体值 100;

common.css

/* 媒体查询适配模板 预设值为 100 	*/
@media screen and (min-width: 320px) {
  html {
    font-size: 42.667px;
  }
}

@media screen and (min-width: 375px) {
  html {
    font-size: 50px;
  }
}

@media screen and (min-width: 414px) {
  html {
    font-size: 55.2px;
  }
}

@media screen and (min-width: 540px) {
  html {
    font-size: 72px;
  }
}

@media screen and (min-width: 750px) {
  html {
    font-size: 100px;
  }
}

使用:如果量得设计图其中一个元素的宽度是235px,那么在css代码中需要写成先除以预设值 再加上rem即可;如下:

.div{
	width:2.35rem; // 235/100=2.35+rem
}

方案2:js+rem


这种方案也是阿里早期开源的一个[移动端适配]解决方案(flexible.js);

原理是需要查询屏幕的宽度,只不过这种需要通过监听屏幕的尺寸变化 ,实时调用clientWidth方法获取屏幕宽度来更改html的字体值;

分析如下:

350:当前屏幕宽度(设备宽度) curScreenWidth
750:psd设计稿宽度  psdWidth
100:预设字体基础值  1rem = 100px  preFontSize
  x: 当前屏幕宽度字体的基础值(html的font-size的值)curFontSize

320      x 
———  =  ———
640     100

x = (320*100)/640  公式如下:

curFontSize=(curScreenWidth*100)/psdWidth

牢记公式当前屏幕宽度下的html字体值 = 当前屏幕宽度*预设字体值/psd设计稿的宽度(750px);

1,开始封装

autoSize.js

// 封装 rem + js 移动端适配方案
export function autoSize() {
  //设计稿的宽度
  var psdWidth = 750;

  //预设字体值
  var preFontSize = 100;

  //当前屏幕宽度
  var curScreenWidth = document.documentElement.clientWidth;
  //当前屏幕对应的html字体值
  var curFontSize = (curScreenWidth * preFontSize) / psdWidth;

  //设备宽度在750px 
  if (curScreenWidth > 750) {
    curScreenWidth = 750;
  }
  //把计算下来的当前屏幕html字体值 赋值给html元素 documentElement属性会获取到html根元素 然后为之设置字体值
  document.documentElement.style.fontSize = curFontSize + "px";
}

2,vue 中使用 (resize方法监听窗口变化,实时计算html下面的font-size值)

App.vue

<template>
  <div id="app">
  </div>
</template>

<script>
import { autoSize } from "@/assets/auto";
export default {
  name: "App",
 // 监听resize事件
  mounted() {
    window.addEventListener("resize", () => {
      autoSize();
    });
  }
};
</script>

这种方法实际写入到css代码中还是:测量宽度/100 + rem;

方案3:vw+rem(不用查询屏幕宽度)


使用视口单位布局 (纯css) 实现动态改变font-size属性值,不需要引用js文件,但需要在meta标签添加viewport 属性;vue项目会自动添加;

Viewport 介绍:

vw:是css3规范中宽度视口单位,将视口宽度平均分成100份;

vh:将视口高度平均分成100份;


<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />

属性说明:
width:控制 viewport 的大小,可以指定的一个值,如 device-width为设备的宽度(单位为缩放为 100% 时的 CSS 的像素)
height:和 width 相对应,指定高度
initial-scale:初始缩放比例,也即是当页面第一次 load 的时候缩放比例
maximum-scale:允许用户缩放到的最大比例  float_value
minimum-scale:允许用户缩放到的最小比例  float_value
user-scalable:用户是否可以手动缩放 no表示不可以  yes为可以

视口布局原理:确定基准值以常见的750像素宽度的设计稿为例,根据vw单位可知:

750px = 100vw ; 1px = 0.133333vw;

100px = 13.33333vw = 1rem;

px和rem关系还是100倍 ; 那么实际写入如到css代码中还是:测量宽度 / 100 + rem;

html {
    font-size:13.33333vw; //100px=1rem = 13.33333vw
}
  • 优点:页面元素随着页面宽度变化
  • 缺点:
    • 兼容性没有rem好 ,得大量计算, 不是很精确
    • 转换后的长度单位不够直观修改维护困难

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/492493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Springboot(二):配置文件读取

1.1引入依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><a…

一目了然凉哥为大家倾力打造的付费专栏

写在前面 大家好&#xff0c;我是几何心凉&#xff0c;欢迎来到我的付费专栏系列&#xff0c;本专栏将深入介绍 Vue 3 和 Vite&#xff0c;以及如何在 TypeScript 的帮助下构建现代化的 Web 应用程序。 Vue 是一个流行的 JavaScript 框架&#xff0c;它允许开发人员构建高性能…

Java之多线程初阶

目录 一.进程和线程 1.什么是进程 2.并发,并行和串行 3.线程和多线程 4.进程和线程的区别(重点) 5.多线程的优点 6.多线程的缺点 二.线程的创建 1.继承Thread类 2.实现Runnable接口重写run()方法 3.通过匿名内部类的方式创建Thread和实现Runnable 4.通过Lambda表达式…

金豺(GJO)优化算法、matlab代码实现以及与PSO、GWO、SO算法比对

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1 算法原理2 算法步骤2.1 初始化种群2.2 搜索猎物(全局搜索)2.3 包围和围捕猎物&#xff08;局部搜索&#xff09;2.4 从全局搜索转向局部搜索 3 算法流程图4 m…

(22)目标检测算法之 yolov8模型导出总结

yolov8模型导出总结 不断更新中… 几种部署情况: onnxxmlengine官网说明:https://github.com/ultralytics/ultralytics/blob/main/docs/modes/export.md导出参数: onnx 参数解析format: 导出的模型形式:onnx xml engine ... imgsz: 设置模型的输入尺寸大小,默认640*640 ke…

记录一次docker镜像迁移过程

1.在母本服务器上查看要复刻的docker镜像。 sv800:build 作为docker镜像源[repository:tag],使用docker save 指令提出docker镜像包rk3588.tar docker save -o rk3588.tar sv800:build 2.在新环境下加载docker镜像包&#xff0c;预先安装docker指令工具 docker load -i rk35…

OCT图像中的多尺度无监督视网膜水肿区域分割

文章目录 Multiscale Unsupervised Retinal Edema Area Segmentation in OCT Images摘要本文方法原始的DCCS无监督图像聚类Pseudo-Mask-Guided Pixel-Wise Segmentation 实验结果 Multiscale Unsupervised Retinal Edema Area Segmentation in OCT Images 摘要 提出了一种新的…

STM32F051K8U6按键中断实例

引言 最近要开始做毕设了&#xff0c;准备用STM32做一个平衡小车&#xff0c;好久没做过STM32的裸机项目了&#xff0c;做几个项目练练手&#xff0c;复习一下。本例程使用STM32CubeMX配套hal库来实现按键中断和串口中断。芯片用的是STM32F051K8U6。 一、按键中断 &#xff0…

iproute2和流量控制(ip和tc工具)---iproute2/ip/tc/qdisc实现Linux下的QoS控制

iproute2是一个软件包&#xff0c;这个软件包包含了多种用于高级路由&#xff0c;隧道和流量控制配置工具软件。 iproute2提供了Linux内核对QoS的实现&#xff0c;你可以在以下网站中找到英文原版的信息osdl.org和lartc.org。这些工具软件中&#xff0c;最重要的当数ip和tc这二…

【Flutter从入门到入坑之五】你真的会使用 Widget 中的 State 吗?

【Flutter从入门到入坑】Flutter 知识体系 【Flutter从入门到入坑之一】Flutter 介绍及安装使用 【Flutter从入门到入坑之二】Dart语言基础概述 【Flutter从入门到入坑之三】Flutter 是如何工作的 【Flutter从入门到入坑之四】构建Flutter界面的基石——Widget State 前沿UI 编…

2023 年 3 月青少年机器人技术等级考试理论综合试卷(一级)

2023 年 3 月青少年机器人技术等级考试理论综合试卷&#xff08;一级&#xff09; 一、单选题(共 30 题&#xff0c;共 60 分) 1.关于使用动滑轮说法正确的是&#xff1f;&#xff08; B&#xff09; A. 是否省力与动滑轮的颜色有关 B.可以改变力的大小 C.不能省力 D.动滑轮的位…

AUTOSAR知识点Com(十三):ComM内容分析

目录 1、概述 1.1、总览 1.2、功能描述 1.3、依赖关系 2、功能SPEC 2.1、PNC 2.2、通道状态机 2.3、时序图解析 3、COMM工具配置 3.1、ComMGeneral 3.2、ComMConfigSet 1、概述 1.1、总览 ComM的全程是Communication Manager 管理通信&#xff0c;是BSW里面的一个组…

关于大模型对未来影响的一点看法

人们总是高估了未来一到两年的变化&#xff0c;低估了未来十年的变革。 ---比尔盖茨 近来OpenAI的GPT技术可以说在全球都带来了巨大的影响&#xff0c;也让大家看到了什么叫大力出奇迹。chatGPT和GPT4的能力给了大家很大的震撼&#xff0c;其流畅自如、逻辑清晰、出众的能力&am…

【vscode远程开发】使用SSH远程连接服务器 「内网穿透」

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

Rosetta从头蛋白抗体设计、结构优化及在药物研发中的应用

Rosetta从头蛋白抗体设计、结构优化及在药物研发中的应用 第一天 内容 主要知识点 从蛋白质折叠到蛋白质设计教学目标&#xff1a;了解本方向内容、理论基础、研究意义。 蛋白质折叠与结构预测简介 主链二面角与二级结构侧链堆积与三级结构蛋白质设计简介 蛋白质设计的分…

shell编程之条件语句__例题

文章目录 (1) 检查用户家目录中的test.sh文件是否存在&#xff0c;并且检查是否有执行权限. [rootclr /opt/mywork]# cat 1.sh #!/bin/bash #检查用户家目录中的 test.sh 文件是否存在&#xff0c;并且检查是否有执行权 cd /roottest -f test.shif [ $? -eq 0 ];thentest -x…

插件、组件、控件,你分得清吗?

最近和小伙伴交流&#xff0c;时常发生插件、组件、控件等概念混淆的情况&#xff0c;因此导致经常会错意。感觉还是很有必要带大家整理清楚的&#xff0c;今天就来跟大家来聊一聊插件、组件、控件的区别。 什么是插件 先按照官方的一些解释来看看插件的概念描述&#xff1f;…

搭建Debug(printf)Viewer调试环境

希望对KEIL开发的小白的有用&#xff0c;KEIL开发如果高效正确调用Printf 打印输出调试信息。 需要添加红色字体代码 #include <stdio.h> #define ITM_Port8(n) (*((volatile unsigned char *)(0xE00000004*n))) #define ITM_Port16(n) (*((volatile unsigned short *)(…

Android类似微信聊天页面教程(Kotlin)五——选择发送图片

前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …

【模拟IC学习笔记】 负反馈系统的稳定性

反馈方程 输出方程 误差方程 环路增益 定义:当输入电压接地、并将环路断开时&#xff0c;所计算的增益就是环路增益 时&#xff08;幅度1&#xff0c;相位-180&#xff09;电路稳定在电源或低状态或在电源和地之间振荡。 分析稳定性时是对环路增益进行分析&#xff0c;通过环…