前端技术之移动端适配

目录

 

移动端适配

01. 媒体查询

示例

档位示例

02. rem

rem适配原理

示例

03. rem 应用

04. 实际应用

05. less的使用

安装

变量

嵌套

运算

06. 解决方案

方案1

方案2(推荐!!!)

方案对比


移动端适配

  1. 媒体查询

  2. rem

01. 媒体查询

作用: 感受到屏幕的变化;可以根据屏幕不同的宽,从而获得不同的样式,然后实现不同的样式显示;

语法:

CSS样式:

/*
​
mediatype 查询类型: 
​
\----------------- 
​
all 所有设备 
​
print 用于打印机和打印预览 
​
screen 用于电脑屏幕,平板电脑,智能手机等。 
​
条件: 
​
\---- 
​
and 并且 not 不满足 only 仅仅满足 
​
media feature 查询条件: 
​
\---------------------- 
​
width,min-with,max-width 
​
*/
​
@media mediatype and|not|only (media feature) { 
​
CSS-Code; 
​
}

引用资源:(了解)

例子:

如果文档宽度小于 500 像素则修改背景颜色(background-color):

/* min-width/max-width:最小界值,最大界值;查询条件包含等于号;*/ 
​
/* 宽度的最小界值500px,大于等于500px */ 
​
@media screen and (max-width:499px) { 
​
body {
​
background-color: red; 
​
} 
​
}

适配需求

  • 档位1:w<320 px w <= 319 px;

  • 档位2: w>=320px and w< 640px;

  • 档位3: w>=640px

示例

<!DOCTYPE html>
<html lang="en">
​
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 媒体查询 小于500  */
        @media screen and (max-width: 499px) {
​
            /* 相对应的css代码 */
            body {
                background: red;
            }
        }
    </style>
</head>
​
<body>
​
</body>
​
</html>

档位示例

<!DOCTYPE html>
<html lang="en">
​
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 档位1 w<320 w<=319 */
        @media screen and (max-width: 319px) {
            body {
                background: #000;
            }
        }
​
        /* 档位2 w>320 and <640 */
        /* @media screen and (min-width: 320px) and (max-width: 639px) {
            body {
                background: blue;
            }
        } */
        /* 第二种方法 */
        @media screen and (min-width: 320px) {
            body {
                background: blue;
            }
        }
​
        /* 档位3 w>640 */
        @media screen and (min-width: 640px) {
            body {
                background: yellow;
            }
        }
    </style>
</head>
​
<body>
​
</body>
​
</html>

02. rem

rem适配原理

rem是一个相对单位,类似于em,

不同的是rem的基准是相对于html元素的字体大小,em是父元素字体大小。

作用:让一些不能等比自适应的元素,达到当设备尺寸发生改变的时候,等比例适配当前设备。

方案:使用媒体查询根据不同设备按比例设置html的字体大小,然后页面元素使用rem做尺寸单位,当html字体大

小变化元素尺寸也会发生变化,从而达到等比缩放的适配。

用法:

  • rem单位,可以控制整个页面所有元素有关PX类;(宽、高、padding、margin、top...)只要是你设置数值 的地方都可以实现控制;

  • root: 1rem代表HTML的font-size大小;

语法:

/* 1.根html 为 10px */ 
​
html { 
​
font-size: 10px; 
​
}
​
/* 2.此时 div 的宽就是 150px */ 
​
div {
​
width: 15rem; 
​
}

示例

<!DOCTYPE html>
<html lang="en">
​
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* rem语法 在哪里设置 设置什么 */
        /* rem是个单位  现在 1rem就是10px  */
        html {
            font-size: 10px;
        }
​
        div {
            width: 15rem;
            height: 15rem;
            background: #000;
        }
    </style>
</head>
​
<body>
    <div></div>
</body>
​
</html>

03. rem 应用

  • rem布局的核心:rem+媒体查询;

  • 媒体查询:把屏幕划分不同档位,等待变化;

    • 布局所有单位用rem, HTML字体大小发生改变,使用rem单位元素都会发生改变;

    • rem+媒体查询加在一起:划分屏幕,等待变化;变化谁?变化唯一控制 rem(HTML字体大小)

  • 语法:

@media screen and (min-width: 320px) { 
​
html { 
​
font-size: 20px; 
​
} 
​
}
​
@media screen and (min-width: 640px) { 
​
html { 
​
font-size: 40px; 
​
} 
​
}
​
div { 
​
width:1rem; 
​
height:1rem; 
​
} 
  • rem布局核心总结:

    • 媒体查询:屏幕到达不同的范围下,HTML的font-size大小会有不同的取值;

    • 1rem 背后的代表的px值 = 当前档位 HTML 字体大小 所代表的大小 。

    • 那么使用rem单位的元素就会发生等比的变化;

04. 实际应用

UI设计稿:

  • 尺寸不同,页面在不同的尺寸下要等比缩放

  • 档位划分:min-width 最小界值;

  • 约定:把UI各种设计稿,从小到大,当前我们档位划分开始点,起始点;

1rem背后代表的值 :

  • 在这里,我们约定设置HTML的字体大小:按照每个档位的最小界值,都划分相同的份数,得到当前档位的HTML的font-size大小;

