Day12:rem 布局 和 less 使用

目标:使用 rem 和 less 完成移动端的布局。


一、移动 Web 基础

1、谷歌模拟器

在网页右键点“检查”或快捷键 F12,然后右边栏顶部第二个按钮切换设备为移动端,刷新网页,可以看到谷歌模拟器,可以切换模拟器型号、尺寸、百分比等操作。

在这里插入图片描述

2、屏幕分辨率

分类:

  • 物理分辨率:指屏幕上实际拥有的像素点数,通常用水平像素数和垂直像素数来表示,比如常见的 1920×1080。它是屏幕本身的固有属性,不会随其他因素而改变。物理分辨率决定了屏幕显示图像的清晰度和细腻程度,物理分辨率越高,显示的图像就越清晰、精细。

  • 逻辑分辨率:可以理解为软件层面上设定的分辨率。它是系统或应用程序所使用的分辨率设定。通过调整逻辑分辨率,可以在不改变物理分辨率的情况下,改变屏幕上显示内容的大小和布局。例如,在一部手机上,其物理分辨率是固定的,但用户可以根据自己的喜好在系统设置中调整逻辑分辨率,让图标和文字显示得更大或更小。

在这里插入图片描述

结论:制作网页参考逻辑分辨率,因为我们希望我们设计移动端网页根据不同的手机分辨率、或用户设置手机分辨率而展示不同的尺寸,即适配手机分辨率。

3、视口

作用:显示 HTML 网页的区域,用来约束 HTML 的尺寸。

<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><!-- 视口标签:规定HTML的尺寸,让HTML的宽度 = 逻辑分辨率的宽度/设备的宽度 --><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
  • 快捷键 !回车,生成 html 骨架的时候会自动生成视口标签,有了这句代码,html 的宽度会等于设备的宽度
  • width=device-width:视口宽度 = 设备宽度
  • initial-scale=1.0:缩放1倍(不缩放)
4、二倍图

目前开发移动端项目,设计师参考的尺寸以 iphone6/7/8 即 375 * 667 为主流尺寸。但是随着手机手机分辨率越来越高,如果还以 375 * 667 的尺寸设计和切图,图标在高分辨率屏幕下会模糊失真。所以设计师会给二倍图,即设计稿的尺寸是 750 * 1334,是 375 * 667 的二倍。

如果我们拿到设计稿,设计稿的宽度是 750,那这就是二倍图,不能按照上面的尺寸直接布局,需要进行下面操作:

(1)设计稿是 psd 文件,使用像素大厨软件,切换设计图倍数为 2x。
(2)设计稿是 html 文件,双击打开,在浏览器中网页右上角设置图标,修改像素密度为 @2x。

在这里插入图片描述

通过上面操作,设计稿宽度尺寸就会变成 375,我们按照设计稿的尺寸正常布局就可以了。

5、适配方案
  • 宽度适配:宽度自适应,一般用于 pc 端开发

    • 百分比布局
    • Flex 布局
  • 等比适配:宽高等比缩放,一般用于移动端开发

    • rem
    • vw

二、rem

1、简介
  • rem 单位,是相对单位
  • rem 单位是相对于 HTML 标签的字号(font-size)计算结果
  • 1rem = 1HTML 字号大小
  • 谷歌浏览器默认 1rem = 16px
<head><title>rem基本使用</title><style>/* 1. 给HTML标签加字号,此时 1rem = 30px */html {font-size: 30px;} /* 2. 使用rem单位书写尺寸 */.box {width: 5rem;height: 3rem;background-color: pink;}</style>
</head>
2、媒体查询

媒体查询能够检测视口的宽度,然后编写差异化的 CSS 样式,当某个条件成立,执行对应的CSS样式。

在这里插入图片描述

/* 当宽度等于 320px 时,背景颜色设置为绿色  */
@media (width:320px) {html {background-color: green;}
}
3、rem 布局

核心思路:目前rem布局方案中,将网页等分成10份, HTML标签的字号为视口宽度的 1/10。

<head><style>/* 1. 使用媒体查询,给不同视口的屏幕设置不同的HTML字号 */@media (width:320px) {html {font-size: 32px;}}@media (width:375px) {html {font-size: 37.5px;}}@media (width:414px) {html {font-size: 41.4px;}}/* 2. 使用rem单位书写尺寸 */.box {width: 5rem;height: 3rem;background-color: pink;}</style>
</head>

这样就能根据屏幕不同的逻辑像素,动态修改 font-size,即动态修改了 rem 的值,元素又使用 rem 单位进行布局,最终实现显示效果(如:图片的大小、文字的字号等)在不同像素下展示的效果不同,即屏幕适配。

