html5如何利用rem实现自适应布局,使用Rem布局实现自适应

2023-05-16

之前写过一篇移动端适配的文章,很长,内容太多,看得容易凌乱,重新写个通熟易懂版的。

为什么要自适应?

比如,对于一个移动端页面,设计师给的视觉稿画布宽 750,视觉稿中的一个黄色区块的尺寸是 702 x 300,并在画板中居中。我们希望在任何一个设备中的呈现比例都与视觉稿中一样,根据布局视口宽度等比缩放。

2c91d98b2f89e2f5b8dc1b8120c2da64.png

在移动端我们一般会设置布局视口宽度=设备宽度,即内容呈现的区域在设备屏幕内。

但不同设备的宽度不同,因而让布局视口的宽度也不同。比如 iPhone 6 的布局视口宽度为 375, iPhone6 Plus 布局视口的宽度为 414。

对于给定的画布宽 750 的视觉稿,如果在布局视口宽度为 375 的 iPhone 6 设备上呈现,我们可以将视觉稿中元素的像素值除以 2,代码如下:

.box{

width: 351px;

height: 150px;

margin-top: 40px;

background: #F5A623;

}

那么在 iPhone 6 中的呈现如右图,与左图视觉稿布局一致。

3c525ac344af6bfda388499a08e44df5.png

4f08398b030e4d10c1ed617338aa9aa0.png

但同样的代码,在  iPhone 6 Plus 中呈现的就不一样了,两侧间距变大。因为  iPhone 6 Plus 的布局视口比 iPhone 6 要宽,而矩形框的尺寸没有变, 依然是 315 x 150。

5703601c501489ab9e5f851540b17f3e.png

对于给定的画布宽 750 的视觉稿,如果在布局视口宽度为 414 的 iPhone 6 Plus 设备上呈现,我们可以将视觉稿中元素的像素值按比例除以 (750 / 414),即:

.box{

width: 387.5px;

height: 165.6px;

margin-top: 44.2px;

background: #F5A623;

}

页面呈现效果也可以跟视觉稿一样了。

4e622bf32b4bab9aae7c545faef75937.png

为了在不同设备宽度(不同视口宽度)的页面中呈现效果跟视觉稿一样,需要写不同的 CSS 像素值。 我们的诉求是希望能用同样的 CSS 代码在不同宽度的设备上展现效果与视觉稿相同,通俗的说就是按照视觉稿中元素与画布的尺寸比例在不同设备上等比缩放,从而达到在不同设备上自适应的效果。

使用 Rem 布局解决自适应问题

如何用同一份 CSS 代码,使元素尺寸随着布局视口宽度的变化按视觉稿中的比例等比缩放?我们结合 CSS 中相对单位 rem 的特性,rem 单位的像素值是相对于根元素(HTML 元素) 的 font-size 的。例如:HTML 的 font-size 为 100px, 在 CSS 样式中设置某一元素的宽度为 2rem, 那么此元素在页面中的宽度为 200px。

根据元素在视觉稿中的比例等比缩放找到这样一层关系:

视觉稿元素尺寸 / 视觉稿画布宽度

= (rem 值 * HTML 元素的 font-size) / 布局视口宽度

= rem 值 * (HTML 元素的 font-size / 布局视口宽度)

= rem 值 / (布局视口宽度 / HTML 元素的 font-size)

如果:

布局视口宽度 / HTML 元素的 font-size = 定值 N

就可以用同一份 CSS 代码实现在任何设备中自适应。

rem 值 = N * (视觉稿元素尺寸 / 视觉稿画布宽度 )

所以,我们只要确定一个 N 值,再完成两步,即可实现自适应:

第 1 步:动态设置 HTML 元素的 font-size = 布局视口宽度 / N

第 2 步:将视觉稿中导出的元素 CSS 像素值转成 rem 单位: rem 值 = N * (视觉稿元素尺寸 / 视觉稿画布宽度 )

假如您的视觉稿画布宽度是 750,为了便于 rem 值的计算, 您可以选择设置 N = 7.5, 这样只需要将视觉稿中的尺寸值除以 100 就可以得到 rem 单位的 CSS 像素值。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

