移动端开发——rem布局

article/2025/9/16 21:52:18

目录

 前言

一、rem布局

二、rem的基础知识

三、媒体查询

1.媒体查询的使用语法

(一)mediatype 媒体类型

(二)关键字 

(三)媒体特性

2.媒体查询和rem组合 

3.引入样式

四、适配方案

1.技术方案1

(一)设计稿常见尺寸宽度

(二)动态设置html标签font-size 大小

 (三)元素大小取值方法

2.技术方案2

总结 


 前言

       在经过之前的flex布局之后,我们发现flex虽然有很多好处,但是存在一些没办法解决的问题:我们的字体没办法跟着网页的布局改变而实现放大缩小的效果。虽然不一定会影响单独开发移动端网页布局的情况,但是如果需要使用响应式的网页开发的时候,只能实现布局的放大缩小,字体还是原本大小的时候,就会严重影响到你的布局效果。因此我们需要学习可以实现根据网页布局来实现自适应的rem布局。


一、rem布局

       什么是rem布局?就是让一些不能等比自适应的元素,达到当设备尺寸发生改变的时候,等比例适配当前设备。我们可以通过使用媒体查询,根据不同设备按比例设置html的字体大小,然后页面元素使用rem做尺寸单位,当html字体大小变化,元素尺寸也会发生变化,从而达到等比例缩放的适配。


二、rem的基础知识

       rem(root em)是一个相对单位,类似于em,em是父元素字体大小。他和em不同的是rem的基准是相对于html元素的字体大小。比如,根元素(html)设置font-size=12px;非根元素设置width:2rem;换成px表示就是24px。在这里,rem有一个优势:父元素文字大小可能不一致,但是整个网页只有一个html,可以很好来控制整个页面的元素大小。因此我们可以使用rem来布局我们的页面,这就是rem布局的方式。例子如下:

/* 根html 为 12px */
html {
   font-size: 12px;
}
/* 此时 div 的字体大小就是 24px */       
div {
    font-size: 2rem;
}


 

三、媒体查询

       媒体查询(media query)是css3新语法,使用@media查询,可以针对不同的媒体类型定义不同的样式。我们可以通过@media来针对不同的屏幕尺寸设置不同的样式,当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。目前针对很多苹果手机、Android手机,平板等设备都用得到多媒体查询。


1.媒体查询的使用语法

语法:
@media mediatype and|not|only (media feature) {
    CSS-Code;
}

语法中的一些关键字需要注意: 

  • 用@media开头 注意@符号
  • mediatype 媒体类型
  • 关键字 and not only
  • media feature

(一)mediatype 媒体类型

       将不同的终端设备划分成不同的类型,称为媒体类型

  • all :用于所有设备
  • print :用于打印机和打印预览
  • scree :用于电脑屏幕,平板电脑,智能手机等

(二)关键字 

       关键字将媒体类型或多个媒体特性连接到一起做为媒体查询的条件

  • and:可以将多个媒体特性链接到一起,相当于“且”的意思
  • not:排除某个媒体类型,相当于”非“的意思,可以省略
  • only: 指定某个特定的媒体类型,可以省略。

(三)媒体特性

       每种媒体类型都具体各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格。我们暂且了解三个,注意它们要加小括号包含

  • width:定义输出设备中页面可见区域的宽度
  • min-width:定义输出设备中页面最小可见区域宽度
  • max-width:定义输出设备中页面最大可见区域宽度 


2.媒体查询和rem组合 

       rem单位是跟着html来走的,有了rem页面元素可以设置不同大小尺寸,媒体查询可以根据不同设备宽度来修改样式,媒体查询+rem就可以实现不同设备宽度,实现页面元素大小的动态变化。比如按照这样设置:

@media screen and (min-width: 320px) {

html { font-size: 21.33333333px; }

}

@media screen and (min-width: 750px) {

html { font-size: 50px; }

}

 这里放上代码和实现的效果:

<style>@media screen and (min-width: 320px) {html {font-size: 32px;}}@media screen and (min-width: 750px) {html {font-size: 75px;}}div {width: 100%;height: 1.333333rem;line-height: 1.333333rem;background-color: aquamarine;font-size: 0.4rem;text-align: center;}
</style><body><div>wap</div>
</body>

