前端的初步学习笔记(十三)

移动端基础

1.浏览器现状

PC端常见浏览器
360浏览器、谷歌浏览器、火狐浏览器、QQ浏览器、百度浏览器、搜狗浏览器、IE浏览器

移动端常见浏览器
UC浏览器,QQ浏览器,欧朋浏览器,百度手机浏览器,360安全浏览器,谷歌浏览器,搜狗手机浏览器,猎豹浏览器,以及其他杂牌浏览器

国内的UC和QQ,百度等手机浏览器都是根据 Webkit 修改过来的内核,国内尚无自主研发的内核,就像国内的手机操作系统都是基于Android修改开发的一样。
总结:兼容移动端主流浏览器,处理 Webkit 内核浏览器即可

2.手机屏幕现状

移动端设备屏幕尺寸非常多,碎片化严重
Android 设备有多种分辨率:480x800,480x854,540x960,720x1280,1080x1920等,还有传说中的2K,4k屏
近年来 iPhone 的碎片化也加剧了,其设备的主要分辨率有:640x960,640x1136,750x1334,1242x2208等
作为开发者无需关注这些分辨率,因为我们常用的尺寸单位是px

3.常见移动端屏幕尺寸

设备尺寸(英寸)开发尺寸(px)物理像素比(dpr)
iphone3G3.5320*4801.0
iphone4/4s3.5320*4802.0
iphone5/5s/5c4.0320*5682.0
HTC One M84.5360*6403.0
iphone64.7375*6672.0
Nexus 44.7384*6402.0
Nexus 5x5.2411*7312.6
iphone6 Plus5.5414*7363.0
Samsung Galaxy Note 45.7480*8533.0
Sony Xperia Z UItra6.4540*9602.0
Nexus 7 ('12)7.0600*9601.3
iPad Mini7.9768*10241.0

注:以上数据均参考自Material Design
注:作为前端开发,不建议大家去纠结dp,dpi,pt,ppi等单位

4.移动端调试方法

  • Chrome DevTools (谷歌浏览器)的模拟手机调试
  • 搭建本地 web 服务器,手机和服务器一个局域网内,通过手机访问服务器
  • 使用外网服务器,直接 IP 或域名访问

5.移动端总结

  • 移动端浏览器我们主要对webkit内核进行兼容
  • 我们现在开发的移动端主要针对手机端开发
  • 现在移动端碎片化比较严重,分辨率和屏幕尺寸大小不一
  • 学会用谷歌浏览器模拟手机界面以及调试
     

视口

视口( viewport)就是浏览器显示页面内容的屏幕区域。视口可以分为布局视口、视觉视口和理想视口

1.布局视口 layout viewport

  • 一般移动设备的浏览器都默认设置了一个布局视口,用于解决早期的PC端页面在手机上显示的问题
  • iOS,Android 基本都将这个视口分辨率设置为 980px,所以 PC 上的网页大多都能在手机上呈现,只不过元素看上去很小,一般默认可以通过手动缩放网页

2.视觉视口 visual viewport

  • 字面意思,它是用户正在看到的网站的区域。注意:是网站的区域
  • 我们可以通过缩放去操作视觉视口,但不会影响布局视口,布局视口仍保持原来的宽度

3.理想视口 ideal viewport

  • 为了使网站在移动端有最理想的浏览和阅读宽度而设定
  • 理想视口,对设备来讲,是最理想的视口尺寸
  • 需要手动添写 meta 视口标签通知浏览器操作
  • meta 视口标签的主要目的:布局视口的宽度应该与理想视口的宽度一致,简单理解就是设备有多宽,我们布局的视口就多宽

4.视口总结

  • 视口就是浏览器显示页面内容的屏幕区域
  • 视口分为布局视口、视觉视口和理想视口
  • 我们移动端布局想要的是理想视就是手机屏幕有多宽,我们的布局视口就有多宽
  • 想要理想视口,我们需要给我们的移动端页面添加 meta 视口标签

5.meta 视口标签

<meta name="viewport" content="width=device-width, 
      user-scalable=no, initial-scale=1.0, 
      maximum-scale=1.0, minimum-scale=1.0">
属性解释说明
width宽度设置的是 viewport 宽度,可以设置 device-width 特殊值
initial-scale初始缩放比,大于 0 的数字
maximum-scale最大缩放比,大于 0 的数字
minimum-scale最小缩放比,大于 0 的数字
user-scalable用户是否可以缩放,yes 或 no( 1 或 0 )

6.标准的viewport设置

视口宽度和设备保持一致
视口的默认缩放比例 1.0 不允许用户自行缩放
最大允许的缩放比例 1.0
最小允许的缩放比例 1.0

二倍图

1.物理像素 & 物理像素比

  • 物理像素点指的是屏幕显示的最小颗粒,是物理真实存在的。这是厂商在出厂时就设置好了,比如苹果6\7\8 是750*1334
  • 我们开发时候的 1px 不是一定等于 1 个物理像素的
  • PC端页面,1个 px 等于1个物理像素的,但是移动端就不尽相同
  • 一个 px 的能显示的物理像素点的个数,称为 物理像素比 或 屏幕像素比 
  • PC端 和 早前的手机屏幕/普通手机屏幕: 1CSS像素 = 1物理像素的
  • Retina(视网膜屏幕)是一种显示技术,可以将把更多的物理像素点压缩至一块屏幕里,从而达到更高的分辨率,并提高屏幕显示的细腻程度。

2.多倍图

  • 对于一张 50px * 50px 的图片,在手机 Retina 屏中打开,按照刚才的物理像素比会放大倍数,这样会造成图片模糊
  • 在标准的 viewport 设置中,使用倍图来提高图片质量,解决在高清设备中的模糊问题
  • 通常使用二倍图,因为 iPhone 6\7\8 的影响,但是现在还存在3倍图4倍图的情况,这个看实际开发公司需求
  • 背景图片 注意缩放问题
/* 在 iphone8 下面 */
img {
    /* 原始图片 100*100px */
    width: 50px;
    height: 50px;
}
.box{
    /* 原始图片 100*100px */
    background-size: 50px 50px;
}

3.背景缩放 background-size

background-size 属性规定背景图像的尺寸

/* background-size: 背景图片宽度 背景图片高度; */

/* 只写一个参数 肯定是宽度 高度省略了 会等比例缩放 */
background-size: 500px 200px;

/* 里面的单位可以跟 % 相对于父盒子来说的 */
background-size: 50%;

/* cover 要完全覆盖 div 盒子 可能有部分背景图片显示不全 */
background-size: cover;

/* contain 高度和宽度等比例拉伸 当宽度 或者高度 铺满 div 盒子就不再进行拉伸了 */
background-size: contain;
  • 单位:长度|百分比|cover |contain;
  • cover 把背景图像扩展至足够大,以使背景图像完全覆盖背景区域
  • contain 把图像图像扩展至最大尺寸,以使其宽度和高度完全适应内容区域

移动端开发选择

1.移动端主流方案

  1. 1.单独制作移动端页面(主流)
    京东商城手机版
    淘宝触屏版
    苏宁易购手机版
  2. 2.响应式页面兼容移动端(其次)
    三星手机官网等

2.单独移动端页面(主流)

通常情况下,网址域名前面加 m(mobile) 可以打开移动端。通过判断设备,如果是移动设备打开,则跳到移动端页面

3.响应式兼容PC移动端

三星电子官网:www.samsuna.com/cn/,诵讨判断屏幕宽度来改变样式,以活应不同终端
缺点:制作麻烦,需要花很大精力去调兼容性问题

移动端技术解决方案

1.移动端浏览器

移动端浏览器基本以 webkit 内核为主,因此我们就考虑 webkit 兼容性问题
我们可以放心使用 H5 标签 和 CSS3 样式
同时我们浏览器的私有前缀我们只需要考虑添加 webkit 即可

2.CSS初始化 normalize.css

移动端CSS初始化推荐使用normalize.css/

  • Normalize.css:保护了有价值的默认值
  • Normalize.css:修复了浏览器的bug
  • Normalize.css:是模块化的
  • Normalize.css:拥有详细的文档

官网地址: Normalize.css: Make browsers render all elements more consistently.

3.CSS3盒子模型 box-sizing

  • 传统模式宽度计算:盒子的宽度 = CSS中设置的 width + border + padding
  • CSS3盒子模型:盒子的宽度 = CSS中设置的宽度 width 里面包含了 border 和 padding 也就是说,我们的CSS3中的盒子模型,padding 和 border不会撑大盒子了
/* css3盒子模型 */
box-sizing: border-box;
/* 传统盒子模型 */
box-sizing: content-box;

如何选择传统盒子模型还是CSS3盒子模型

  • 移动端可以全部 CSS3 盒子模型
  • PC端 如果完全需要兼容,我们就用传统模式,如果不考虑兼容性,我们就选择 CSS3 盒子模型

4.特殊样式

/* CSS3 盒子模型 */
box-sizing: border-box;
-webkit-box-sizing: border-box;
/* 点击高亮我们需要清除 设置为transparent 完成透明 */
-webkit-tap-highlight-color: transparent;
/* 在移动端浏览器默认的外观在 ios 上加上这个属性才能给按钮和输入框自定义样式 */
-webkit-appearance: none;
/* 禁用长按页面时的弹出菜单 */
img, a {
    -webkit-touch-callout: none;
}

移动端常见布局

移动端技术选项

移动端布局和以前我们学习的PC端有所区别:

  1. 单独制作移动端页面(主流)
    流式布局(百分比布局)
    flex弹性布局(强烈推荐)
    less+rem+媒体查询布局
    混合布局
  2. 响应式页面兼容移动端(其次)
    媒体查询
    bootstarp

1.流式布局(百分比布局)

  • 流式布局,就是百分比布局,也称非固定像素布局
  • 通过盒子的宽度设置成百分比来根据屏幕的宽度来进行伸缩,不受固定像素的限制,内容向两侧填充
  • 流式布局方式是移动 web 开发使用的比较常见的布局方式
  • max-width 最大宽度(max-height最大高度)
  • min-width 最小宽度(min-height最小高度)
常见初始化样式
body {
    margin: 0 auto;
    min-width: 320px;
    max-width: 640px;
    background: #fff;
    font-size: 14px;
    font-family: -apple-system, Helvetica, sans-serif;
    line-height: 1.5;
    color: #666;
}

二倍精灵图做法

  • 在 firework 里面把精灵图等比例缩放为原来的一半
  • 之后根据大小测量坐标
  • 注意代码里面 background-size 也要写:精灵图原来宽度的一半

DPG图片压缩技术
京东自主研发推出DPG图片压缩技术,经测试该技术,可直接节省用户近50%的浏览流量,极大的提升了用户的网页打开速度。能够兼容jpeg,实现全平台、全部浏览器的兼容支持,经过内部和外部上万张图片的人眼浏览测试后发现,压缩后的图片和webp的清晰度对比没有差距
 webp图片格式
谷歌开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器宽带资源和数据空间

2.flex 布局

1.传统布局与flex布局

  1. 传统布局
    兼容性好
    布局繁琐
    局限性,不能再移动端很好的布局
  2. flex 弹性布局
    操作方便,布局极为简单,移动端应用很广泛
    PC 端浏览器支持情况较差
    IE 11或更低版本,不支持或仅部分支持

建议:

  1. 如果是PC端页面布局,我们还是传统布局。
  2. 如果是移动端或者不考虑兼容性问题的PC端页面布局,我们还是使用flex弹性布局

初体验

<style>
    div {
        display: flex;
        width: 80%;
        height: 300px;
        background-color: pink;
        justify-content: space-around;
    }
    div span {
        /* width: 150px; */
        height: 100px;
        background-color: purple;
        margin-right: 5px;
        flex: 1;
    }
</style>
<div>
    <span>1</span>
    <span>2</span>
    <span>3</span>
</div>

2.flex 布局原理

flex 是 flexible Box 的缩写,意为"弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为 flex 布局

  • 当我们为父盒子设为 flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效
  • 伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 = flex布局

采用 Flex 布局的元素,称为 Flex 容器( flex container ),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目( flex item ),简称"项目"

  • 体验中 div 就是 flex 父容器
  • 体验中 span 就是子容器 flex 项目
  • 子容器可以横向排列也可以纵向排列

总结 flex 布局原理:就是通过给父盒子添加 flex 属性,来控制子盒子的位置和排列方式

3.flex 布局父项常见属性

1.常见父项属性

以下由6个属性是对父元素设置的

  • flex-direction:设置主轴的方向
  • justify-content:设置主轴上的子元素排列方式
  • flex-wrap:设置子元素是否换行
  • align-content:设置侧轴上的子元素的排列方式(多行)
  • align-items:设置侧轴上的子元素排列方式(单行)
  • flex-flow:复合属性,相当于同时设置了 flex-direction 和 flex-wrap
2.flex-direction 设置主轴的方向

1.主轴与侧轴
在flex布局中,是分为主轴和侧轴两个方向,同样的叫法有:行和列、x轴和y轴
默认主轴方向就是 x 轴方向,水平向右
默认侧轴方向就是 y 轴方向,水平向下

2.属性值

flex-direction 属性决定主轴的方向(即项目的排列方向)
注意:主轴和侧轴是会变化的,就看 flex-direction 设置谁为主轴,剩下的就是侧轴。而我们的子元素是跟着主轴来排列的

属性值说明
row默认值从左到右
row-reverse从右到左
column从上到下
column-reverse从下到上
3 justify-content 设置主轴上的子元素排列方式

justify-content 属性定义了项目在主轴上的对齐方式
注意:使用这个属性之前一定要确定好主轴是哪个

属性值说明
flex-start默认值 从头部开始 如果主轴是 x轴,则从左到右
flex-end从尾部开始排列
center在主轴居中对齐(如果主轴是 x轴 则水平居中)
space-around平分剩余空间
space-between先两边贴边 再平分剩余空间(重要)
4.flex-wrap 设置子元素是否换行

默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap 属性定义,flex 布局中默认是不换行的
 

属性值说明
nowrap默认值,不换行
wrap换行
5.align-items 设置侧轴上的子元素排列方式(单行)

该属性是控制子项在侧轴(默认是 y轴)上的排列方式 在子项为单项的时候使用

属性值说明
flex-start从上到下
flex-end从下到上
center挤在一起居中(垂直居中)
stretch拉伸(默认值)
6.align-content 设置侧轴上的子元素的排列方式(多行)

设置子项在侧轴上的排列方式并且只能用于子项出现换行的情况(多行),在单行下是没有效果的

属性值说明
flex-start默认值在侧轴的头部开始排列
flex-end在侧轴的尾部开始排列
center在侧轴中间显示
space-around子项在侧轴平分剩余空间
space-between子项在侧轴先分布在两头,再平分剩余空间
stretch设置子项元素高度平分父元素高度

align-content 和 align-items 区别

  • align-items 适用于单行情况下,只有上对齐、下对齐、居中 和 拉伸
  • align-content 适应于 换行(多行)的情况下(单行情况下无效),可以设置上对齐、下对齐、居中、拉伸以及平均分配剩余空间等属性值
  • 总结就是单行找 align-items 多行找 align-content
7.flex-flow 简写
/* flex-flow 属性是 flex-direction 和 flex-wrap 属性的复合属性 */
flex-flow: row wrap;

4.flex 布局子项常见属性

  • flex 子项目占的份数
  • align-self 控制子项臼己在侧轴的排列方式
  • order 属性定义子项的排列顺序(前后顺序)
1.flex 属性

flex 属性定义子项目分配剩余空间,用 flex 来表示占多少份数

.item {
    flex: <number>;
    /* default 0 */
}
2.align-self 控制子项自己在侧轴上的排列方式

align-self 属性允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性
默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,则等同于 stretch

span: nth-child(2) {
    /* 设置自己在侧轴上的排列方式 */
    align-self: flex-end;
}
3.order 属性定义项目的排列顺序

数值越小,排列越靠前,默认为0
注意∶和z-index不一样

拓展:背景线性渐变

/* 语法1 */
/* background: linear-gradient(起始方向, 颜色1, 颜色2, ...); */
/* 背景渐变必须添加浏览器私有前缀 */
/* 起始方向可以是: 方位名词或者度数,如果省略默认就是 top */
background: -webkit-linear-gradient(left, red ,blue);
background: -webkit-linear-gradient(left top, red, bule);

rem 基础

rem 单位

rem (root em) 是一个相对单位,类似于 em , em 是父元素字体大小。不同的是 rem 的基准是相对于 html 元素的字体大小
比如,根元素( html )设置 font-size=12px; 非根元素设置 width: 2rem; 则换成 px 表示就是 24px

vm / vh

目标:能够使用 vw 单位 设置网页元素的尺寸

  • 相对单位
  • 相对视口的尺寸计算结果
  • vw:viewport width
    1vw = 1/100 视口宽度
  • vh:viewport height
    1vh = 1/100 视口高度

vw适配原理

目标:实现在不同宽度的设备中,网页元素尺寸等比缩放效果

vm单位尺寸

  • 确定设计稿对应的 vw 尺寸 ( 1/100 视口宽度)
    查看设计稿宽度 -> 确定参考设备宽度(视口宽度) -> 确定 vw 尺寸 ( 1/100 视口宽度)
  • vw 单位的尺寸 = px单位数值 / ( 1/100 视口宽度)

vmin / vmax

  • vmin 可以照顾手机端横屏和竖屏的显示效果
  • vh 和 vm 与视口的高度和宽度有关 1vw 就是视口的宽度的 1%
  • vmin 和 vmax 是与当下屏幕的宽度和高度的最大值或最小值有关取决于哪个更大和更小

媒体查询

1.什么是媒体查询

媒体查询( Media Query )是 CSS3 新语法

  • 使用 @media 查询,可以针对不同的媒体类型定义不同的样式
  • @media 可以针对不同的屏幕尺寸设置不同的样式
  • 当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面
  • 目前针对很多苹果手机、Android手机,平板等设备都用得到多媒体查询

2.语法规范

@media mediatype and|not|only (media feature) {
    CSS-Code;
}
  • 用 @media 开头注意 @ 符号
  • mediatype 媒体类型
  • 关键字and not only
  • media feature 媒体特性 必须有小括号包含

1. mediatype 查询类型

将不同的终端设备划分成不同的类型,称为媒体类型

解释说明
all用于所有设备
print用于打印机和打印预览
scree用于电脑屏幕,平板电脑,智能手机等

2.关键字

关键字将媒体类型或多个媒体特性连接到一起做为媒体查询的条件

  • and:可以将多个媒体特性连接到一起,相当于“且”的意思
  • not:排除某个媒体类型,相当于“非”的意思,可以省略
  • only:指定某个特定的媒体类型,可以省略

3.媒体特性

每种媒体类型都具体各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格。我们暂且了解三个。注意他们要加小括号包含

解释说明
width定义输出设备中页面可见区域的宽度
min-width定义输出设备中页面最小可见区域宽度
max-width定义输出设备中页面最大可见区域宽度
/* 这句话的意思就是: 在我们屏幕上 并且 最大的宽度是 800像素 设置我们想要的样式 */
/* max-width 小于等于 800 */
@media screen and (max-width: 800px) {
    body {
        background-color: pink;
    }
}
/* 媒体查询可以根据不同的屏幕尺寸在改变不同的样式 */
@media screen and (max-width: 500px) {
    body {
        background-color: purple;
    }
}

3.媒体查询 + rem 实现元素动态大小变化

rem 单位是跟着 html 来走的,有了 rem 页面元素可以设置不同大小尺寸媒体查询可以根据不同设备宽度来修改样式
媒体查询 + rem 就可以实现不同设备宽度,实现页面元素大小的动态变化

/* 从小到大的顺序 */
@media screen and (min-width: 320px) {
    html {
        font-size: 50px;
    }
}
@media screen and (min-width: 640px) {
    html {
        font-size: 100px;
    }
}
.box {
    height: 1rem;
    font-size: 0.5rem;
    background-color: green;
    color: #fff;
}

4.引入资源

当样式比较繁多的时候,我们可以针对不同的媒体使用不同 stylesheets (样式表)。原理,就是直接在 link 中判断设备的尺寸,然后引用不同的 css 文件

语法规范

<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="mystylesheet.css">
<link rel="stylesheet" href="style320.css" media="screen and (min-width: 320px)">
<link rel="stylesheet" href="style640.css" media="screen and (min-width: 640px)">

Less 基础

1.维护 css 的弊端

CSS 是一门非程序式语言,没有变量、函数、SCOPE (作用域)等概念

  • CSS 需要书写大量看似没有逻辑的代码,CSS 冗余度是比较高的
  • 不方便维护及扩展,不利于复用
  • CSS 没有很好的计算能力
  • 非前端开发工程师来讲,往往会因为缺少 CSS 编写经验而很难写出组织良好且易于维护的 CSS 代码项目

2.Less 介绍

Less (leaner Style Sheets的缩写) 是一门 CSS 扩展语言,也成为 CSS 预处理器
做为 CSS 的一种形式的扩展,它并没有减少 CSS 的功能,而是在现有的 CSS 语法上,为 CSS 加入程序式语言的特性
它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,Less 可以让我们用更少的代码做更多的事情
Less中文网址:Less.js 中文网
常见的 CSS 预处理器: Sass、Less、Stylus

一句话:Less 是一门 CSS 预处理语言,它扩展了 CSS 的动态特性

3.Less 使用

我们首先新建一个后缀名为 less 的文件,在这个 less 文件里面书写 less 语句

  • Less 变量
  • Less 编译
  • Less 嵌套
  • Less 运算

4.Less 变量

变量是指没有固定的值,可以改变的。因为我们 CSS 中的一些颜色和数值等经常使用

@变量名: 值;

1.变量命名规范

  • 必须有 @ 为前缀
  • 不能包含特殊字符
  • 不能以数字开头
  • 大小写敏感
// 定义一个粉色的变量
@color: deeppink;
// 错误的变量名 @1color  @ color~@#
// 变量名区分大小写 @color 和 @Color 是两个不同的变量
// 定义了一个 字体为14像素的变量
@font14: 14px;
body {
    background-color: @color;
}
div {
    color: @color;
    font-size: @font14;
}
a {
    font-size: @font14;
}

5.Less 编译

本质上,Less 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件
所以,我们需要把我们的 less文件,编译生成为 css 文件,这样我们的 html 页面才能使用

vocode Less 插件

Easy LESS 插件用来把 less 文件编译为 css 文件
安装完毕插件,重新加载下 vscode。只要保存一下 Less 文件,会自动生成 CSS 文件

6.Less 嵌套

我们经常用到选择器的嵌套

#header .logo {
    width: 300px;
}

