移动端自适应

news2024/9/27 21:22:43

1.普通html页面

一般使用px定义,不会进行适配

移动端项目:从不同的终端保持页面的一致性(自适应),使用rem相对单位,rem是相对于根节点html的font-size的值进行动态换算的值

2.普通html页面进行适配

普通页面中:
监听屏幕宽度变化resize方法和首次刷新pageshow时,需要动态设置根节点html的font-size的值
需要调用时根据屏幕变化docEl.clientWidth去设置屏幕的rem的值;
font-size不能以屏幕宽度进行设置font-size/10进行计算

项目中如何通过rem实现自适应:肯定不会自己去换算rem单位,太麻烦了;
使用工具帮助进行换算,vsCode中有换算工具px to rem ,alt+z即可自动进行换算;

使用rem作为单位,但是需要进行换算,rem是相对于页面根节点html标签的font-size的值进行适配的。例如,如果页面根节点html标签的font-size的值为16px,那么1rem = 16px;如果页面根节点html标签的font-size的值为20px,则1rem = 20px,所以使用rem需要进行动态计算

适配方案:只要在窗口大小改变和初始刷新时获取到根节点的宽度/10,作为根节点的fontSize大小,再对元素使用rem作为单位即可实现适配

如下:只要动态设置了窗口大小改变和初始刷新时的fontSize的值,再对元素使用rem作为单位即可实现适配

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            width: 4rem;
            height: 4rem;
            background-color: aquamarine;
        }
    </style>
</head>
<body>
    <div class="box">
        <h6>这是标题</h6>
    </div>
    <script>
        const docEl = document.documentElement;
        console.log(docEl);
        function setRem(){
            // 直接设置为docEl.clientWidth宽度,如果docEl.clientWidth宽度过大计算结果为0.0023这种类似的数字不好显示
            docEl.style.fontSize = docEl.clientWidth / 10 + 'px'
        }
        window.addEventListener('resize',setRem);
        window.addEventListener('pageshow',setRem)
    </script>
</body>
</html>

3.VS code中使用插件px to rem对普通页面进行适配

如果按上诉适配方法,每次做适配都是需要计算的很麻烦,再VS code中使用插件px to rem或者插件

px to rem & rpx & vw (cssrem),页面中正常写px单位,然后使用快捷键alt+z即可自动进行换算

4.vue项目中自适应 ,使用插件amfe-flexible和postcss-pxtorem

实际项目中,vue页面需要进行适配,沟通浏览器页面 16px-》1rem -> 代码16px之间进行换算。
插件:amfe-flexible在页面尺寸发生变化时动态设置项目根节点的值
插件:postcss-pxtorem将页面中px单位换算成rem,需要在项目根节点添加postcss.config.js文件并设置换算规则

module.exports = {
    plugins: [
        require('postcss-pxtorem')({
            // rootValue: 16, //设置为16px
            rootValue: 37.7, //以屏幕375px作为标准
            propList: ['*'],
            exclude: /node_modules/i,
            unitPrecision: 5, //保留rem小数点多少位
            //selectorBlackList: ['.radius'],  //则是一个对css选择器进行过滤的数组,比如你设置为['fs'],那例如fs-xl类名,里面有关px的样式将不被转换,这里也支持正则写法。
            replace: true, //这个真不知到干嘛用的。有知道的告诉我一下
            mediaQuery: false, //媒体查询( @media screen 之类的)中不生效
            minPixelValue: 8, //px小于12的不会被转换
        }),
    ]
}

没有做适配前:

5.问题:less不会自适应

发现上面写法如果使用的是css可以实现自适应,但是如果是less或者sass就不能实现

解决:使用postcss-px-to-viewport,将px单位换成vw

6.less中实现自适应

参考地址:vue移动端适配postcss-px-to-viewport - 简书

npm i postcss-px-to-viewport -D 安装好后,postcss.config.js设置以下即可实现自适应

postcss.config.js:

const path = require('path');
 