效果如下:


3.引入样式

       当样式比较繁多的时候,我们可以针对不同的媒体使用不同stylesheets(样式表)。原理,就是直接在link中判断设备的尺寸,然后引用不同的css文件。
1.语法规范
<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="mystylesheet.css">
2.示例
<link rel="stylesheet" href="styleA.css" media="screen and (min-width: 400px)">

并不常用,所以可以不用刻意去使用,理解这个使用的方法就可以。


四、适配方案

一共有两种方案:

按照设计稿与设备宽度的比例,动态计算并设置 html 根标签的 font-size 大小;(媒体查询)
CSS 中,设计稿元素的宽、高、相对位置等取值,按照同等比例换算为 rem 为单位的值
技术方案1:使用less、媒体查询、rem
技术方案2(推荐):flexble.js、rem


1.技术方案1

让我们来看看技术方案需要注意的三个点:

  1. 设计稿常见尺寸宽度
  2. 动态设置html标签font-size 大小
  3. 元素大小取值方法


(一)设计稿常见尺寸宽度

一般情况下,我们以一套或两套效果图适应大部分的屏幕,放弃极端屏或对其优雅降级,牺牲一些效果,现在基本以750为准。


(二)动态设置html标签font-size 大小

大小设置的时候我们需要注意一下的问题。

  1. 假设设计稿是750px
  2. 假设我们把整个屏幕划分为15等份(划分标准不一可以是20份也可以是10等份)
  3. 每一份作为html字体大小,这里就是50px
  4. 那么在320px设备的时候,字体大小为320/15 就是 21.33px
  5. 用我们页面元素的大小 除以不同的 html 字体大小会发现他们比例还是相同的
  6. 比如我们以 750为标准设计稿
  7. 一个100*100像素的页面元素 在 750屏幕下, 就是 100 / 50 转换为rem 是 2rem * 2 rem 比例是 1比1
  8. 320屏幕下, html 字体大小为 21.33 则 2rem = 42.66px 此时宽和高都是 42.66 但是 宽和高的比例还是 1比1
  9. 但是已经能实现不同屏幕下 页面元素盒子等比例缩放的效果

       简单的说就是,通过把屏幕划分成几个等份,作为html字体的大小,当设备变化的时候,就除去这个份数,得出当前html的字体大小,然后转换为rem单位。

 


 

 (三)元素大小取值方法

       需要注意元素取值的方式:

  • 最后的公式: 页面元素的rem值 = 页面元素值(px)/ (屏幕宽度 / 划分的份数)
  • 屏幕宽度/划分的份数 就是 html font-size 的大小
  • 或者: 页面元素的rem值 = 页面元素值(px)/ html font-size 字体大小

       这个过程可以通过计算得出,也可以通过less去计算实际的rem大小。

 


 

2.技术方案2

       技术方案2需要注意的就是,你需要引入js文件,然后通过在设置里设置cssroot的属性,更改整体页面的字体,然后通过css直接设置每个页面在750px下的大小,然后换算成rem单位。因为实际上还是原本的大小,只是js会通过计算,自动划分为10等分,改变在每个阶段下的字体大小,他会随着页面的变化而变化。

这里附上两个例子的情况来介绍区别:

如果我们需要用技术方案的话,在每个阶段下的大小,都需要手动去设置它们的计算过程,落下的地方就没有办法实现对应的效果:

 

       我们可以看到在第二张图片里面,把上一个的公共样式的less引入到了主要的index.less里面。才实现了这个对应不同的布局,文字字体大小的变化。

这个时候我们再来看使用方案2的less:

       我们可以看到我实际上只使用了一个媒体查询,把字体约束在750px以内,字体大小只会是75px,超出去也只会是75px,不会再随着页面变化而变化。之后只需要打开设置去设置cssroot就可以方便实现这个效果。需要注意的是cssrem插件可以自动转换px为rem,自动计算,在css和less中都是可以使用的。

这里演示一下CSSroot如何设置的:

这里附上一个动图的演示: 