Less 嵌套写法

#header {
    .logo {
        width: 300px;
    }
}

如果遇见(交集|伪类|伪元素选择器)

  • 内层选择器的前面没有 & 符号,则它被解析为父选择器的后代
  • 如果有 & 符号,它就被解析为父元素自身或父元素的伪类
.nav .logo {
    color: green;
}
.nav::before {
    content: "";
}
/* less 的写法 */
.nav{
    .logo {
        color: green;
    }
    &::before {
        content: "";
    }
}

7.Less 运算

任何数字、颜色或者变量都可以参与运算。就是 Less 提供了加( + )、减( - )、乘( * )、除( / )算术运算

/* Less 里面写 */
@width: 10px + 5;
div {
    border: @width solid red;
}
/* 生成的 css */
div {
    border: 15px solid red;
}
/* Less 甚至还可以这样 */
width: (@width + 5) * 2;
  • 乘号( * )和除号( / )的写法
  • 运算符中间左右有个空格隔开 1px + 5
  • 对于两个不同的单位的值之间的运算,运算结果的值取第一个值的单位
  • 如果两个值之间只有一个值有单位,则运算结果就取该单位

rem 适配方案1

  1. 让一些不能等比自适应的元素,达到当设备尺寸发生改变的时候,等比例适配当前设备
  2. 使用媒体查询根据不同设备按比例设置 html 的字体大小,然后页面元素使用 rem 做尺寸单位,当 html 字体大小变化元素尺寸也会发生变化,从而达到等比缩放的适配

