移动Web学习05-移动端适配Less预处理器

7、移动端适配

7.1、什么是适配?

简单理解就是、同一个网页,在不同屏幕分辨率的设备下、显示还是一样的,你可以理解为、网页当中的图片,盒子之间的距离、文字的大小、随着屏幕分辨率的变化而变化

前面我们学习了flex布局的方式进行网页布局、我们发现、布局盒子可以随着不同分辨率、而进行不同的显示、

但是我们调试、我前一个阶段写的小兔鲜移动端页面、发现当分辨率变化时、字体和图片的大小、并不能随着分辨率的变化而变化

为什么?因为我们以前用的是px,他并不是一个相对单位、而是一个绝对单位,不管在什么样的屏幕下、永远都是那么大?

那么怎么做到适配?下面我们来聊下适配方案

7.2、移动端适配方案

flex + rem单位 做适配效果 (比如淘宝和小米移动端) 当前市场最多

flex + viewport width /vh单位 做适配效果 (比如 B站移动端 ) 新兴,马上的一个趋势

让flex做布局(盒子摆放),让rem或者vw/vh 实现网页元素的尺寸(宽度和高度)适配屏幕

7.3、rem 适配

px单位+百分比布局能实现适配嘛?

px单位是绝对单位

百分比布局特点宽度自适应,高度固定

rem单位

rem 是一个相对单位,1rem 就是 html文字的大小

比如

html {
    font-size: 35px;
}

则此时 1rem 就是 35像素。

em单位

.box{
  width:10em
  height:10em
  background-color:pink
  font-size:20px
}

上述这个盒子为200px*200px

为啥这个盒子是200*200

em单位就是当前一个字的大小,1em=20px所以.box=200px

如果此时换成rem的写法呢?

10em换成10rem,此时盒子的大小是多少?160px还是200

答案:160px

为啥是160px?

因为 HTML根标签默认的字体大小就是16px,rem的大小是相对于根标签HTML字号大小来算的

7.4、媒体查询

我们已经知道了em和rem的区别和用法

那么我们达到适配效果呢,让字体或者盒子间距图片等、在不同分辨率下也能放大或者缩小显示

手机屏幕大小不同,分辨率不同,如何设置不同的HTML标签字号?

使用媒体查询来编写CSS

什么是媒体查询

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

媒体查询写法

@media(媒体特性){
    选择器{
        css属性
    }
}
@media(width:320px){
    /*通过媒体查询,检测视口宽度 不同的视口设置不同的根标签文字大小*/
    html{
        font-size:32px
    }
}

设备宽度不同,HTML标签字号设置多少合适?

  • 设备宽度大,元素尺寸大
  • 设备宽度小,元素尺寸小

image-20240405181136955

不成文的规定

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

当然你划分成为20份也可以,当然还是10份比较好,因为比较好计算

image-20240405181545905

划分10份和划分20份有区别吗?

没有区别

工作中,书写代码的尺寸要参照设计稿尺寸,设计稿中是px还是rem

如何确定rem的数值?

image-20240405182544200

这张图片中的图标为68px*29px

他是在屏幕宽度为375px下的显示的,

目标:计算68px是多少个rem?(假定设计稿适配375px视口)

N*37.5=68-N=68/37.5(有点迷糊)

默认是10等分、所以一份大概是37.5px,计算元素是多少rem直接除以37.5就好了

如下:

1rem=37.5px,那么几rem是68?78/37.5=1.81333333333333333333

确定设计稿对应的设备的HTML标签字号

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

7.5、flexible

前面我们讲了媒体查询,可以使用媒体查询来监视视口的变化?有什么弊端

image-20240405195448058

手机设备很多,屏幕尺寸不一,视口不仅仅只有这三个,解决方案是什么?

使用手淘团队开发的js框架flexible

什么是flexible.js

flexible.js是手淘开发的一个用来适配移动端的js框架

为啥要用flexible.js

媒体查询写起来麻烦,且检测不够精确,因此我们使用 flexible.js ,通过js 实时检测屏幕窗口的变化实现检测视口宽度。

核心原理

核心原理就是根据不同的视口宽度给网页中html根节点设置不同的font-size

image-20240405195726508

