移动WEB开发之rem适配布局

一、rem 基础

rem 单位
rem (root em)是一个相对单位,类似于em,em是父元素字体大小。不同的是rem的基准是相对于html元素的字体大小。比如,根元素(html)设置font-size=12px; 非根元素设置width:2rem; 则换成px表示就是24px。
rem的优势:父元素文字大小可能不一致, 但是整个页面只有一个html,可以很好来控制整个页面的元素大小。

二、 媒体查询

2.1 什么是媒体查询

媒体查询(Media Query)是CSS3新语法。

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

2.2 语法规范

(1)用 @media 开头 注意@符号
(2)mediatype 媒体类型
(3)关键字 and not only
(4)media feature 媒体特性 必须有小括号包含
1. mediatype 查询类型
将不同的终端设备划分成不同的类型,称为媒体类型。
2. 关键字
关键字将媒体类型或多个媒体特性连接到一起做为媒体查询的条件。
and:可以将多个媒体特性连接到一起,相当于“且”的意思。
not:排除某个媒体类型,相当于“非”的意思,可以省略。
only:指定某个特定的媒体类型,可以省略。
3. 媒体特性
每种媒体类型都具体各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格。我们暂且了解三个。注意他们要加小括号包含。
注意: 为了防止混乱,媒体查询我们要按照从小到大或者从大到小的顺序来写,但是我们最喜欢的还是从小到大来写,这样代码更简洁。
2.3 媒体查询+rem实现元素动态大小变化
rem单位是跟着html来走的,有了rem页面元素可以设置不同大小尺寸,媒体查询可以根据不同设备宽度来修改样式,媒体查询+rem 就可以实现不同设备宽度,实现页面元素大小的动态变化。
2.4 引入资源(理解)
当样式比较繁多的时候,我们可以针对不同的媒体使用不同 stylesheets(样式表)。原理,就是直接在link中判断设备的尺寸,然后引用不同的css文件。
1. 语法规范
2. 示例

三、Less 基础

3.1 维护 css 的弊端

CSS 是一门非程序式语言,没有变量、函数、SCOPE(作用域)等概念。
CSS 需要书写大量看似没有逻辑的代码,CSS 冗余度是比较高的。
不方便维护及扩展,不利于复用。
CSS 没有很好的计算能力
非前端开发工程师来讲,往往会因为缺少 CSS 编写经验而很难写出组织良好且易于维护的 CSS 代码项目。

3.2 Less 介绍

Less (Leaner Style Sheets 的缩写) 是一门 CSS 扩展语言,也成为CSS预处理器。做为 CSS 的一种形式的扩展,它并没有减少 CSS 的功能,而是在现有的 CSS 语法上,为CSS加入程序式语言的特性。
它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,Less 可以让我们用更少的代码做更多的事情。
Less中文网址: http://lesscss.cn/
常见的CSS预处理器:Sass、Less、Stylus
一句话:Less 是一门 CSS 预处理语言,它扩展了CSS的动态特性。

3.3 Less 安装(注意如果使用vscode无需安装less)

① 安装nodejs,可选择版本(8.0),网址:http://nodejs.cn/download/
② 检查是否安装成功,使用cmd命令(win10 是 window +r 打开 运行输入cmd) --- 输入“ node –v ”查看版本即可
③ 基于nodejs在线安装Less,使用cmd命令“ npm install -g less ”即可
④ 检查是否安装成功,使用cmd命令“ lessc -v ”查看版本即可
Less 使用:我们首先新建一个后缀名为less的文件, 在这个less文件里面书写less语句。
Less 变量、Less 编译 、Less 嵌套 、Less 运算。

3.4 Less 变量

变量是指没有固定的值,可以改变的。因为我们CSS中的一些颜色和数值等经常使用。
1. 变量命名规范
(1)必须有@为前缀
(2)不能包含特殊字符
(3)不能以数字开头
(4)大小写敏感
2. 变量使用规范

3.5 Less 编译

本质上,Less 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。所以,我们需要把我们的 less文件,编译生成为css文件,这样我们的html页面才能使用。
vocode Less 插件
Easy LESS 插件用来把less文件编译为css文件,安装完毕插件,重新加载下 vscode。只要保存一下Less文件,会自动生成CSS文件。

3.6 Less 嵌套

我们经常用到选择器的嵌套
Less 嵌套写法
如果遇见 (交集|伪类|伪元素选择器)
(1)内层选择器的前面没有 & 符号,则它被解析为父选择器的后代;
(2)如果有 & 符号,它就被解析为父元素自身或父元素的伪类。
Less 嵌套写法

3.7 Less 运算