1.rem 实际开发适配方案

  1. 按照设计稿与设备宽度的比例,动态计算并设置 html 根标签的 font-size 大小;(媒体查询)
  2. CSS 中,设计稿元素的宽、高、相对位置等取值,按照同等比例换算为 rem 为单位的值

2.rem适配方案技术使用(市场主流)

  1. 技术方案1
    less
    媒体查询
    rem
  2. 技术方案2(推荐)
    flexible.js
    rem

总结:

  1. 两种方案现在都存在
  2. 方案 2 更简单,现阶段大家无需了解里面的 js 代码

3. rem 实际开发适配方案1

rem + 媒体查询 + less 技术

1.设计稿常见尺寸宽度

设备常见宽度
iphone 4.5640px
iphone 678750px
Android

常见320px、360px、375px、384px、400px、414px、500px、720px

大部分4.7~5寸的安卓设备为720px

一般情况下,我们以一套或两套效果图适应大部分的屏幕,放弃极端屏或对其优雅降级,牺牲一些效果
现在基本以750为准

2.动态设置 html 标签 font-size 大小

  1. 假设设计稿是 750px
  2. 假设我们把整个屏幕划分为 15 等份(划分标准不一可以是 20 份 也可以是 10 等份)
  3. 每一份作为 html 字体大小,这里就是 50px
  4. 那么在 320px 设备的时候,字体大小为 320/15 就是 21.33px
  5. 用我们页面元素的大小除以不同的 html 字体大小会发现他们比例还是相同的
  6. 比如我们以 750 为标准设计稿
  7. 一个 100*100 像素的页面元素在 750 屏幕下,就是 100/50 转换为 rem 是 2rem * 2rem 比例是1比1
  8. 320 屏幕下,html 字体大小为 21.33 则 2rem = 42.66px 此时宽和高都是 42.66 但是宽和高的比例还是 1比1
  9. 但是已经能实现不同屏幕下 页面元素盒子等比例缩放的效果