html5如何利用rem实现自适应布局,使用Rem布局实现自适应 的相关文章

  • Linux学习-84-安装PHP

    17 13 安装PHP PHP xff08 PHP xff1a Hypertext Preprocessor递归缩写 xff09 中文名字是 xff1a 超文本预处理器 xff0c 是一种广泛使用的通用开源脚本语言 xff0c 适合于Web
  • redis学习-33-SpringBoot整合redis

    36 SpringBoot整合redis SpringBoot操作数据 xff1a 使用spring data项目 例如 xff1a jpa jdbc mongodb redis SpringData也是和SpringBoot齐名的项目 x
  • redis学习-34-PHP/Python使用Redis

    37 PHP使用Redis 首先需要熟练掌握 PHP 语言 xff0c 再者是已经安装了 PHP Redis 扩展程序 37 1 安装扩展程序 首先下载 PHP Redis 扩展程序 xff0c 下载的扩展程序要与 Redis 版本相符合
  • redis学习-35-Redis配置项汇总

    40 配置项汇总 对 Redis 的常用配置项和基本命令做简单的总结 xff0c 可以把本章看做简版的速查手册 不过 xff0c 需要注意的是由于 Redis 不同版本的差异 xff0c 配置项会多少存在一些不同 xff0c 但总体的来说
  • 韦东山:机会总是留给有准备的人(转)

    最近电子发烧友 xff08 以下称 39 发烧友 39 xff09 采访了韦东山老师 xff0c 本文是采访原稿 xff0c 展示出来让大家更深入了解韦老师的同时也进一步学习嵌入式Linux经验 机会总是留给有准备的人 发烧友 为什么要学习
  • matplotlib-animation--制作动画--制作各种图形-圆形矩形三角形

    目录 各个图形覆盖的问题 1 xff0c 画矩形并让其动起来 2 xff0c 画一个三角形 xff1a 动起来 xff01 3 xff0c 画一个三角形让其自动顺时针旋转 本教程基于前面的animation基础 xff0c 让各种图形动起来
  • 使用TS开发小程序中遇到的问题

    在使用ts开发小程序的过程中 xff0c 遇到了一些开发工具和关于ts的使用上的一些问题 xff0c 并记录解决方法 1 ts开发过程中类型指定问题 Type 39 number undefined 39 is not assignable
  • RecyclerView 使用总结以及常见问题解决方案

    1 RecycleView设置了数据不显示 本文主要讲一下我个人对于RecycleView的使用的一些思考以及一些常见的问题怎么解决 先来看一下使用RecycleView时常见的问题以及一些需求 这个往往是因为你没有设置LayoutMang
  • AidLearning中如何启动设置VNC和XFCE4

    第一步 xff1a 打开桌面的Service 第二步 xff1a 在Service Lists中选择中 Vncserver on port 5901 xff0c 点击启动 xff0c 点击保存 xff0c 保存服务后下次进入LECE4就会自
  • 自定义类加载器及其双亲委托机制

    自定义类加载器及其双亲委托机制 JAVA自带的类加载器自定义类加载器代码示例 双亲委托机制 JAVA自带的类加载器 JAVA的类加载器分为三种 xff0c 启动类加载器 系统类加载器 扩展类加载器以及系统类加载器 由前到后每一个都是下一个的
  • 无U盘重建Windows引导

    在我们装了Linux 43 Windows双系统又卸载后 xff0c 往往会出现引导错误 这时大多数做法都是用U盘制作PE工具 xff0c 进行重建引导 事实上 xff0c 如果是Windows系统 xff0c 且能进入 xff0c 那么就
  • 生产者-消费者问题(Linux-C版本实现)

    生产者消费者问题 xff08 英语 xff1a Producer consumer problem xff09 xff0c 也称有限缓冲问题 xff08 英语 xff1a Bounded buffer problem xff09 xff0c
  • ubuntu首次SSH使用root账户远程登录

    文章目录 步骤1 安装ssh2 检查ssh是否成功启动3 远程连接 问题 xff1a 可以远程连接普通用户 ningan xff0c 但是却不可以远程连接root用户参考 步骤 1 安装ssh ubuntu 都原生有了ssh客户端 xff0
  • 在ubuntu中安装python3

    https blog csdn net qq 21429153 article details 79188679
  • 2023python自动化抢单茅台

    2023python自动化下单抢茅台 xff08 小白篇 xff09 提前声明 本人实测一周 xff0c 均以失败告终 网络超时 当前人数过多等等原因 人格担保程序没有问题 xff0c 毕竟天底下那有这么好的事 最终结果不是重要的 xff0
  • 解决Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

    在ubuntu上使用vim编辑器时需要安装 xff0c 安装显示错误 xff1a Unable to fetch some archives maybe run apt get update or try with fix missing
  • 大学老师告诉我:20年内程序员会被取代,未来不需要程序员...

    今天收到一个同学的邮件 xff0c 他告诉我 xff0c 他们的大学计算机老师告诉他 xff0c 以后机器人可以自动生成代码 xff0c 估计20年 xff0c 程序员就会被取代 所以他现在感觉很苦恼 xff0c 既然会被淘汰 xff0c
  • android 手机性能测试工具,不服跑个分?安卓手机性能测试工具科普

    原标题 xff1a 不服跑个分 xff1f 安卓手机性能测试工具科普 Android用户们总是热衷于手机性能的测试和比较 xff0c 这当然是作为开放平台的优良传统 xff0c 除了自身的成就感 xff0c 了解自己手机的性能到底如何也具有
  • Android 官方架构组件(二)——LiveData

    上一篇文章讲到了Android架构组件之一Lifecycle xff08 Android 官方架构组件 xff08 一 xff09 Lifecycle xff0c 现在我们再来看看另一个成员LiveData 系列文章 Android 官方架
  • .NET(C#) 通过文字和logo图片生成视频封面

    本文主要介绍 NET C 中 xff0c 使用GDI 43 Graphics 绘图的方法 xff0c 将文字和logo图内容生成视频封面图片的方法 xff0c 以及相关示例代码 原文地址 xff1a NET C 通过文字和logo图片生成视

随机推荐