7.6、如何把设计稿的px转换为rem

flexible 能够修改html文字大小,修改文字大小: 当前屏幕 / 10 就是文字大小

例如: 当前屏幕 375px,则加了 flexible之后,html文字大小为 37.5px

我们的设计稿里面元素大小是固定的吗? 是 , 而是 px 单位 ,但是我们开发的时候,要使用 rem 才能适配。

那怎么把我们测量的px 转换为适配的rem呢?

直接使用测量的px值 /  37.5 就是 rem的值

后面我们学习vue开发的时候,所有的单位我们写 px。就足够了。 因为有脚手架帮我做转换

8、Less

8.1、什么是Less

Less是一个CSS预处理器, Less文件后缀是.less

扩充了 CSS 语言, 使 CSS 具备一定的逻辑性、计算能力。

常见的预处理器还有 Sass、Stylus

image-20240405231337618

8.2、安装Less编译插件Easy Less

Easy Less是一个VsCode插件

作用:less文件保存自动生成css文件

注意: html页面引入的还是css文件,而不是 less 文件

image-20240405231529801

8.3、体验Less的强大

建一个文件test.less

body {
  background-color: pink;
}

会自动在同级目录下编译出来一个css文件,名称为test.css

body {
  background-color: pink;
}

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

有同学会疑惑我直接建一个css文件直接往css里边写就好了,干嘛还要写这么一个文件,而且还要下插件编译

这不是脱裤子放屁多次一举嘛!因为Less,有很多强大的功能,计算,嵌套写法、变量,导入导出,会提高你css编写速度和准确率

当然这个对于用户来说,并没有什么区别,收益的是前端开发人员

8.4、Less注释

单行注释

  • 语法:// 注释内容

  • 快捷键:ctrl + /

块注释

  • 语法:/* 注释内容 */
  • 快捷键: shift + alt + A

8.5、Less运算

.box {
  width: 100px + 100;
  // 注意:单位的转换 计算的时候以第一个单位为准
  height: (100 / 37.5rem);
  // height: (100rem / 37.5);
  // height: 100px - 50;
  margin: (20px * 5) auto;
  padding: (10px / 5);
  border: 1px + 2 * 3 solid red;
}

注意点:

计算以第一个单位为准, 尽量写到最后一个数字上。 比如

 height: (100 / 37.5rem);

除法比较特殊,必须添加小括号。

计算别忘了先乘除后加减

8.6、Less嵌套

可以生成后代选择器

.father {
    width: 500px;
    height: 500px;
    background-color: purple;
    // 孩子
    .son {
        width: 200px;
        height: 200px;
        background-color: pink;
        p {
            color: red;
        }
    }
}

生成css之后:

.father {
  width: 500px;
  height: 500px;
  background-color: purple;
}
.father .son {
  width: 200px;
  height: 200px;
  background-color: pink;
}
.father .son p {
  color: red;
}

image-20240405232728949

我们在写伪类和伪元素的时候,经常使用 & 来代替父元素

.nav {
  width: 100px;
  height: 100px;
  background-color: pink;
  &::before {
    content: '1';
  }
  &:hover::before {
    color: red;
  }
}
.nav {
  width: 100px;
  height: 100px;
  background-color: pink;
}
.nav::before {
  content: '1';
}
.nav:hover::before {
  color: red;
}

8.7、less 变量

变量最大的优点是: 方便使用和修改。

语法:

@变量名:;
@fontSize: 16px;
@suibian: hotpink;
body {
  background-color: @suibian;
}
p {
  background-color: @suibian;

}
div {
  color: @suibian;
}
nav {
  border: 1px solid @suibian;
}
body {
  background-color: hotpink;
}
p {
  background-color: hotpink;
}
div {
  color: hotpink;
}
nav {
  border: 1px solid hotpink;
}

8.9、小练习

需求1: 使用less 完成以下效果 大盒子 father 小盒子 son

63833046720

需求2: 鼠标经过大盒子,小盒子颜色变为 hotpink色

需求3: 请将 hotpink 颜色定义为一个变量。 @bgColor