3.元素大小取值方法

  1. 最后的公式:页面元素的 rem 值 = 页面元素值( px ) /(屏幕宽度 / 划分的份数)
  2. 屏幕宽度 / 划分的份数就是 html font-size 的大小
  3. 或者:页面元素的 rem 值 = 页面元素值( px ) / html font-size 字体大小
// 新建一个 common.less 的文件
// 设置常见的屏幕尺寸 修改里面的 html 文字大小
// 从小到大定义,PC端放最上面
html {
    font-size: 50px;
}
// 我们此次定义的划分的份数 为 15
@no: 15;
@media screen and (min-width: 320px) {
    html {
        font-size: 320px / @no;
    }
}
@media screen and (min-width: 360px) {
    html {
        font-size: 360px / @no;
    }
}
@media screen and (min-width: 375px) {
    html {
        font-size: 375px / @no;
    }
}
@media screen and (min-width: 384px) {
    html {
        font-size: 384px / @no;
    }
}
@media screen and (min-width: 400px) {
    html {
        font-size: 400px / @no;
    }
}
@media screen and (min-width: 414px) {
    html {
        font-size: 414px / @no;
    }
}
@media screen and (min-width: 424px) {
    html {
        font-size: 424px / @no;
    }
}
@media screen and (min-width: 480px) {
    html {
        font-size: 480px / @no;
    }
}
@media screen and (min-width: 540px) {
    html {
        font-size: 540px / @no;
    }
}
@media screen and (min-width: 720px) {
    html {
        font-size: 720px / @no;
    }
}
@media screen and (min-width: 750px) {
    html {
        font-size: 750px / @no;
    }
}
// 首页的样式 less 文件
@import "common";
// @import 导入的意思可以把一个样式文件导入到另外一个样式文件里面
// link 是把一个 样式文件引入 html 页面里面