总结 

       一般用的比较多的就是flex布局和rem布局,熟悉使用这两个布局的使用方式,只要这样认真的布局,就可以很好的布局效果,我们也不用局限于只使用其中一个布局方式的方法,我们选择一起使用,实现更加方便的效果。

       这里再补充一个地方:当你用less进行计算的时候,存在两个单位的时候(比如%和px)哪个在前面,就选择用第一个单位,如果只有一个单位就用那个数字的单位。当你需要计算的是px转换为rem的时候,可以把前面的px写成rem,最后得出的结果是rem就可以。

       感谢大家的收看,可以的话给我一个赞或者一键三连。

  


http://chatgpt.dhexx.cn/article/VSD68N7P.shtml

相关文章

Vue 使用 rem布局

Vue 使用 rem布局 1、rem布局需要安装两个插件 npm i lib-flexible -S npm i postcss-pxtorem5.1.1 -D 最新版本postcss-pxtorem需要POSTSS 8&#xff0c;安装老版本可用 lib-flexible: 根据移动端屏幕大小而对应改变html的fontSize postcss-pxtorem&#xff1a; 根据html的fo…

移动端rem布局基本介绍及原理

rem布局 em和rem的认识 在布局中&#xff0c;除了px之外&#xff0c;还有两个常见的单位&#xff0c;em和rem em&#xff1a; 相对于当前元素的字体大小→ 1em 当前标签的font-size rem&#xff1a; 相对于根元素&#xff08;html&#xff09;的字体大小→ 1rem html标签的…

JavaScript-rem布局

JavaScript-rem布局 一、什么是Rem rem和em很容易混淆&#xff0c;其实两个都是css的单位&#xff0c;并且也都是相对单位&#xff0c;现有的em&#xff0c;css3才引入的rem&#xff0c;在介绍rem之前&#xff0c;我们先来了解下em: em作为font-size的单位时&#xff0c;其代…

Rem布局的原理解析

Rem布局的原理解析 tobAlier关注 22017.10.25 11:27:32字数 2,630阅读 12,367 什么是Rem rem和em很容易混淆&#xff0c;其实两个都是css的单位&#xff0c;并且也都是相对单位&#xff0c;现有的em&#xff0c;css3才引入的rem&#xff0c;在介绍rem之前&#xff0c;我们先…

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

之前写过一篇移动端适配的文章,很长,内容太多,看得容易凌乱,重新写个通熟易懂版的。 为什么要自适应? 比如,对于一个移动端页面,设计师给的视觉稿画布宽 750,视觉稿中的一个黄色区块的尺寸是 702 x 300,并在画板中居中。我们希望在任何一个设备中的呈现比例都与视觉稿…

Rem布局

Rem布局?什么东西???Rem布局又称等比缩放布局,是移动端布局中常用的一种布局方式。Rem布局可以通过两种方式实现,一种通过JavaScript实现;还有一种通过vw实现。在这里小编主要讲述第二种方式。 下面小编先简单的说一下rem布局的优缺点: 优点:在不同的设备下看起来比较…

(精中求精) rem适配布局

1.适配导读&#xff1a; 什么是适配布局&#xff1f;与flex或者流式布局又有什么区别&#xff1f; 所谓的适配布局&#xff0c;是让页面盒子的高度&#xff0c;宽度&#xff0c;内外边距&#xff0c;边框大小&#xff0c;文字的大小&#xff0c;定位的元素位置等能够根据屏幕…

移动端布局(三) rem布局及原理

什么是rem 首先来了解一下什么是em: 作为font-size的单位时,其代表父元素的字体大小,em作为其他属性单位时,代表自身字体大小。 s1、s2、s5、s6的font-size和line-height分别是多少px? <div class"p1"><div class"s1">1</div><di…

安装Mysql

设置密码 检测安装是否成功 切换到安装目录的bin下C:\Program Files\MySQL\MySQL Server 8.0\bin&#xff0c;按住shift&#xff0c;单击鼠标右键&#xff0c;点选在此处代开命令窗口 在命令行中输入mysql -u root -p,之后输入之前设定的密码如果出现如下图所示&#xff0c;…

ODBC + WIN32 API 访问MYSQL 数据库实现简单QQ用户注册和登录

//在IT行业&#xff0c;不懂数据库是不行的&#xff0c;我自己在学校里还没有学过数据库有关的知识&#xff0c;不过由于前些日子写项目的要求&#xff0c;不得不去琢磨&#xff0c;虽然有很多数据库类别&#xff0c;包括微软的 SQL server &#xff0c;access,ORACLE公司的ORA…