任何数字、颜色或者变量都可以参与运算。就是Less提供了加(+)、减(-)、乘(*)、除(/)算术运算。
注意:
(1)乘号(*)和除号(/)的写法
(2)运算符中间左右有个空格隔开 1px + 5
(3)对于两个不同的单位的值之间的运算,运算结果的值取第一个值的单位
(4)如果两个值之间只有一个值有单位,则运算结果就取该单位

四、rem 适配方案

1. 让一些不能等比自适应的元素,达到当设备尺寸发生改变的时候,等比例适配当前设备。
2. 使用媒体查询根据不同设备按比例设置html的字体大小,然后页面元素使用rem做尺寸单位,当html字体大小变化元素尺寸也会发生变化,从而达到等比缩放的适配。

4.1 rem 实际开发适配方案

① 按照设计稿与设备宽度的比例,动态计算并设置 html 根标签的 font-size 大小;(媒体查询)
② CSS 中,设计稿元素的宽、高、相对位置等取值,按照同等比例换算为 rem 为单位的值;

4.2 rem 适配方案技术使用(市场主流)

技术方案1
less、媒体查询、rem
技术方案2(推荐)
flexible.js、rem。
总结:
1. 两种方案现在都存在。
2. 方案2 更简单。

4.3 rem 实际开发适配方案1

rem + 媒体查询 + less 技术

1. 设计稿常见尺寸宽度

一般情况下,我们以一套或两套效果图适应大部分的屏幕,放弃极端屏或对其优雅降级,牺牲一些效果现在基本以750为准。
2. 动态设置 html 标签 font-size 大小
① 假设设计稿是750px
② 假设我们把整个屏幕划分为15等份(划分标准不一可以是20份也可以是10等份)
③ 每一份作为html字体大小,这里就是50px
④ 那么在320px设备的时候,字体大小为320/15 就是 21.33px
⑤ 用我们页面元素的大小 除以不同的 html 字体大小会发现他们比例还是相同的
⑥ 比如我们以 750为标准设计稿
⑦ 一个100*100像素的页面元素 在 750屏幕下, 就是 100 / 50 转换为rem 是 2rem * 2 rem 比例是 1比1
⑧ 320屏幕下, html 字体大小为 21.33 则 2rem = 42.66px 此时宽和高都是 42.66 但是 宽和高的比例还是 1比1
⑨ 但是已经能实现不同屏幕下 页面元素盒子等比例缩放的效果
3. 元素大小取值方法
① 最后的公式: 页面元素的rem值 = 页面元素值(px) / (屏幕宽度 / 划分的份数)
② 屏幕宽度/划分的份数 就是 html font-size 的大小
③ 或者: 页面元素的rem值 = 页面元素值(px) / html font-size 字体大小

4.4 rem 实际开发适配方案2

4.4.1 简洁高效的rem适配方案flexible.js

手机淘宝团队出的简洁高效 移动端适配库,我们再也不需要在写不同屏幕的媒体查询,因为里面js做了处理,它的原理是把当前设备划分为10等份,但是不同设备下,比例还是一致的。我们要做的,就是确定好我们当前设备的html 文字大小就可以了,比如当前设计稿是 750px, 那么我们只需要把 html 文字大小设置为 75px(750px / 10) 就可以,里面页面元素rem值: 页面元素的px 值 / 75,剩余的,让flexible.js来去算
github地址:https://github.com/amfe/lib-flexible

4.4.2 VSCode px 转换rem 插件 cssrem

设置html字体大小基准值:打开 设置 快捷键是 ctrl + 逗号。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

页面自适应

后续整理下自适应的集中方法 地址

【数据库】MySQL InnoDB存储引擎详解 - 读书笔记

MySQL InnoDB存储引擎详解 - 读书笔记 InnoDB 存储引擎概述InnoDB 存储引擎的版本InnoDB 体系架构内存缓冲池LRU List、Free List 和 Flush List重做日志缓冲(redo log buffer)额外的内存池 存储结构表空间系统表空间独立表空间通用表空间undo表空间临时…

如何彻底删除node和npm

如何彻底删除node和npm 前言: 最近做个项目把本地的node更新了,之前是v10.14.2更新至v16.14.0 ,想着把之前的项目起来下,执行npm install 结果启动不了,一直报npm版本不匹配需要更新本地库异常… 找了几天发现是npm 和…

基于JAVA的汽车售票网站论文

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对汽车售票信息管理混乱,出错率高,信息安全性差…

从零到百万富翁:ChatGPT + Pinterest

原文:Zero to Millionaire Online: ChatGPT Pinterest 译者:飞龙 协议:CC BY-NC-SA 4.0 在社交媒体上赚取百万美元 - 逐步指南,如何在线赚钱版权 献给: 我将这本书,“从零到百万富翁在线:Chat…