rem 适配方案2

1.简洁高效的 rem 适配方案 flexible.js

手机淘宝团队出的简洁高效移动端适配库
我们再也不需要在写不同屏幕的媒体查询,因为里面 js 做了处理
它的原理是把当前设备划分为 10等份,但是不同设备下,比例还是一致的
我们要做的,就是确定好我们当前设备的 html 文字大小就可以了
比如当前设计稿是 750px,那么我们只需要把 html 文字大小设置为 75px(750px / 10)就可以里面页面元素 rem 值:页面元素的 px 值 / 75
剩余的,让 flexible.js 来去算
github地址:https://github.com/amfe/lib-flexible

<script src="js/flexible.js"></script>

2.VSCode px转换 rem 插件 cssrem

这是一个神奇的插件

  1. 修改默认字体大小
  2. 打开设置
  3. 点击右上角的更多操作
  4. 在搜索设置搜索"cssrem.rootFontSize"
  5. 默认字体大小为16
  6. 点击左边的复制到设置,如何在右边进行修改
  7. 重启VS Code

响应式开发

1.响应式开发原理 

就是使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的

设备划分尺寸区间
超小屏幕(手机)< 768px
小屏设备(平板)>= 768px ~ < 992px
中等屏幕(桌面显示器)>= 992px ~ < 1200px
宽屏设备(大桌面显示器)>= 1200px