-  建议: 小驼峰命名法     @backGroundColor
// 背景颜色变量
@backGroundColor: deeppink;
// 定义边框
@bd: 3px solid green;
.father {
  width: 500px;
  height: 500px;
  background-color: pink;
  display: flex;
  justify-content: center;
  align-items: center;
  border: @bd;
  .son {
    width: 200px;
    height: 200px;
    background-color: skyblue;
    border: @bd;
  }
  // &:hover .son {
  //   background-color: hotpink;
  // }
  &:hover {
    .son {
      background-color: @backGroundColor;
    }
  }
}

8.1、less导入

less的导入实际 是 less 文件的导入。

@import './变量.less';
@import url(./变量.less);

使用less导入的好处是: 减少了html页面 的 link标签数量。

8.2、less 导出

配置EasyLess插件, 实现所有Less有相同的导出路径

配置插件: 设置 → 搜索EasyLess → 在setting.json中编辑 → 添加代码(注意,必须是双引号)

image-20240405233218073

  "less.compile": {
    "out": "../css/" // 设置导出css路径
  },

手动给每个less文件指定导出

导出必须写到第一行

// out: 路径/文件名
// out: ./mycss/pink.css

设置导出: 当面目录下,创建一个 mycss 文件夹, 生成 一个 pink.css (做了改名)

// out: ./mycss/

设置导出: 当面目录下,创建一个 mycss 文件夹, 生成 一个 跟less一样的文件名(原名)

8.3、less 禁止导出

有些被其他Less导入的Less文件是不需要导出的,我们就可以在首行设置这个东西

// out: false

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

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

相关文章

关系型数据库与非关系型数据库、Redis数据库

相比于其他的内存/缓存数据库,redis可以方便的实现持久化的功能(保存至磁盘中) 一、关系数据库与非关系型数据库 1.1 关系型数据库 一个结构化的数据库,创建在关系模型基础上一般面向于记录 SQL语句 (标准数据查询语言) 就是一种…

二叉树学习

树 树是n个结点的有限集合,当n0时为空树,在任意一颗非空的树中,有且只有一个特定的称为根的结点,当n>1时,其余结点又可以分为m个不相交的有限集,其中每一个集合又是一棵树,并且称为根的子树…

深度学习方法;乳腺癌分类

乳腺癌的类型很多,但大多数常见的是浸润性导管癌、导管原位癌和浸润性小叶癌。浸润性导管癌(IDC)是最常见的乳腺癌类型。这些都是恶性肿瘤的亚型。大约80%的乳腺癌是浸润性导管癌(IDC),它起源于乳腺的乳管。 浸润性是指癌症已经“侵袭”或扩散到周围的乳…

c# wpf template itemtemplate+dataGrid

1.概要 2.代码 <Window x:Class"WpfApp2.Window8"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend…

《UE5_C++多人TPS完整教程》学习笔记30 ——《P31 摄像机和弹簧臂(Camera And Spring Arm)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P31 摄像机和弹簧臂&#xff08;Camera And Spring Arm&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;…

SpringBoot+ECharts+Html 地图案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 此案例使用的地图是在ECharts社区中查找的&#xff1a;makeapie echarts社区图表可视化案例 2. 准备条件 在mysql中创建数据库echartsdb&#xff0c;数据库中创建表t_location_count表&#xff0c;表中设置两个…

梯度下降算法(Gradient Descent)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 算法引言 梯度下降算法&#xff0c;这个在机器学习中非常常见的算法&#xff0c;可以用下山的例子来形象地解释。想象一下&#xff0c;你在一座…

Type-c转USBA3.0芯片 USBA3.0转Type-c芯片(USB3.1GEN2 多路切换Switch芯片) VL162

VL162具有CC功能的USB Type-C数据开关USB 3.1 Gen2 (10Gbps) VL162 带CC功能的USB Type-C数据开关 支持最高10Gbps 2差分通道&#xff0c;2:1 MUX/DeMUX 兼容10Gbps USB3.1 Gen2 低功耗&#xff0c;6mW在设备模式下有效 高直流共模电压&#xff0c;支持2.0V 28针QFN 3.5 x 4.5m…

[RK3128_LINUX5.1] 关于 RetroArch 使用

