前端自适应布局

2023-11-06

在前端开发中,我们不可避免要面临适配问题。本文将介绍几种适配方式:

一、px和em

1.1 px

1.2 em 

二、rem

2.1 rem原理

2.2 rem如何计算的

2.3 rem使用

三、使用插件px2rem转换

3.1 原理和优点

3.2 使用方式


一、px和em

px、em、rem都是计量单位,都能表示尺寸。

1.1 px

px表示的是绝对尺寸,是一个固定大小的单元。像素的计算是针对设备屏幕的,1px就是设备屏幕上的一个点。

由于它是固定大小的单位,一般用它来设计网页,但如果用来在手机/ipad上的话,在不同的屏幕上显示无法做到自适应的效果。

 

1.2 em 

em表示的是相对长度单位,它是通过设置文本字体尺寸来实现自适应,它是相对于当前对象内文本的字体尺寸。通常浏览器默认1em=16px,通过设置font-size大小来修改,如:16px*0.625=10px, 则1em=10px。

但em的值会根据父元素的变化而变化,若是修改了一个父元素的尺寸,其子元素的尺寸都要重新修改。

 

二、rem

2.1 rem原理

rem是css3新增的一个相对长度单位,解决了em变量依赖父元素尺寸的弊端,而rem只相对于根目录,即html标签。我们只要在html标签上设置font-size大小,文档中的字体大小都会以此为标准,通常使用rem来做自适应布局。

 

2.2 rem如何计算的

rem是将设备屏幕宽度按比例划分的,将屏幕分为均等的100份,则在<html>中设置font-size值为 1rem = 设备宽度/100,之后的元素尺寸设定我们都应使用rem进行设定。当设备宽度改变时,1rem对应的像素就自动修改了。

常见的设备尺寸:
320px => iphone5/se
360px => 安卓手机
375px => iphone6/7/8 iphoneX
414px => iphone6/7/8 plus

// 设备尺寸为320px时
1rem = 320/100 = 3.2px

// 设备尺寸为360px时
1rem = 360/100 = 3.6px

// 设备尺寸为375px时
1rem = 375/100 = 3.75px

// 设备尺寸为414px时
1rem = 414/100 = 4.14px

 

2.3 rem使用

2.3.1 使用枚举类型进行自适应

// 自适应 
// ------------------------
html{
  font-size: 38px;
}
@media only screen and (min-width: 320px) {
  html {
    font-size: 42.666px !important;
  }
}
@media only screen and (min-width: 360px) {
  html {
    font-size: 48px !important;
  }
}
@media only screen and (min-width: 375px) {
  html {
    font-size: 50px !important;
  }
}
@media only screen and (min-width: 414px) {
  html {
    font-size: 55.2px !important;
  }
}
@media only screen and (min-width: 480px) {
  html {
    font-size: 64px !important;
  }
}
@media only screen and (min-width: 560px) {
  html {
    font-size: 74.666px !important;
  }
}
@media only screen and (min-width: 640px) {
  html {
    font-size: 85.333px !important;
  }
}
@media only screen and (min-width: 720px) {
  html {
    font-size: 96px !important;
  }
}
@media only screen and (min-width: 750px) {
  html {
    font-size: 100px !important;
  }
}
@media only screen and (min-width: 800px) {
  html {
    font-size: 106.666px !important;
  }
}
@media only screen and (min-width: 960px) {
  html {
    font-size: 128px !important;
  }
}

 

2.3.2 使用 rem.js 来计算rem

在项目中加入rem.js,并引入就可以使用

/* rem.js文件内容 */
(function () {
    var html = document.documentElement;

    function onWindowResize() {
        html.style.fontSize = html.getBoundingClientRect().width / 20 + 'px';
    }

    window.addEventListener('resize', onWindowResize);
    onWindowResize();
})();

 

三、使用插件px2rem转换

3.1 原理和优点

使用px2rem插件,可以无需再引入rem项目,插件会自动根据手机型号计算 dpr 的值,同时在html根标签内植入一个相应的font-size的值。

优点如下:

  • 保证不同设备下的统一视觉体验。
  • 不需要你再手动设置 viewport,根据当前环境计算出最适合的 viewport。
  • 支持任意尺寸的设计图,不局限于特定尺寸的设计图。
  • 支持单一项目,多种设计图尺寸,专为解决大型,长周期项目。
  • 提供 px2rem 转换方法,CSS 布局,零成本转换,原始值不丢失。
  • 有效解决移动端真实 1 像素问题。

 