2.响应式布局容器

响应式需要一个父级做为布局容器,来配合子级元素来实现变化效果
原理就是在不同屏幕下,通过媒体查询来改变这个布局容器的大小,再改变里面子元素的排列方式和大小,从而实现不同屏幕下,看到不同的页面布局和样式变化

平时我们的响应式尺寸划分

  • 超小屏幕(手机,小于768px):设置宽度为 100%
  • 小屏幕(平板,大于等于768px):设置宽度为 750px
  • 中等屏幕(桌面显示器,大于等于992px):宽度设置为 970px
  • 大屏幕(大桌面显示器,大于等于1200px):宽度设置为 1170px

Bootstrap 前端开发框架

1.Bootstrap 简介

Bootstrap 来自 Twitter(推特),是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和 JAVASCRIPT 的,它简洁灵活,使得 Web 并发更加快捷

框架:顾名思义就是一套架构,它有一套比较完整的网页功能解决方案,而且控制权在框架本身,有预制样式库、组件和插件。使用者要按照框架所规定的某种规范进行开发

2.Bootstrap 简介

1.优点

  • 标准化的 html + css 编码规范
  • 提供了一套简洁、直观、强悍的组件
  • 有自己的生态圈,不断的更新迭代
  • 让开发更简单,提高了开发的效率