Netty经典32连问

文章目录 1、Netty是什么,它的主要特点是什么?2、Netty 应用场景了解么?3、Netty 核心组件有哪些?分别有什么作用?4、Netty的线程模型是怎样的?如何优化性能?5、EventloopGroup了解么?和 Event…

【QT入门】 无边框窗口设计之实现圆角窗口

往期回顾: 【QT入门】对无边框窗口自定义标题栏并实现拖动和拉伸效果-CSDN博客 【QT入门】 自定义标题栏界面qss美化按钮功能实现-CSDN博客 【QT入门】 无边框窗口设计之实现窗口阴影-CSDN博客 【QT入门】 无边框窗口设计之实现圆角窗口 我们实际用到的很多窗口&am…

装饰工程管理系统|基于Springboot的装饰工程管理系统设计与实现(源码+数据库+文档)

装饰工程管理系统-项目立项子系统目录 目录 基于Springboot的装饰工程管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能实现 (2)合同报价管理 (3)装饰材料总计划管理 (4&#xff0…

基本线段树以及相关例题

1.线段树的概念 线段树是一种二叉树,也就是对于一个线段,我们会用一个二叉树来表示。 这个其实就是一个线段树,我们会将其每次从中间分开,其左孩子就是左边的集合的和,其右孩子就是右边集合的和; 我们可以…

前端返回 List<Map<String, Object>>中的vaue值里面包含一个Bigdecimal类型,序列化时小数点丢失,如何解决?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

Windows 11安装kb5035853补丁时,提示错误0x800f0922,并且弹出“某些操作未按计划进行,不必担心,正在撤消更改。请不要关机”

Windows 11安装kb5035853补丁时,提示错误0x800f0922,并且还在重启后弹出“某些操作未按计划进行,不必担心,正在撤消更改。请不要关机”,按微软官方的作法是:https://learn.microsoft.com/zh-cn/windows/rel…

基于SpringBoot和Vue的音乐在线交流网站的设计和实现【附源码】

1、系统演示视频(演示视频) 2、需要交流和学习请联系

【PLC一体机】GX Works2编程控制步进电机正反转

今天博主和大家分享一下在GX Works2 中对PLC一体机编程,实现步进电机自动正反转的程序。 程序如下: 该程序有几个重要的地方和大家分享一下: 1、程序以中间寄存器M4开头。 博主想通过PLC一体机上的触摸屏控制程序是否运行,因此…

多类别分类器(Machine Learning研习十八)

多类别分类器 二元分类器可以区分两个类别,而多类别分类器(也称为多叉分类器)可以区分两个以上的类别。 一些 Scikit-Learn 分类器(如 LogisticRegression、RandomForestClassifier 和 GaussianNB)能够原生处理多个类…

各类系统业务功能架构图整理

一、前言 很多软件系统一直经久不衰,主要这些系统都是一些生产工作经营不可或缺的系统。比如财务系统,商城系统,支付系统,供应链系统,人力资源管理系统,ERP系统等等。这些系统不管大公司还是小公司往往都需…

VSCode美化

今天有空收拾了一下VSCode,页面如下,个人觉得还是挺好看的~~ 1. 主题 Noctis 色彩较多,有种繁杂美。 我使用的是浅色主题的一款Noctis Hibernus 2. 字体 Maple Mono 官网:Maple-Font 我只安装了下图两个字体,使…

jvm总结学习

四种加载器 1.启动类加载器 2.拓展类加载器 3.应用程序加载器 4.自定义加载器 沙箱机制 就是为了保证安全,增加的一些权限。 native方法区(静态变量,常量,类信息(构造方法,接口定义)&…

Python 代码混淆工具概述

在保护Python代码安全方面,有多种混淆工具可供选择,包括 Cython, Nuitka, Pyminifier 和 IPA guard。本文将介绍这些工具的特点和适用情况,以及在实际应用中的注意事项。 📝 摘要 本文探讨了几种常见的 Python 代码混淆工具&am…

阿里云可观测 2024 年 3 月产品动态

本月可观测热文回顾 文章一览: 全新架构!日志服务 SLS 自研免登录方案发布 AIOps 智能运维:有没有比专家经验更优雅的错/慢调用分析工具? 一文看懂如何做好 SQL 质量监控 使用 SPL 高效实现 Flink SLS Connector 下推 功能快…

HbnnMall电子商城系统介绍(功能与技术栈)

今天在看我个人网站上的文章时,看到了曾经在2020年自己开发的电商系统。那时我已经入职小米有一段时间了,基本已经对各个业务线,各种业务知识有了系统性的了解和学习,所以想自己动手写一个电商系统,以便进一步提高自己…