// 我们此次定义的划分的份数 为 10 这个过程在计算 1个rem 在不同档位下是多大; 
​
@media screen and (min-width: 320px) { 
​
html {
​
font-size: 32px; 
​
} 
​
}
​
@media screen and (min-width: 360px) { 
​
html {
​
font-size: 36px; 
​
} 
​
}
​
@media screen and (min-width: 540px) { 
​
html {
​
font-size: 54px; 
​
} 
​
}

具体如何做?

  • 档位和根基设置按照约定设置好了;

  • UI给的图的已经拿到了,上面标注的是px单位;

  • 目标:把px单位换算 成rem单位;

  • 如何做:选择当前设计稿在档位下的rem背后代表的值进行计算;

  • 如果给你的540px宽度设计稿怎么换算rem,宽度=300px = 300/54 rem;

05. less的使用

  • less : 让你写更少的代码,实现相同的效果;

  • less :是一门 CSS 扩展语言,它扩展了CSS的动态特性。 CSS 预处理言语。

  • 常见的CSS预处理器:Sass、Less、Stylus 。

  • Less中文网址:http://lesscss.cn/

安装

  • vscode插件安装:

    • 搜索 Easy LESS

    • 安装完毕插件,重新加载下 vscode。

    • 测试:保存一下 .less 文件,会自动生成 .css 文件。

变量

  • 变量是指没有固定的值,可以改变的。

  • 我们CSS中的一些颜色和数值等经常使用,可以设置为变量;

  • 语法:

//@变量名:值; 

@bg:#333; 

.box_1 { 

background-color: @bg; 

}

.box_2 { 

background-color: @bg; 

}
  • 命名规则:

    • 必须有@为前缀

    • 不能包含特殊字符~=+、不能以数字开头

    • 大小写敏感区分;

嵌套

  • 类似HTML一样写less结构;

  • 语法:

/* css 写法 */ 

\#header .logo { 

width: 300px; 

}

/* less 写法 */ 

\#header { 

.logo { 

width: 300px; 

} 

}
  • 交集|伪类|伪元素选择器,语法:

/* css写法 */ 

a:hover{ 

color:red; 

}

/* less写法 */ 

a{

&:hover{ 

color:red; 

} 

}

运算

  • 任何数字、颜色或者变量都可以参与运算。

  • Less提供了加(+)、减(-)、乘(*)、除(/)算术运算。

  • 语法:

// 数字 

width: 200px - 50; 

// 颜色 

background-color: #666 - #222; 

// 注意:运算符中间左右有个空格隔开 1px * 5
  • 单位选择:

    • 如果两个值之间只有一个值有单位,则运算结果就取该单位

    • 对于两个不同的单位的值之间的运算,运算结果的值取第一个值的单位

06. 解决方案

方案1

rem+媒体查询+less 方案

750px 操作过程:

  • 第一步:

    • 原稿实现:先拿到设计稿:750px ; 页面上所有的元素,在750px设计稿上进行测量,代码实现;

  • 第二步:

    • 2.1准备各个档位下的rem :提前准备好各个档位下的HTML 的font-size大小;

    • 2.2 拿到当前尺寸的rem:因为我现在是750px的设计稿,所以可以得到750px这个尺寸属于的档位下的 HTML 的font-size大小,也就是750px设计稿下的1rem值。

    • 2.3 计算比例:把页面刚才所有的元素的PX值替换为 rem

    • 达到目标:那么,屏变化时,1rem(基础块)也会变化,自然就是等比缩放;

方案2(推荐!!!)

rem+flflexible.js+less

  • 和上个方案实现原理一样,都是通过改变1rem(基础块)大小实现页面整体元素改变;

flexible.js

  • 简介:手机淘宝团队出的 简洁高效 移动端适配库;和flex布局没有任何关系

  • github地址:https://github.com/amfe/lib-flflexible

  • 不是通过设置CSS媒体查询设置font-size,通过 JS 设置font-size,效果是屏幕变化一点,就有一个rem重新计算;

1rem背后代表的值

  • 划分10份;

  • 设置在HTML标签上;

function setRem () { 

// docEl.clientWidth JS获取当前屏幕的宽度 

// 除以10,得到基础块 

var rem = docEl.clientWidth / 10; 

docEl.style.fontSize = rem + 'px' 

}

步骤!!!

  • 假如设计稿430px

  • 拿到UI设计稿,原稿实现;页面上所有的元素,在设计稿上进行测量,代码实现;(流式、flex)只要是UI给 图上有标注,就是写出来;先全部实现出来,一会统一替换;

    • 在哪里写?less文件

    • 需要把生成的css文件进行引入index.html;

  • 设计稿宽度/10 :1rem=43px;

  • 统一替换:100px=100/43rem;

方案对比

  • 相同:都是对font-size实现控制,1rem(基础块)变化,实现等比效果;

  • 不同:

    • rem+媒体查询+less:通过设置不同的档位下,设置不同的1rem值;效果为阶梯式变化;

    • flexible.js+rem:通过js设置不同的1rem值,效果为连续变化;这个看起来更为连贯,适配任何屏幕。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值