2.版本

  • 2.x.x:停止维护,兼容性好,代码不够简洁,功能不够完善
  • 3.x.x:目前使用最多,稳定,但是放弃了 IE6-IE7。对 IE8 支持但是界面效果不好,偏向用于开发响应式布局、移动设备优先的WEB项目
  • 4.x.x:最新版,目前还不是很流行

3.Bootstrap 使用

在现阶段我们还没有接触 JS 相关课程,所以我们只考虑使用它的样式库
控制权在框架本身,使用者要按照框架所规定的某种规范进行开发
Bootstrap使用四步曲:

  1. 创建文件夹结构
  2. 创建html骨架结构
  3. 引入相关样式文件
  4. 书写内容

4.布局容器

Bootstrap 需要为页面内容和栅格系统包裹一个 .container 容器,Bootstarp 预先定义好了这个类,叫 .container 它提供了两个作此用处的类

1.container 类

  • 响应式布局的容器固定宽度
  • 大屏 ( >= 1200px) 宽度定为 1170px
  • 中屏 ( >=992px) 宽度定为 970px
  • 小屏 ( >=768px) 宽度定为 750px
  • 超小屏(100%)

2.container-fluid 类

  • 流式布局容器百分百宽度
  • 占据全部视口( viewport )的容器
  • 适合于单独做移动端开发

