一、视口
2.5 mate视口标签
2.6标准的viewport设置
- 视口宽度和设备保持一致
- 视口的默认缩放比例1.0
- 不允许用户自行缩放
- 最大允许的缩放比例1.0
- 最小允许的缩放比例1.0
二、二倍图
二倍精灵图的做法
- 在 firework里面把精灵图等比例缩放为原来的一半
- 之后根据大小测量坐标
- 主意代码里面 background-size要写:精灵图原来宽度的一半
3.1物理像素&物流像素比
- 物理像素点指的是屏幕显示的最小颗粒,是物理真实存在的。这是厂商在出厂时就设置好了比如苹果6\78是750*1334
- 我们开发时候的1px不是一定等于1个物理像素的
- PC端页面,1个px等于1个物理像素的,但是移动端就不尽相同
- 一个px的能显示的物理像素点的个数,称为物理像素比或屏幕像素比
3.2多倍图
- 对于张50p×*50pX的图片在手机 Retina屏中打开,按照刚才的物理像素比会放大倍数,这样会造成图片模湖
- 在标准的 viewport设置中,使用倍图来提高图片质量,解决在高清设备中的模糊问题
- 通常使用二倍图,因为 iPhone6\8的影响,但是现在还存在3倍图4倍图的情况,这个看实际开发公司需求
- 背景图片注意缩放问题
3.3背景缩放 background-size
background-size属性规定背景图片的尺寸
- background-size:背景图片宽度背景图片高度
- 单位:长度百分比| cover I contain;
- cover把背景图像扩展至足够大,以使背景图像完全覆盖背景区域
- contain把图像图像扩展至最大尺寸,以使其宽度和高度完全适应内容区域
三、移动端技术解决方案
3.4特殊样式
- CSS3盒子模型
- box-sizing: border-box
- webkit-box-sizing: border-box
- 点击高亮我们需要清除清除设置为 transparent完成透明*/
- webkit-tap-highlight-color: transparent
- 在移动端浏览器默认的外观在ios上加上这个属性才能给按钮和输入框自定义样式
- webkit-appearance:none
- /禁用长按页面时的弹出菜单大/
- mg, ai -webkit-touch-callout: none;
四、移动端常见布局
移动端技术选形
五、流式布局(百分比布局)
- 流式布局,就是百分比布局,也称非固定像素布局
- 通过盒子的宽度设置成百分比来根据屏幕的完度来进行伸缩,不受固定像素的限制,内容向两侧填充。
- 流式布局方式是移动web开发使用的比较常见的布局方式
- max-width最大宽度( max-height最大高度)
- min-width最小宽度( min-height最小高度)
- 一般流式布局都是只给宽度不给高度
六、flex布局
6.1 布局原理
flex是 flexible box的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以
指定为flex布局。
- 当我们为父盒子设为flex布局以后,子元素的float、clear和 vertical- align属性将失效。
- 伸缩布局=弹性布局=伸缩盒布局=弹性盒布局=flex布局
采用Flex布局的元素,称为Flex容器( flex container),简称“容器“。它的所有子元素自动成为容器成员,称为Flex项目( flex item),简称“项目“。
- 体验中div就是flex父容器。
- 体验中span就是子容器flex项目
- 子容器可以横向排列也可以纵向排列
总结flex布局原理:
就是通过给父盒子添加fex属性,来控制子盒子的位置和排列方式.
6.2、flex常见父项属性
以下由6个属性是对父元素设置的
- flex- direction:设置主轴的方向
- justify- content:设置主轴上的子元素排列方式
- flex-wrap:设置子元素是否换行
- align-content:设置侧轴上的子元素的排列方式(多行)
- align-tems:设置侧铀上的子元素排列方式(单行)
- flex-flow:复合属性,相当于同时设置了flex- direction和 flex-wrap
6.2.1、flex-direction 设置主轴的方向
1、主轴与侧轴
- 在flex布局中,是分为主轴和侧轴两个方向,同样的叫法有:行和列、ⅹ轴和y轴
- 默认主轴方向就是ⅹ轴方向,水平向右
- 默认侧轴方向就是y轴方向,水平向下
2、属性值 - fex- direction属性决定主轴的方向(即项目的排列方向) 注意:主轴和侧轴是会变化的,就看flex-direction设置谁为主轴,剩下的就是侧轴。而我们的子元素是跟看主轴来排列的
<style>
div{
/* 给父元素添加flex */
display: flex;
width: 800px;
height: 300px;
background-color: pink;
/* 默认的主轴是 x轴 行 row 那么y轴就是侧轴 我们的元素就是跟着主轴来的*/
/* flex-direction: row; */
/* 简单翻转 */
/* flex-direction: row-reverse; */
/* 把我们主轴设置成y轴 那我们的侧轴就是x了 */
flex-direction: column;
}
</style>
6.2.2、justify- content设置主轴上的子元素排列方式
justify- content属性定义了项目在主轴上的对齐方式
注意:使用这个属性之前一定要确定好主轴是哪个
6.2.3、flex=wrap设置子元素是否换行
默认情况下,项目都排在条线(又称′轴线”)上。flex-wap属性定义,fex布局中默认是不换行的。
6.2.4、align-items设置侧轴上的子元素排列方式(单行)
该属性是控制子项在侧轴(默认是y轴)上的排列方式在子项为单项的时候使用
6.2.5、align-content设置侧轴上的子元素的排列方式(多行)
设置子项在侧轴上的排列方式并且只能用于子项出现换行的情况(多行),在单行下是没有效果的
6.2.6、align-content和align-items区别
align-items适用于单行情况下,只有上对齐、下对齐、居中和拉伸
align-content适应于换行(多行)的情况下(单行情况下无效),可以设置上对齐、下对齐、居中、拉伸以及平均分配剩余空间等属性值。
总结就是单行找aign- - items多行找 align-content
6.2.7、flex-flow属性是flex-direction和flex-wrap属性的复合属性
fex-fow属性是fex- direction和 flex-wrap属性的复合属性:
flex-flow: row wrap
<style>
div{
/* 给父元素添加flex */
display: flex;
width: 800px;
height: 300px;
background-color: pink;
/* flex-direction: column;
flex-wrap: wrap; */
flex-flow: column wrap;
}
</style>
- flex-direction:设置主轴的方向
- justify-content:设置主轴上的子元剽排列方式
- flex-wrap:设置子元素是否换行
- align-content:设置侧轴上的子元素的排列方式(多行)
- align- items:设置侧轴上的子元素排列方式(单行)
- flex-flow:复合属性,相当于同时设置了 flex-direction和 flex-wrap
6.3、flex布局子项常见属性
- flex子项目占的份数
- align-self控制子项自己在侧轴的排列方式
- order属性定义子项的排列顺序(前后顺序)
6.3.1 flex 属性
flex 属性定义子项目分配剩余空间,用flex来表示占多少份数。
<style>
.item{
flex:1; /*可以写1份 或2份 3份都可以 默认是0份*/
}
</style>
6.3.2 flex布局子项常见属性
align-self控制子项自己在测轴上的排列方式
- align-sef属性允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items属性。
- 默认值为auto,表示继承父元素的 align-items属性,如果没有父元素,则等同于 stretch
<style>
div span:nth-child(3){
align-self: flex-end;
}
</style>
order属性定义项目的排列顺序
数值越小,排列越靠前,默认为0。
注意:和z-ndex不一样。
七、rem布局
7.1、ren基础
7.1.1ren单位
rem( root em)是一个相对单位,类似于em,em是父元素字体大小。
不同的是rem的基准是相对于html元素的字体大小。
比如,根元素(htlm)设置font-sze=12px非根元素设置 width rem则换成pX表示就是24px
<style>
html{
font-size: 14px;
}
div{
font-size: 12px;
}
p{
/* 1、em相对于父元素的字体大小来说的 */
/* width: 10em;
height: 10em; */
/* 2、rem相对于HTML元素的字体大小来说的 */
/* 3、rem的优点就是可以通过修改htm1里面的文字大小来改变页面中元素的大小 */
width: 10rem;
height: 10rem;
background-color: pink;
}
</style>
7.2、媒体查询
7.2.1、什么是媒体查询
媒体查询( Media Query)是CSS3新语法
- 使用@ media查询,可以针对不同的媒体类型定义不同的样式
- @ media可以针对不同的屏幕尺寸设置不同的样式
- 当你重置浏览器大小的过程中,页面也会根据浏览器的完度和高度重新渲染页面
- 目前针对很多苹果手机、 Android手机,平板等设备都用得到多媒体查询
7.2.2、语法规范
<style>
@media mediatype and|inot|lonly (media feature){
css-code;
}
</style>
- 用@ media开头注意@符号
- mediatype媒体类型
- 关键字 and not only
- media feature媒体特性必须有小括号包合
1、mediatype查询类型
将不同的终端设备划分成不同的类型,称为媒体类型
2、关键字
关键字将媒体类型或多个媒体特性连接到起做为媒体查询的条件。
- and:可以将多个媒体特性连接到起,相当于旦”的意思。
- not:排除某个媒体类型,相当于咔非”的意思,可以省略。
- ony:指定某个特定的媒体类型,可以省略。
3、媒体特性 - 每种媒体类型都具体各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格。我们暂且了解三个。注意他们要加小括号包含
注意:为了防止混乱,媒体查询我们要按照从小到大或者从大到小的顺序来写但是我们最喜欢的还是从小到大来写,这样代码更简洁
4、媒体查询+rem实现元素动态大小变化
rem单位是跟看html来走的,有了rem页面元素可以设置不同大小尺寸媒体查询可以根据不同设备宽度来修改样式媒体查询+rem就可以实现不同设备宽度,实现页面元素大小的动态变化
5、引入资源(理解) - 当样式比较繁多的时候,我们可以针对不同的媒体使用不同
stylesheets(样式表)。原理,就是直接在link中判断设备的尺寸,然后引用不同的css文件。
7.2.3、Less基础
3.1维护css的弊端
CSS是一门非程序式语言,没有变量函数、 SCOPE(作用域)等概念。
- CSS需要书写大量看似没有逻辑的代码,CSS冗余度是比较高的。
- 不方便维护及扩展,不利于复用
- CSS没有很好的计算能力
- 非前端开发工程师来讲,往往会因为缺少CSS编写经验而很难写出组织良好且易于维护的CSS代码项目。
3.2Less介绍
Less( Leaner Style Sheets的缩写)是一门CSs扩展语言,也成为CSS预处理器
做为CSS的种形式的扩展,它并没有减少C
的
功
能
,
而
是
在
现
有
的
C
S
语
法
上
,
为
C
S
S
加
程
序
式
语
吉
的
特
性
。
它
在
C
S
S
的
语
法
基
础
之
上
,
引
入
了
变
量
,
M
i
i
(
混
入
)
,
运
算
以
及
函
数
等
功
能
,
大
大
简
化
了
C
S
S
的
编
写
并
且
降
低
了
C
S
S
的
维
护
成
本
,
就
像
它
的
名
称
所
的
那
样
,
L
e
s
s
可
以
让
我
们
用
更
少
的
代
码
做
更
多
的
事
情
L
e
s
的功能,而是在现有的CS语法上,为CSS加程序式语 吉的特性。 它在CSS的语法基础之上,引入了变量,Mii(混入),运算以及函数等功能,大大简化了CSS的编写 并且降低了CSS的维护成本,就像它的名称所的那样,Less可以让我们用更少的代码做更多的事情 Les
的功能,而是在现有的CS语法上,为CSS加程序式语吉的特性。它在CSS的语法基础之上,引入了变量,Mii(混入),运算以及函数等功能,大大简化了CSS的编写并且降低了CSS的维护成本,就像它的名称所的那样,Less可以让我们用更少的代码做更多的事情Les中文网址:http://lesscss.cn
常见的CSS预处理器:Sass、Less、 Stylus
一句话:Less是一门css预处理语言,它扩展了css的动态特性。
3.3Less安装
①安装 nodes,可选择版本⑧.0),网址:http/ nodes. cn/download/
②检查是否安装成功,使用cmd命令(win10是 window+r打开运行输cmd)输入“node-V“查看版本即可
③基于 nodes在线安装Less,使用cmd命令“ npm install -g less“即可
④检查是否安装成功,使用cmd命令“less”查看版本即可
3.4 Less使用
我们首先新建一个后缀名为les的文件,在这个les文件里面书写less语句
- Less变量
- Less编译
- Less嵌套
- Less运算
3.5Less 变量
变量是指没有固定的值,可以改变的。因为我们CS中的些颜色和数值等经常使用。
1.变量命名规范
- 必须有@为前缀
- 不能包含特殊字符
- 不能以数字开头
- 大小写敏感
3.6Less 编译
本质上,Less包含一套自定义的法及一个解析器,用户根据这些吾法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的CSS文件。
所以,我们需要把我们的less文件,编译生成为css文件,这样我们的html页面才能使用
3.7vocode Less插件
Easy LESS插件用来把less件编译为CSS文件安装完毕插件,重新加载下 vscode只要保存一下Less文件,会自动生成CSS文件
3.8Less嵌套
如果遇见(交集|伪类|伪元素选择器)
- 内层选择器的前面没有&符号,则它被解析为父选择器的后代
- 如果有&符号,它就被解析为父元素自身或父元素的伪类。
a{
&:hover{
color: red;
}
}
3.9Less运算
任何数字、颜色或者变量都可以参与运算。就是Less提供了加(+)、减(-)、乘(*)、除(/)算术运算。
@width:200px;
witch: 10px +5;
border: 15px solid red
/*工ess甚至还可以这样*
width: (5+2)*2;
- 乘号(*)和除号(/)的写法
- 运算符中间左右有个空格隔开1px+5
- 对于两个不同的单位的值之间的运算,运算结果的值取第一个值的单位
- 如果两个值之间只有一个值有单位,则运算结果就取该单位
4.1、ren实际开发适配方案
①按照设计稿与设备宽度的比例,动态计算并设置htm根标签的 font-size大小;(媒体查询)
②CSS中,设计稿元素的竞、高、相对位置等取值,按照同等比例换算为rem为单位的值
4.2、动态设置htm标签 font-size大小
①假设设计稿是750pX
②假设我们把整个屏幕划分为15等份(划分标准不一可以是20份也可以是10等份)
③每份作为htm字体大小,这里就是50p
④那么在320pX设备的时候,字体大小为320/15就是21.3pX
⑤用我们页面元素的大小除以不同的html字体大小会发现他们比例还是相同的
⑥比如我们以750为标准设计稿
⑦一个100100像素的页面元素在750屏幕下,就是100/50转换为rem是2em2rem比例是1比1
⑧320屏幕下,html字体大小为21.33则2rem=4266pX此时宽和高都是4266但是宽和高的比例还是1比1
⑨但是已经能实现不同屏幕下页面元素盒子等比例缩放的效果
4.3、元素大小取值方法
①最后的公式:页面元素的rem值=页面元素值(px)/(屏幕宽度/划分的份数)
②屏幕宽度划分的份数就是 html font-size的大小
③或者:页面元素的rem值=页面元素值(px)/ html font-size字体大小
八、rem适配方案2
技术方案1
- less
- 媒体查询
- rem
技术方案2(推荐)
- flexible.js
- rem
8.1、简洁高效的rem适配方案 flexible js
- 手机淘宝团队出的简洁高效移动端适配库
- 我们再也不需要在写不同屏幕的媒体查询,因为里面js做了处理
- 它的原理是把当前设备划分为10等份,但是不同设备下,比例还是致的。
- 我们要做的,就是确定好我们当前设备的hm文字大小就可以了
- 比如当前设计稿是750pX,那么我们只需要把html文字大小设置为
- 75pX(750pX/10)就可以
- 里面页面元素rem值:页面元素的p值 / 75
- 剩余的,让 flexible来去算
8.2、VSCode px转换成rem 插件 cssrem
设置hm字体大小基准值
1.打开设置快捷键是ctr+逗号