module.exports = ({ file }) => {
    //如果读取的是vant相关的文件,viewportWidth就设为375,如果是其他的文件,我们就按照我们UI的宽度来设置viewportWidth,即750。
  const designWidth = file.dirname.includes(path.join('node_modules', 'vant')) ? 375 : 750;
 
  return {
    plugins: {
      autoprefixer: {},
      "postcss-px-to-viewport": {
        unitToConvert: "px",
        viewportWidth: designWidth,
        unitPrecision: 6,
        propList: ["*"],
        viewportUnit: "vw",
        fontViewportUnit: "vw",
        selectorBlackList: [],
        minPixelValue: 1,
        mediaQuery: true,
        exclude: [],
        landscape: false
      }
    }
  }
 
}

postcss-px-to-viewport 的缺点:无法把行内样式中的 px 转换成视口单位(vw, vh, vmin, vmax)

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

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

相关文章

解决方案架构师 vs 技术架构师,有何区别?

Salesforce架构师角色是生态系统中常见的职业目标。架构师因其丰富的Salesforce知识以及在平台上构建可扩展解决方案的能力而广受认可。 解决方案架构师和技术架构师是Salesforce生态系统中最常见的两个架构师角色&#xff0c;这些角色有一些重叠&#xff0c;但它们完全不同&a…

Seata使用详解

分布式事务介绍分布式事务的优缺点CAP理论介绍Base理论介绍CAP和BASE之间有什么区别Seata介绍Seata支持的事务模式介绍Seata的架构Seata应用场景Seata集群部署Seata集群部署的优缺点Seata在Java中的使用案例Seata在Java中的代码示例Seata与SpringBoot2.x的整合Seata与SpringBoo…

winfrom大恒工业相机SDK二次开发、C#联合halcon开发

一、开发环境 1.在大恒图像官网下载SDK安装包&#xff0c;安装SDK后&#xff0c;打开安装目录找到Samples文件夹&#xff0c;然后找到Samples\CSharp SDK\x64\DoNET\.NET4.0文件夹下找到GxIAPINET.dll&#xff0c;如图&#xff1a; 2.打开VS2019软件&#xff0c;建立winfrom项…

Linux系统管理、服务器设置、安全、云数据中心

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 我们来快速了解liunx命令 文章目录 前言解析命令提示符linux的文件和目录文件和目录管理文件操作 进程管理命令系统管理网络管理 书籍推荐 本文以服务器最常用的CentOS为例 解析命令提示…

JDBC简单使用

1. 首先导包&#xff0c;放在src -> lib下 打开项目结构&#xff0c;添加导入的包为库 基础语法 Statement statement conn.createStatement(); ---------------------------------------------- 1.execute(String query)方法用来执行任意的SQL语句查询&#xff0c;如果…

AcrelEMS-HIM高速公路综合能效系统在新晋高速公路快村营至营盘段项目的应用——安科瑞 顾烊宇

摘 要&#xff1a;我国新型工业化、信息化、城镇化和农业现代化加快发展&#xff0c;经济结构加快转型&#xff0c;交通运输总量将保持较快增长态势&#xff0c;各项事业发展要求提高国家公路网的服务能力和水平。高速公路沿线的收费站、互通枢纽、服务区、隧道等配置的供配电、…

2024Java85w字面试宝典+从入门到架构师的学习路线图+Java开发求职手册,我终于做出来了!

这几年中&#xff0c;我遇到了很多不同困境中的Java开发者&#xff0c;让我有了一个思考&#xff0c;在做教育这件事情上&#xff0c;我的目标是什么&#xff1f;为此&#xff0c;我思考了很久。 然后今年有很多的粉丝或者一些学员来找我&#xff0c;说今年的面试很困难&#…

【工作流Activiti】MyActivit的maven项目

1、Idea新建一个项目MyActivit的maven项目 2、安装插件 在 idea 里面&#xff0c;activiti 的插件叫 actiBPM&#xff0c;在插件库里面把它安装好&#xff0c;重启 idea 就行了。 3、 maven 项目中&#xff0c;并更改 pom.xml。pom 中依赖如下&#xff1a; <?xml version…

C#中的协变和逆变