3.2 使用方式

3.2.1 安装

npm i px2rem-loader -D

3.2.2 在配置中加入这个插件

可以在webpack中加入配置

plugins:[
  new webpack.LoaderOptionsPlugin({
    vue: {
      postcss: [require('postcss-px2rem')({'remUnit': 100,'remPrecision':8})]
    },
  })
]

一般postcss建议单独配置在文件postcss.config.js

module.exports = {
  plugins: [
    require('autoprefixer')({ browsers: 'last 2 versions' }),
    require('postcss-px2rem')({remUnit: 100, remPrecision:8})
  ]
}

 

参考链接:

移动端h5之rem布局/px2rem: https://www.jianshu.com/p/e96ccb603a50

px2rem 移动端自适应方案:https://www.jianshu.com/p/64a6cafb1d5a

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端自适应布局 的相关文章

  • Bladed V4.3安装(PoJie)流程

    开机 不要打开其他应用软件 关闭杀毒软件 360等 01 解压安装包 得到以下文件 02 右键管理员权限运行 exe安装包 03 点击next 04 安装路径默认C盘 点击next 05 只勾选第一个Bladed 其他的不要选 点击next
  • Android 帧动画OOM问题优化

    转载请注明出处 谢谢 普通实现 实现一个帧动画 最先想到的就是用animation list将全部图片按顺序放入 并设置时间间隔和播放模式 然后将该drawable设置给ImageView或Progressbar就OK了 首先创建帧动画资源
  • linux tcp传文件断点续传,文件传输(断点续传)

    文件传输 断点续传 经验总结 以后传输文件 就用先打包在传输的方式 而不要传输文件夹的方式 一定要用二进制方式进行文件的传输 尤其是压缩文件和目录 重点总结 使用mirror同步文件是没有问题的 但是传输完成一定要检查文件大小是否相同 使用