上面的代码只是 rem 布局的核心思路。但如果实际开发中写这么多 @mdeia 来适配屏幕尺寸,不太现实。所以实际开发中,如果使用 rem 布局方案,还需要配合使用 flexible.js 。

4、flexible.js

flexible.js 是手淘开发出的一个用来适配移动端的 js 库。核心思路也是将视口等分成 10 份,1rem 就是 1 份。

核心原理就是根据不同的视口宽度给网页中 html 根节点设置不同的 font-size。通俗的讲,就是这个 js 库自动帮我们设置了 html 的 font-size 值,即 rem 的值。

<body><div class="box"></div><!-- 引入 flexible.js  --><script src="./js/flexible.js"></script>
</body>
5、rem 移动适配

根据设计稿 px 尺寸转换成 rem 尺寸

  1. 确定基准根字号
  • 查看设计稿宽度 → 确定参考设备宽度(视口宽度) → 确定基准根字号(1/10视口宽度)。

  • 目前,设计稿大部分都是 375 尺寸的,所以基准根字号是 37.5(二倍图通过修改,也可以转换成 375 尺寸,当然要以设计给的尺寸为准,比如如果设计师给的设计稿宽度是420,那么基准跟字号就是 42)。

  1. rem 单位的尺寸
  • rem单位的尺寸 = px单位数值 / 基准根字号

  • rem 单位尺寸 = px 单位数值 / 37.5


三、less

1、安装 Easy LESS

上面讲解了怎么根据设计稿的 px 尺寸转换成 rem 尺寸,了解计算原理即可,实际开发中如果每个尺寸都这么计算,太影响开发效率了。下面讲解 VSCode 的 Easy LESS 插件提高开发效率。

Less 是一个 CSS 预处理器, Less 文件后缀是 .less。扩充了 CSS 语言, 使 CSS 具备一定的逻辑性、计算能力。

注意:浏览器不识别 Less 代码,目前阶段,网页要引入对应的 CSS 文件。

VS Code 插件:Easy LESS,保存 less 文件后自动生成对应的 CSS 文件。

安装好 Easy LESS 后,创建一个 .less 文件,在里面写 css 代码,宽高可以写成数学计算表达式,点击保存后会自动生成 .css 文件,在 html 中引入生成的 css 文件。

在这里插入图片描述

2、注释
  • 单行注释

    • 语法:// 注释内容
    • 快捷键:ctrl + /
    • Mac 电脑是 Command + /
  • 块注释

    • 语法:/* 注释内容 */
    • 快捷键: Shift + Alt + A
    • Mac 电脑是 Option + Shift + A
3、运算
  • 加、减、乘直接书写计算表达式
  • 除法需要添加 小括号 或 .
  • 表达式存在多个单位以第一个单位为准
.box {width: 100 + 20px;width: 100 - 80px;width: 100 * 2px;// 除法 / → (计算表达式) 或 ./ → 推荐()width: (68 / 37.5rem);// 出现红线, 并且提示报错, 但照样能计算出结果// width: 37.5 ./ 37.5rem;// 如果表达式有多个单位,最终 css 里面以第一个单位为准,结果是 0.77333333px;height: (29px / 37.5rem);
}
4、嵌套

作用:快速生成后代选择器。

提示:用 & 表示当前选择器,不会生成后代选择器,通常配合伪类或伪元素使用。

less 文件的代码:

.father {color: red;.son {width: 200px;a {color: green;// & 表示的是当前选择器,代码写到谁的大括号里面就表示谁, 不会生成后代选择器// 应用:配合hover伪类或nth-child结构伪类使用&:hover {color: blue;}}// 虽然也能实现 hover 效果, 但是习惯使用 &, 代码都在 a {} 里面, 便于以后阅读维护// a:hover {//   color: orange;// }}
}

生成的 css 代码:

.father {color: red;
}.father .son {width: 200px;
}.father .son a {color: green;
}.father .son a:hover {color: blue;
}
5、变量

概念:容器,存储数据。

作用:存储数据,方便使用和修改。

语法:

  • 定义变量:@变量名: 数据;
  • 使用变量:CSS属性:@变量名;
// 定义变量
@myColor: pink;// 使用变量
.box {color: @myColor;
}a {color: @myColor;
}
6、导入

作用:导入 less 公共样式文件。

语法:@import "文件路径";

提示:如果是 less 文件可以省略后缀。

@import './base.less';
@import './common';
7、导出

写法:在 less 文件的第一行添加 // out: 存储URL。

提示:

  • 导出路径只有写在第一行才起作用
  • 文件夹名称后面添加 /
  • 如果没有指定 css 的路径和名字,默认创建一个和 less 同级且同名的 css 文件,如果要创建的 css 名字和 less 名字一样,路径中可以省略 css 的名字,路径是 文件夹/ 结尾,/不能省
// out: ./14-mycss/index.css
// 导出 css 路径写在第一行才起作用, 否则不生效// 定义变量
@myColor: pink;.father {background-color: @myColor;
}// 导出路径是:同文件夹下的 css 文件夹内,创建一个和 less 文件名字一样的 css 文件
// 如果没有指定 css 的名字和路径,默认创建一个和 less 同名且同级的 css 文件
// 但是不起作用, 只有在第一行才起作用,
// out: ./css/.son {background-color: #fff;
}// 不起作用, 只有在第一行才起作用
// out: ./index.css
8、禁止导出

写法:在 less 文件第一行添加: // out: false

// out: false
// 禁止导出 css 文件, 写在第一行才起作用

四、综合案例

通过今日所学,使用 rem 完成如下移动端页面布局:

在这里插入图片描述

想要完整代码的,点击这里获取Day12综合案例完整代码。完全免费,仅供学习参考使用。



在这里插入图片描述

乾坤未定,你我皆是黑马


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

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

相关文章

华为设备动态路由OSPF(单区域+多区域)实验

动态路由OSPF的配置 OSPF分类两种情况&#xff1a;单区域 多区域路由 OSPF单区域路由配置 OSPF&#xff1a;开放最短路径优先的路由协议。属于大型动态路由协议&#xff0c;适用于中大型的园区网。 网络拓扑&#xff1a; 配置步骤&#xff1a; 1.完成基本配置&#xff08;略&a…

《传感器系列》COD 传感器

环境监测小卫士&#xff1a;COD 传感器&#xff0c;能够精准检测化学需氧量。对于水质监测和环境保护有着至关重要的作用&#xff01; 优势解析&#xff1a; 一、实时监测与快速响应 COD传感器能够实现实时监测和快速响应&#xff0c;这是其最大的优势之一。传统的COD测定方法…

计算机网络-OSI七层参考模型与数据封装

目录 一、网络 1、网络的定义 2、网络的分类 3、网络的作用 4、网络的数据传输方式 5、网络的数据通讯方式 二、OSI七层参考模型 1、网络参考模型定义 2、分层的意义 3、分层与功能 4、TCP\IP五层模型 三、参考模型的协议 1、物理层 2、数据链路层 3、网络层 4…

技术分享 | SpringBoot 流式输出时,正常输出后为何突然报错?

项目背景 一个 SpringBoot 项目同时使用了 Tomcat 的过滤器和 Spring 的拦截器&#xff0c;一些线程变量在过滤器中初始化并在拦截器中使用。该项目需要调用大语言模型进行流式输出。项目中&#xff0c;笔者使用 SpringBoot 的 ResponseEntity<StreamingResponseBody> 将…

R语言探索与分析14-美国房价及其影响因素分析

一、选题背景 以多元线性回归统计模型为基础&#xff0c;用R语言对美国部分地区房价数据进行建模预测&#xff0c;进而探究提高多元回 归线性模型精度的方法。先对数据进行探索性预处理&#xff0c;随后设置虚拟变量并建模得出预测结果&#xff0c;再使用方差膨胀因子对 多重共…

【问题分析】WMS无焦点窗口的ANR问题 + transientLaunch介绍【Android 14】

问题描述 Monkey跑出的Camera发生ANR的问题&#xff0c;其实跟Camera无关&#xff0c;任意一个App都会在此场景下发生ANR&#xff0c;场景涉及到Launcher的RecentsActivity界面&#xff0c;和transientLaunch相关。 1 log分析 看问题发生的场景&#xff1a; 1、Camera App的…

小学一年级数学上册,我终于学完了

目录 一、背景二、过程1.我对课程中的一些知识的思考2.我对于产品的思考3.我对自己儿子与知识产品结合的思考4.产品反馈的那些有意思的数据 三、总结 一、背景 简约而不简单&#xff0c;即是曾经的再现&#xff0c;也是未来的延伸&#xff0c;未来已来&#xff0c;就在脚下。 …

qmt量化交易策略小白学习笔记第18期【qmt编程之获取对应周期的北向南向数据--方式2:原生python】

qmt编程之获取对应周期的北向南向数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 获取对应周期的北向南向数据 提示 该数据通过get_market_data_ex接口获取获取历史数据前需要先用downl…

增加强制索引依然慢

版本: 阿里云RDS MySQL 8.0.25 线上数据库CPU达到100%, 定位到如下SQL EXPLAIN SELECT ssd.goods_no,ssd.goods_name,ssd.goods_spec,ssd.goods_unit,ssd.create_time,w.warehouse_name,sb.batch_no,swl.warehouse_region_location_name,sc.customer_name AS goodsOwnerName,s…

idm2024最新完美破解版免费下载 idm绿色直装版注册机免费分享 idm永久激活码工具

IDM 2024破解版重新开发了调度程序和MMS协议支持、重新设计和增强的下载引擎、与所有最新浏览器的独特高级集成、改进的工具栏以及大量其他改进和新功能&#xff0c;这一全新的更新&#xff0c;使得IDM下载器更加完美。值得一提的是&#xff0c;它可以借助油猴浏览器的脚本&…

Maven核心功能依赖和构建管理

1.依赖管理和配置 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题&#xff0c;使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中&#xff0c;避免出现版本冲突和依赖缺失等…

苹果手机618大降价重登销量榜首 红米K70pro为何成京东618国产手机之光

今天的618已经好几天了&#xff0c;很多买有机的已经下单&#xff0c;不出意外苹果15系列手机仍然是最卖座的手机&#xff0c;大家虽然口号喊得很响身体却是诚实的。但令人感到意外的是&#xff0c;今年618国产手机的第一把交椅确实红米K70系列&#xff0c;说好的支持华为呢&am…

如何在手机上恢复误删除的视频?

说到移动设备上的视频恢复&#xff0c;我们仍将揭开4种解决方案供您使用。希望它们对您的案件有所帮助。 众所周知&#xff0c;我们移动设备上的视频应用程序将创建一个缓存文件夹&#xff0c;以在它们永远消失之前临时存储已删除的项目。因此&#xff0c;有许多iPhone / Andr…

C++基础与深度解析 | 模板 | 函数模板 | 类模板与成员函数模板 | concepts | 完美转发 | 模板的其他内容

文章目录 一、函数模板二、类模板与成员函数模板三、Concepts(C20)四、模板相关内容1.数值模板参数与模板模板参数2.别名模板与变长模板3.包展开与折叠表达式4.完美转发与lambda表达式模板5.消除歧义与变量模板 一、函数模板 在C中&#xff0c;函数模板是一种允许你编写可以处理…

【mysql】数据报错: incorrect datetime value ‘0000-00-00 00:00:00‘ for column

一、问题原因 时间字段在导入值0000-00-00 00:00:00或者添加 NOT NULL的时间字段时&#xff0c;会往mysql添加0值&#xff0c;此时可能出现此报错。 这是因为当前的MySQL不支持datetime为0&#xff0c;在MySQL5.7版本以上&#xff0c;默认设置sql_mode模式包含NO_ZERO_DATE, N…

Python爬取城市空气质量数据

Python爬取城市空气质量数据 一、思路分析1、寻找数据接口2、发送请求3、解析数据4、保存数据二、完整代码一、思路分析 目标数据所在的网站是天气后报网站,网址为:www.tianqihoubao.com,需要采集武汉市近十年每天的空气质量数据。先看一下爬取后的数据情况: 1、寻找数据…

大模型基础——从零实现一个Transformer(1)

一、Transformer模型架构图 主要模块&#xff1a; embedding层&#xff1a; Input/Output Embedding&#xff1a; 将每个标记(token)转换为对应的向量表示。 Positional Encoding&#xff1a;由于没有时序信息&#xff0c;需要额外加入位置编码。 N个 block堆叠: Multi-Head …

【QT5】<总览四> QT常见绘图、图表及动画

文章目录 前言 一、QFile类读写文件 二、QPainter绘简单图形 三、QChart图表 四、QPropertyAnimation属性动画 五、Q_PROPERTY宏简介 六、自定义属性动画 前言 承接【QT5】&#xff1c;总览三&#xff1e; QT常用控件。若存在版权问题&#xff0c;请联系作者删除&#…

UE5 Mod Support 思路——纯蓝图

原创作者&#xff1a;Chatouille 核心功能 “Get Blueprint Assets”节点&#xff0c;用于加载未来的mod。用基础类BP_Base扩展即可。打包成补丁&#xff0c;放到Content\Paks目录下&#xff0c;即可让游戏访问到内容。 与文中所写不同的地方 5.1或者5.2开始&#xff0c;打…

uniapp封装picker选择器组件,支持关键字查询

CommonPicker.vue组件 路径在 components\CommonPicker.vue <template><view><uni-easyinput v-model"searchQuery" :placeholder"placeholder" /><picker :range"filteredOptions" :range-key"text" v-model&…