这两个都是只能使用在接口和委托上 个人理解&#xff1a; 协变&#xff1a;出参&#xff0c;让基类使用范围变大&#xff0c;将父类/基类当作子类一样使用 --为什么这样规定呢&#xff1f; 我的理解&#xff1a;真正实现的是子类&#xff0c;子类拥有所有的方法&#xff0c;却…

pytorch网络的增删改

本文介绍对加载的网络的层进行增删改, 以alexnet网络为例进行介绍。 1. 加载网络 import torchvision.models as models alexnet models.alexnet(weightsmodels.AlexNet_Weights.DEFAULT) print(alexnet)2. 删除网络 在做迁移学习的时候&#xff0c;我们通常是在分类网络的…

安全狗waf

安全狗waf安装 1、先将phpstudy 以管理员身份运行&#xff0c;将运行模式修改为 “系统服务”&#xff0c;点击“应用”。 2、下载安全狗&#xff0c;安全狗-领先云安全服务与解决方案提供商|云原生安全|服务器安全|网站安全|态势感知 3、安装安全狗&#xff0c;以管理员身份运…

python调取一欧易API并写一个比特币均线交易策略

比特币均线交易策略是一种基于比特币价格的移动均线的交易策略。它通过计算不同时间段的移动均线来确定买入和卖出点。 具体步骤如下&#xff1a; 确定要使用的均线。常用的均线包括5日、10日、20日、50日和200日均线。较短的均线可以更快地反应价格变动&#xff0c;而较长的均…

探秘 AJAX:让网页变得更智能的异步技术(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

AcWing算法提高课-4.1.2搭配购买

算法提高课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 题目描述 Joe觉得云朵很美&#xff0c;决定去山上的商店买一些云朵。 商店里有 n n n 朵云&#xff0c;云朵被编号为 1 , 2 , … , n 1,2,…,n 1,2,…,n&#xff0c;并且每朵云都有一个价值。 但是商店…

机器学习——主成分分析(PCA)

今天由我来向大家何为PCA算法及如何实现&#xff0c;PCA算法是无监督方法的典型&#xff0c;在此之前我们先来了解有监督学习、无监督学习以及半监督学习的区别。 一、有监督学习、无监督学习、半监督学习的区别 1. 有监督学习 监督学习是从标记的训练数据来推断一个功能的机…

C语言——小细节和小知识5

一、某些预处理指令 #ifdef #else #endif 这三个预处理指令用于条件编译&#xff0c;#ifdef用于判断某个宏是否被定义过&#xff0c;#endif用于结束#ifdef的作用范围&#xff0c;例如&#xff1a; #include <stdio.h>#define MAX 10int main() { #ifdef MAXprintf(&…

基于JAVA的无代码动态表单系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 动态类型模块2.2 动态文件模块2.3 动态字段模块2.4 动态值模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 动态类型表3.2.2 动态文件表3.2.3 动态字段表3.2.4 动态值表 四、系统展示五、核心代码5.1 查询档案类型5.…

OpenHarmony鸿蒙原生应用开发,ArkTS、ArkUI学习踩坑学习笔记,持续更新中。

一、AMD处理器win10系统下&#xff0c;DevEco Studio模拟器启动失败解决办法。 结论&#xff1a;在BIOS里面将Hyper-V打开&#xff0c;DevEco Studio模拟器可以成功启动。 二、ArkTS自定义组件导出、引用实现。 如果在另外的文件中引用组件&#xff0c;需要使用export关键字导…

Educational Codeforces Round 160 (Rated for Div. 2)

Educational Codeforces Round 160 (Rated for Div. 2) Educational Codeforces Round 160 (Rated for Div. 2) A. Rating Increase 题意&#xff1a;给定一个由数字字符组成的字符串&#xff0c;且无前导零&#xff0c;将其分割成ab两部分&#xff0c;b不能有前导零&#x…

制造企业可以通过哪些措施改善设备OEE

设备综合效率OEE&#xff08;Overall Equipment Effectiveness&#xff09;是制造企业衡量设备效率的关键指标之一。高效的设备运行对于提高生产效率、降低成本和实现竞争优势至关重要。然而&#xff0c;实现高水平的设备OEE并不是一项简单的任务。本文将介绍一些制造企业可以采…