QQ交谈、QQ在线状态代码生成…

原文地址&#xff1a;QQ交谈、QQ在线状态代码生成&#xff0c;非QQ商家可以正常生成 作者&#xff1a;HHeOnline 非QQ商家用户&#xff0c;直接在QQ互联可以生成QQ在线状态&#xff0c;也就是QQ交谈的代码。 直接放到对应的代码里就可以正常使用了。 QQ代码生成地址&#xff1a…

qq群关系数据库 mysql_QQ群关系数据库24.52G mdf源文件下载 附上使用教程

HQY 腾讯 7000W QQ群关系数据库泄漏共24.52G。 QQ24.5gb腾讯QQ群关系数据库,不包含密码。只包含个人名字(群备注名字等信息)。 如果想在线查询更多qq群数据信息可以查看: 一、下载完24.5gQQ数据库后,解压文件 下载后不要把文件改名,打开7z,点击其中一个文件,选择合并文件…

MySQL 数据类型

数值类型 MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC)&#xff0c;以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。 关键字INT是INTEGER的同义词&#xff0c;关键字DEC是DECIMAL的同义词。 BIT数据类型保存…

mysql数据库的基本管理

一、数据库的介绍 1.数据库就是个高级的表格软件 2.常见数据库 Mysql Oracle mongodb db2 sqlite sqlserver .......3.Mysql (SUN -----> Oracle)4.mariadb 是数据库服务器 数据库中的常用名词 字段 :表格中的表头 表 :表格 库 :存放表格的目录…

mysql数据库

文章目录 一、Windows1.1 修改mysql的data文件夹存放位置&#xff1a;1.2 修改mysql密码1.3 设置Mysql允许其他电脑访问1.4 重新手动安装 二、mysql 时间查询三.解锁四.Linux4.1 下载安装4.2 配置4.3 卸载 三、Bug 一、Windows 1.1 修改mysql的data文件夹存放位置&#xff1a;…

MySQL使用与练习01

MySQL数据库概述 用来存储数据和管理数据,最终形成类似于表格的样子,有行有列(字段) 分类: 关系型数据库 和 非关系型数据库 关系型数据库&#xff0c; Oracle、MySQL、SQLServer、Access非关系型数据库&#xff0c; MongoDB、Redis、Solr、ElasticSearch、Hive、HBase 数据…

MySQL项目3总结创建与维护

登录MySQL mysql -u root -p密码 查看所有数据库 show databases; 创建数据库 CREATE DATABASE 数据库名; 修改数据库默认字符集 alter database 数据库名default character set 新字符集; 查看hao数据库创建信息&#xff1b; show create database 表名\g; 删除数据库 …

关于mysql的表情包_mysql表情包 - mysql微信表情包 - mysqlQQ表情包 - 发表情 fabiaoqing.com...

MySQ从删库到跑路_删库_MySQ表情 TFBOYS 三人击掌 - TFBOYS 三人有着独特的击掌方式_tfboys_明星表情_tfboys_明星表情表情 走,带你试衣服去(UNIQLO)_uniqlo_衣服表情 内裤不试完,谁都别想走!(UNIQLO)_不试_uniqlo_内裤表情 qqloveddme_qqloveddme表情 QQLOVE DDME(qq爱)_qq…

二叉树的最大深度

题目 思路 二叉树大多用递归来实现&#xff0c;本题如果知道左子树的深度和右子树的深度&#xff0c;那么整个二叉树的深度就为max&#xff08;左子树&#xff0c;右子树&#xff09; 1&#xff1b;该方法也叫做深度优先搜索 代码 package hot_100;public class MaxDepth {…

c语言二叉树结点 深度,求二叉树的深度、总结点数和叶子结点数

二叉树的二叉链表的存储结构: typedef char TElemType; typedef struct BiTNode {TElemType data;//数据元素 BiTNode * lchild;//指向左孩子 BiTNode * rchild;//指向右孩子 }BiTNode,* BiTree; 一、二叉树的深度 如果二叉树为空,结点的深度为0; 如果二叉树只…