Bootstrap 栅格系统

1.栅格系统简介

栅格系统英文为 “gridsystems”,也有人翻译为“网格系统”,它是指将页面布局划分为等宽的列,然后通过列数的定义来模块化页面布局
Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口( viewport )尺寸的增加,系统会自动分为最多12列
Bootstrap 里面 container 宽度是固定的,但是不同屏幕下,container 的宽度不同,我们再把container 划分为12等份

2.栅格选项参数

栅格系统用于通过一系列的行( row )与列( column )的组合来创建页面布局,你的内容就可以放入这些创建好的布局中

超小屏幕(手机)
< 768px
小屏设备(平板)
>= 768px

中等屏幕(桌面显示器)

>= 992px

宽屏设备(大桌面显示器)

>= 1200px

.container 最大宽度自动(100%)750px970px1170px
类前缀.col-xs-.col-sm-.col-md-.col-lg-
列(column)数12
  • 行( row )必须放到 container 布局容器里面
  • 我们实现列的平均划分 需要给列添加 类前缀
  • xs-extra small: 超小; sm-small: 小; mi-medium: 中等; lg-large: 大;
  • 列( column )大于 12,多余的“列( column )”所在的元素将被作为一个整体另起一行排列
  • 每一列默认有左右 15 像素的 padding
  • 可以同时为一列指定多个设备的类名,以便划分不同份数例如 class="col-md-4 col-sm-6"

3.列嵌套

栅格系统内置的栅格系统将内容再次嵌套。简单理解就是一个列内再分成若干份小列。我们可以通过添加一个新的 .row 元素和一系列 .col-sm-* 元素到已经存在的 .col-sm-* 元素内
我们列嵌套最好加 1 个行 row 这样可以取消父元素的 padding 值而且高度自动和父级一样高

<!-- 列嵌套 -->
<div class="col-sm-4">
    <div class="row">
        <div class="col-sm-6">小列</div>
        <div class="col-sm-6">小列</div>
    </div>
</div>

4.列偏移

使用 .col-md-offset-* 类可以将列向右侧偏移。这些类实际是通过使用 * 选择器为当前元素增加了左侧的边距( margin )
 

<!-- 列偏移 -->
<div class="row">
    <div class="col-lg-4">1</div>
    <div class="col-lg-4 col-lg-offset-4">2</div>
</div>

5.列排序

通过使用 .col-md-push-* 和 .col-md-pull-* 类就可以很容易的改变列( column )的顺序

<!-- 列排序 -->
<div class="row">
    <div class="col-lg-4 col-lg-push-8">左侧</div>
    <div class="col-lg-8 col-lg-pull-4">右侧</div>
</div>

6.响应式工具

为了加快对移动设备友好的页面开发工作,利用媒体查询功能,并使用这些工具类可以方便的针对不同设备展示或隐藏页面内容

类名超小屏小屏中屏大屏
.hidden-xs隐藏可见可见可见
.hidden-sm可见隐藏可见可见
.hidden-md可见可见隐藏可见
.hidden-lg可见可见可见隐藏

与之相反的,是 visible-xs visible-sm visible-md visible-lg 是显示某个页面内容
Bootstrap其他(按钮、表单、表格)请参考Bootstrap文档

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值