移动端适配方案

移动端适配

方案 1:rem + html font-size

方案 2:vw



rem + html font-size

rem 是相对于 html 元素的 font-size 来设置的单位,通过在不同屏幕尺寸下动态修改 html 元素的 font-size 可达到适配效果

在开发中,我们只需要考虑两个问题:

  1. 针对不同的屏幕尺寸设置不同的 html font-size

  2. 将元素尺寸单位转为 rem


动态设置 html font-size


方法一:通过媒体查询设置 html font-size

思路:通过媒体查询根据不同屏幕尺寸设置不同的 html font-size

缺点:① 如果动态改变屏幕尺寸,不能实时更新、 ② 只能针对某个尺寸范围设置 html font-size

@media screen and (min-width: 320px) {html {font-size: 20px;}
}@media screen and (min-width: 375px) {html {font-size: 24px;}
}@media screen and (min-width: 414px) {html {font-size: 28px;}
}@media screen and (min-width: 480px) {html {font-size: 32px;}
}.box {width: 5rem;height: 5rem;background-color: blue;
}

方法二:通过 JS 设置 html font-size

思路:通过监听屏幕尺寸的变化动态修改 html font-size

一般会将 html font-size 设置为屏幕宽度的 1/10,方便计算

function setRemUnit() {const htmlEl = document.documentElement;const htmlFontSize = htmlEl.clientWidth / 10;htmlEl.style.fontSize = htmlFontSize + 'px';
}
setRemUnit();
window.addEventListener('resize', setRemUnit);

px 与 rem 的单位换算

假设原型图中屏幕宽度为 375px,现有一宽度为 100px 的 div。我们想将 100px 转成对应的 rem 值:

  1. 根元素 html 的 font-size = 375px / 10 = 37.5px (37.5px 即为 “基准字体大小”)

  2. 元素的 rem 值 = 100px / 37.5px


手动计算

编写 scss 函数:

$baseFontSize: 37.5px; // 基准字体大小
@function pxToRem($pxValue) {@return $pxValue / $baseFontSize * 1rem;
}

使用 scss 函数编写样式:

.example {font-size: pxToRem(24px); // 将 24px 转换为对应的 rem 值margin: pxToRem(16px) pxToRem(8px); // 将 16px 和 8px 转换为对应的 rem 值
}

工程化自动计算

安装 postcss-pxtorem 依赖包、配置 webpack.config.js 文件:

npm install postcss-pxtorem -D
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const postcssPxToRem = require('postcss-pxtorem');const stylesHandler = MiniCssExtractPlugin.loader;
const postcssLoader = {loader: 'postcss-loader',options: {postcssOptions: {plugins: [postcssPxToRem({rootValue: 37.5, // 基准字体大小, 默认 16propList: ['*'], // 转换的属性, 默认 ['font', 'font-size', 'line-height', 'letter-spacing']}),],},},
};const config = {// ...module: {// ...rules: [// ...{test: /\.css$/i,use: [stylesHandler, 'css-loader', postcssLoader],},],},
};

正常编写样式,px 会自动转换为 rem:

.example {font-size: 24px; /* 将转换为 0.64rem */margin: 16px 8px; /* 将转换为 0.43rem 0.21rem */
}



vw 单位

100vw 相当于整个视口的宽度 innerWidth,1vw 相当于视口宽度的 1%,将 px 转换为 vw 即可完成适配

vw 相对于 rem 的优势:不需要考虑 html font-size 的问题

事实上,rem 作为一种过渡的方案,它利用的也是 vw 的思想


px 与 vw 的单位转换

假设原型图中屏幕宽度为 375px,有一宽度为 100px 的 div。我们需要将 100px 转成对应的 vw 值:

  1. 1vw = 375px / 100 = 3.75px
  2. 元素的 vw 值 = 100px / 3.75px

手动计算

编写 scss 函数:

$baseWidth: 375px; // 设计稿宽度
@function pxToVw($pxValue) {@return $pxValue / $baseWidth * 100vw;
}

使用 scss 函数编写样式:

.example {width: pxToVw(100px); // 将 100px 转换为对应的 vw 值margin: pxToVw(16px) pxToVw(8px); // 将 16px 和 8px 转换为对应的 vw 值
}

工程化自动计算

安装 postcss-px-to-viewport-8-plugin 依赖包、配置 webpack.config.js 文件:

npm install postcss-px-to-viewport-8-plugin -D
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const postcssPxToViewport = require('postcss-px-to-viewport-8-plugin');const stylesHandler = MiniCssExtractPlugin.loader;
const postcssLoader = {loader: 'postcss-loader',options: {postcssOptions: {plugins: [postcssPxToViewport({viewportWidth: 375, // 设计稿宽度, 默认 320}),],},},
};const config = {// ...module: {// ...rules: [// ...{test: /\.css$/i,use: [stylesHandler, 'css-loader', postcssLoader],},],},
};

正常编写样式,px 会自动转换为 vw:

.example {width: 100px; /* 将转换为 26.67vw */margin: 16px 8px; /* 将转换为 4.27vw 2.13vw */
}

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

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

相关文章

IDEA->EasyCode(mapper.xml) 字段无逗号分割问题

IDEA->EasyCode(mapper.xml) 字段无逗号分割问题_easycode allsqlcolumn 没有逗号-CSDN博客 在easycode的设置里找到: 1、Template下的 mapper.xml.vm脚本 2、Global Config下的 mybatisSupport.vm脚本 然后将这两个脚本里的 $velocityHasNext 替换成 …

WebAuthn 无密码身份认证

文章目录 WebAuthn简介工作原理组成部分架构实现注册认证应用场景案例演示 WebAuthn简介 WebAuthn,全称 Web Authentication,是由 FIDO 联盟(Fast IDentity Online Alliance)和 W3C(World Wide Web Consortium&#x…

java技术栈快速复习05_基础运维(linux,git)

Linux知识总览 linux可以简单的理解成和window一样的操作系统。 Linux和Windows区别 Linux是严格区分大小写的;Linux中一切皆是文件;Linux中文件是没有后缀的,但是他有一些约定俗成的后缀;Windows下的软件一般是无法直接运行的Li…

如何安全可控的进行跨区域数据交换,提高数据价值?

跨区域数据交换指的是在不同地理位置或不同网络环境下的数据传输和共享。随着数字化转型的加速,企业及组织越来越依赖于数据的流动来优化业务流程、增强决策制定和推动创新。然而,跨区域数据交换也带来了一系列的挑战和风险,主要包括&#xf…

3款超好用的PDF在线处理神器,学会了职场工作效率翻倍!

😊 作为一名职场小白,我深知处理文档的痛苦。尤其是面对PDF这个"大魔王",经常感到头大! 合同要合并、简历要压缩、论文要转Word改格式…一个个来手动操作,简直要累死。😫 直到我发现了这些PDF在线处理神器!瞬间感觉自己的工作效率嗖嗖提升,整…

websocket集成文档

1.添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>2.添加配置 Configuration public class WebSocketConfig {Beanpublic ServerEndpointExpo…

CSS三个标题及对应内容的tab切换

要实现CSS三个标题及对应内容的tab切换&#xff0c;你可以使用纯HTML和CSS来完成。这里有一个简单的示例&#xff0c;展示了如何创建三个标题及其对应内容的tab切换效果&#xff1a; HTML部分&#xff1a; html <div class"tabs"> <div class"tab&q…

【STM32】F405/407的模块总览图,记录查看

从STM32F405/407数据手册中提取&#xff0c;方便以后查看。主要是什么外设连接在什么总线上&#xff0c;时钟频率是多少。 TIM2、3、4、5、12、13、14在APB1上&#xff0c;最大频率84M TIM1、8、9、10、11在APB2上&#xff0c;最大频率168M

3.9设计模式——Strategy 策略模式(行为型)

意图 定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使他们可以相互替换此模式使得算法可以独立于使用它们的客户而变化 结构 Strategy&#xff08;策略&#xff09;定义所有支持的算法的公共入口。Context使用这个接口来调用某ConcreteStrategy定义的方…

从源头上减少BUG:掌握Java中的label和assert语句!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

【webrtc】MessageHandler 1: 基于线程的消息处理:以10毫秒处理音频为例

基于m98 G:\CDN\rtcCli\m98\src\audio\null_audio_poller.h分发的消息由MessageHandler 类通过其抽象接口OnMessage 实现处理 NullAudioPoller NullAudioPoller 是一个处理audio的消息的分发器 poll 启动:

手写一个uart协议——rs232(未完)

先了解一下关于uart和rs232的基础知识 文章目录 一、RS232的回环测试1.1模块整体架构1.2 rx模块设计1.2.1 波形设计1.2.2代码实现与tb1.2.4 仿真 1.3 tx模块设计1.3.1波形设计 本篇内容&#xff1a; 一、RS232的回环测试 上位机由串口助手通过 rx 线往 FPGA 发 8 比特数据&a…

DS高阶:图论基础知识

一、图的基本概念及相关名词解释 1.1 图的基本概念 图是比线性表和树更为复杂且抽象的结&#xff0c;和以往所学结构不同的是图是一种表示型的结构&#xff0c;也就是说他更关注的是元素与元素之间的关系。下面进入正题。 图是由顶点集合及顶点间的关系组成的一种数据结构&…

MATLAB - 机器人动力学 - 质心(Center of Mass)

系列文章目录 前言 一、用法 com centerOfMass(robot) com centerOfMass(robot,configuration) [com,comJac] centerOfMass(robot,configuration) 二、说明 com centerOfMass(robot) 计算机器人模型在原点构型处相对于基础坐标系的质心位置。com centerOfMass(robot,conf…

链表算法题总结

链表作为一个基础的数据结构&#xff0c;在开发中经常被使用。 链表往往使用如下的数据结构来表示&#xff0c;struct node 表示链表中的一个节点&#xff0c;data 表示节点的数据&#xff1b;next 表示这个节点指向的下一个节点&#xff0c;如果是链表的尾节点&#xff0c;那…

在C++中初始化二维数组的几种不同方法

在 C 中初始化二维数组可以有几种不同的方法&#xff0c;这取决于你想要的数组类型和初始化数据的具体情况。以下是一些常用的初始化方法&#xff1a; 1. 静态初始化 如果你知道数组的大小和初始值&#xff0c;可以直接在声明时初始化。这种方法使用嵌套的大括号 {} 来逐行指…

GPT每日面试题-Typescript中type和interface的区别

充分利用ChatGPT的优势&#xff0c;帮助我们快速准备前端面试。今日问题&#xff1a;typescript中type和interface的区别? Q&#xff1a;如果在前端面试中&#xff0c;被问到typescript的type和interface的区别是什么&#xff0c;怎么回答最好&#xff1f; A&#xff1a;当谈…

关于下载上传的sheetjs

一、背景 需要讲后端返回来的表格数据通过前端设置导出其中某些字段&#xff0c;而且得是xlsx格式的。 那就考虑使用控件SheetJS。如果是几年前&#xff0c;一般来说&#xff0c;保存excel的文件都是后端去处理&#xff0c;处理完成给前端一个接口&#xff0c;前端调用了打开…

『大模型笔记』Meta 宣布推出 Llama 3 的介绍视频

Meta 宣布推出 Llama 3 的介绍视频 文章目录 一. Meta 宣布推出 Llama 3 的介绍视频一、引言二、Llama 模型历史回顾三、Llama 3 模型介绍四、Llama 3 背后的开发思路五、许可证和生态系统六、安全和信任七、其他亮点八、未来计划九、现场演示四. 参考文献一. Meta 宣布推出 Ll…

Centos7+Hadoop3.3.4+KDC1.15+Ranger2.4.0集成

一、集群规划 本次测试采用3台虚拟机&#xff0c;操作系统版本为centos7.6。 kerberos采用默认YUM源安装&#xff0c;版本为&#xff1a;1.15.1-55 Ranger版本为2.4.0 系统用户为ranger:ranger IP地址主机名KDCRanger192.168.121.101node101.cc.localKDC masterRanger Admin…