移动端适配

时间:2024-04-07 19:50:22

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。就足够了。 因为有脚手架帮我做转换