问题描述 查看文档 docs\cn\Linux\ApplicationNote\Rockchip_Use_Guide_Linux_RetroArch_CN.pdf&#xff0c;描述为实验 make menuconfig 后勾选选项 Libretro cores and retroarch -> retroarch 但是SDK中并没有这个选项 解决方案&#xff1a; 目前发布的buildroot SDK…

MySQL -- 08_最流行的查询需求分析(日期相关、生日、年份距离等~)

目录 最流行的查询需求分析08演示数据准备的SQL需求演示日期相关的查询函数46、查询各学生的年龄使用 timestampdiff() 函数更精准 47、查询本周过生日的学生简单写法&#xff1a;weekofyear针对不规范日期格式的判断写法&#xff1a; 48、查询下周过生日的学生49、查询本月过生…

STC89C51学习笔记(四)

STC89C51学习笔记&#xff08;四&#xff09; 综述&#xff1a;本文讲述了在STC89C51中数码管、模块化编程、LCD1602的使用。 一、数码管 1.数码管显示原理 位选&#xff1a;对74HC138芯片的输入端的配置&#xff08;P22、P23、P24&#xff09;&#xff0c;来选择实现位选&…

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--创建新主题

前言 你可以在wordpress里面下载使用人家打包好的主题&#xff0c;但可能不是很好用&#xff0c;接下来就自己做一个自己的主题。你需要先找到xampp文件夹–htdocs–wordpress(我给更名为wplocal)–wp-content–themes 进入该文件夹之后你可以看到你之前下载导入的所有主题文件…

深度学习十大算法之深度Q网络(DQN)

一、简介 深度Q网络&#xff08;DQN&#xff09;是一种结合了深度学习和强化学习的算法&#xff0c;它在近年来成为了人工智能领域的一个热点。DQN首次被引入是在2013年&#xff0c;由DeepMind的研究人员开发。它标志着深度学习技术在解决高维度决策问题上的一大突破。 DQN的…

Redis -- 缓存穿透问题解决思路

缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对象 优点&#xff1a;实现简单&#xff0c;维护方便 缺点&#xff1a; 额外…

Web大并发集群部署之集群介绍

一、传统web访问模型 传统web访问模型完成一次请求的步骤 1&#xff09;用户发起请求 2&#xff09;服务器接受请求 3&#xff09;服务器处理请求&#xff08;压力最大&#xff09; 4&#xff09;服务器响应请求 传统模型缺点 单点故障&#xff1b; 单台服务器资源有限&…

如何用putty通过ssh连接ubuntu

1. 下载和安装PuTTY 访问PuTTY官网下载PuTTY的最新版本。 2. 打开PuTTY 解压下载的文件后&#xff0c;找到PuTTY文件并双击打开。 3. 配置SSH连接 在ubuntu下安装ssh服务在安装ssh时&#xff0c;我一直遇到一个问题&#xff0c;原因是我的虚拟机连不上网&#xff0c;反复实…

Spark-Scala语言实战(13)

在之前的文章中&#xff0c;我们学习了如何在spark中使用键值对中的keys和values,reduceByKey,groupByKey三种方法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢…

海康摄像头插件嵌入iframe时视频播放插件位置问题

参考&#xff1a;https://juejin.cn/post/6857670423971758094 原因&#xff1a;没有按照iframe相对位置计算视频插件位置。 解决&#xff1a; $(window).on(resize, resize);function resize(){// 解决iframe中嵌入海康插件初始化问题:// 1. 获取iframe相比于窗口的偏移量;c…

第二节课《轻松玩转书生·浦语大模型趣味 Demo》

比较匆忙&#xff0c;假期前仿照第一期课程的内容好像被清空了&#xff0c;重新搭建一次。 https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 按照那老师写好的&#xff0c;一步步复制就好了 浦语灵笔2的大概率是会超出显存&#xff0c;先不测试了…

水泥5G智能制造工厂数字孪生可视化平台,推进水泥行业数字化转型

水泥5G智能制造工厂数字孪生可视化平台&#xff0c;推进水泥行业数字化转型。水泥5G智能制造工厂数字孪生可视化平台&#xff0c;是水泥行业数字化转型的关键推手。数字孪生平台运用先进的信息技术和数字化手段&#xff0c;实现水泥生产过程的数字化模拟、可视化监控和智能化管…