随机推荐

  • Qt版本的冷知识

    Qt4 8 7是Qt4的终结版本 是Qt4系列版本中最稳定最经典的 很多嵌入式板子还是用Qt4 8 其实该版本是和Qt5 5差不多时间发布的 参考链接 https www qt io blog 2015 05 26 qt 4 8 7 rel
  • 如何创造超级大脑?思维导图工具TheBrain使用技巧干货来啦!

    TheBrain让你创建一个简单的 动态的图形地图 在其中输入和导航你所有的信息 从一个想法开始 其他几个想法可以在视觉上联系起来 这些想法与其他想法有自己的联系 也可能彼此联系 TheBrain在使用上市非常简单且方便的 但如何利用它庞大
  • [Leetcode] 373. 查找和最小的 K 对数字

    373 查找和最小的 K 对数字 给定两个以 升序排列 的整数数组 nums1 和 nums2 以及一个整数 k 定义一对值 u v 其中第一个元素来自 nums1 第二个元素来自 nums2 请找到和最小的 k 个数对 u1 v1 u2
  • 保持websocket长时间连接永不断开

    1 定期发送心跳包 ping pong 客户端和服务器端都需要定期发送ping消息 并相应得到pong消息 以确保连接仍然正常 如果超过一定时间没收到pong 需要主动关闭连接 JS客户端代码 定期发送ping setInterval gt
  • python的安装及环境配置

    1 python解释器的安装 进入官网 https www python org 然后点击All releases查看所有版本再点击自己需要的版本 这里选择的是3 11 4版本 然后向下翻找到3 11 4 是 64 bit 位的下载即可 安
  • iconfont unicode使用步骤

    第一步 拷贝项目下面生成的 font face font face font family iconfont src url xxxxxxxxxxxxxx format xxxx 第二步 定义使用 iconfont 的样式 iconfont
  • python sys.argv[]用法

    sys argv 是用来获取命令行参数的 sys argv 0 表示代码本身文件路径 所以参数从1开始 以下两个例子说明 1 使用sys argv 的一简单实例 以下是sample1 py文件 import sys os print sys
  • Android C2DM----客户端

    一 基础知识 在前一部分中 我们从整体上快速介绍并实现了下Android C2DM的Push功能 在接下来的部分里 我们先来回顾一下C2DM相关的整体上的知识 然后具体介绍说明实现的过程 在前面的C2DM框架说明中 我们已经知道 要实现An
  • 认识设计组件帮助测试,以提高产品用户体验

    一 控制元素 1 活动指示器 应与背景想协调 用于持续时间不明的进程 单一元素不显示 大于1个显示 2 加载控件 同一个专区页面 加载样式统一 3 页码控制器 原点最好控制在5点内 左右滑动 点击原点可切换 4 刷新控件 下拉刷新 反馈内容
  • ftp上传文件到华为云服务器,如何上传ftp文件到云服务器

    如何上传ftp文件到云服务器 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 华为云帮助中心 为用户提供产品简介 价格说明
  • Word中关闭EndNote自动更新格式

    问题 我们在用Endnote和Word协作撰写论文时 有时需要在Word中修改一些细小的参考文献格式 但是可能存在刚修改完 EndNote就自动检测到修改 并更新设置 回到了修改前的样子 解决方案 我们只需要在Word中将EndNote插件
  • Inno Setup入门(二十一)——Inno Setup类参考(7)

    复选框 复选框 CheckBox 用于多个并不互斥的几个选项中作出一个或者多选择 例如字体可以有粗体 斜体和下划线 这三种状态可以任意组合 像这样的选项可以采用复选框实现 Pascal脚本中对应的类是TcheckBox 其定义如下 lt x
  • char*转LPCWSTR的两种方法

    char 转LPCWSTR的两种方法 MultiByteToWideChar mbstowcs MultiByteToWideChar 将char 类型转换为LPCWSTR类型可以使用MultiByteToWideChar函数 这个函数可以
  • min_sample_split 和min_sample_leaf区别

    所以基本上 min sample split是分割所需的最小样本数 例如 如果min sample split 6并且节点中有4个样本 则不会发生拆分 不管熵是多少 在 另一方面 min sample leaf基本上是叶节点所需的最小样本数
  • 【经典买点】MACD指标的八种买入形态图解

    MACD指标中的DIF和MACD DIF和DEA两线 按照其金叉时在零轴上 下的位置 和金叉前是否发生过死叉 死叉发生的位置 有八种形态图形 它们分别是 佛手向上 小鸭出水 漫步青云 天鹅展翅 空中缆绳 空中缆车 海底电缆和海底捞月 本文转
  • Linux之你容易忽略的计算机组成知识

    来自鸟哥的私房菜 1 南北桥 整个主板上面最重要的就是芯片组了 而芯片组通常又分为两个网桥来控制各组件的沟通 分别是 1 北桥 负责链接速度较快的 CPU 主存储器不显示适配器等组件 2 南桥 负责连接速度较慢的周边接口 包括硬盘 USB
  • 7-52 两个有序链表序列的交集 (20 分)(思路加详解尾插法)come Boby!

    一 题目 已知两个非降序链表序列S1与S2 设计函数构造出S1与S2的交集新链表S3 输入格式 输入分两行 分别在每行给出由若干个正整数构成的非降序序列 用 1表示序列的结尾 1不属于这个序列 数字用空格间隔 输出格式 在一行中输出两个输入
  • 浅谈5G 与4G的区别

    5G 顺势而生 应用广泛 包含诸多的进步 但未来依然可期 期望6G 7G 8G等等 前提 了解5G 技术 有必要了解一下 1G 2G 2 5G 3G 4G技术 1G 到4G之间的技术我们称之为蜂窝移动网路系统 正所谓长江后浪推前浪 一代更比
  • sql-labs 29 waf 绕过参数污染

    HTTP参数污染 HTTP Parameter Pollution 攻击者通过在HTTP请求中插入特定的参数来发起攻击 如果Web应用中存在这样的漏洞 可以被攻击者利用来进行客户端或者服务器端的攻击 waf服务器 tomcat 只解析重复参
  • 前端自适应布局

    在前端开发中 我们不可避免要面临适配问题 本文将介绍几种适配方式 一 px和em 1 1 px 1 2 em 二 rem 2 1 rem原理 2 2 rem如何计算的 2 3 rem使用 三 使用插件px2rem转换 3 1 原理和优点 3