一个页面适配多种设备和多个屏幕
视口
viewport
,浏览器中用于呈现网页的区域,视口通常并不等于屏幕大小,特别是可以缩放浏览器窗口的情况下。
手机端与PC
端视口存在差异,电脑端的视口宽度等于分辨率,而移动端的视口宽度跟分辨率没有关系,宽度默认值是设备厂家指定的。iOS
, Android
基本都将这个视口分辨率设置为 980px。
语法
html
1 | <meta name='viewport' content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/> |
width=device-width
:视口为设备宽度,手机厂商设置或默认 980pxinitial-scale=1.0
:初始化的视口大小为 1.0 倍maxmum-scale=1.0
:最大的倍数是 1.0 倍user-scalable=no
:不允许缩放视口
手机浏览器内核
- 微软
Trident
- 火狐
Gecko
- 开源内核
Webkit
- Opera
Presto
Webkit 内核的适用范围则较为广泛,Android 原生浏览器、苹果的 Safari、谷歌 Chrome(Android4.0 使用)都是基于 Webkit 开源内核开发的。
1 | 浏览器兼容前缀 |
媒体查询
针对特定的设备或条件为网页应用特定的 css 样式。
语法
媒体查询外面写的第一条规则是基本的样式,适用于任何设备,然后为不同的视口,不同能力的设备,添加不同效果。
需要配合视口使用
1 | body { |
screen
表示看这个网页的设备是显示器,而不是残疾人听力设备、也不是打印机。后面用 and 符号匹配可能性。
rem 响应式布局
rem:当前页面中元素的REM
单位的样式值都是针对于HTML
元素的font-size
的值进行动态计算的。
em:表示当前父元素的字号的倍数。
1 | <div style='font-size:10px'> |
rem
可以和媒体查询配合实现响应式布局
1 | @media screen and (min-width: 320px) { |
流式布局
分比布局也叫作流式布局、弹性盒布局。
使用百分比设置width
,height
,padding
,margin
运用场景
如果移动端和 PC 端公用一套代码,建议使用流式布局。
如何做一个 REM 响应式布局
- 从
UI
设计师拿到PSD
设计稿,然后在样式中给 HTML 设定一个font-size
的值,我们一般都设置一个方便后面计算的值,例如:100px
1 | html{ |
首先按照设计稿的尺寸来写样式,把得到的像素值除以
100
计算出对应的REM
值。
值得注意的是:真实项目中外层盒子的宽度我们一般还是不写固定值,沿用流式布局法的思想,我们用百分比的方式布局。1
2margin:0 0.2rem;
height:3rem;根据当前屏幕宽度和设计稿的宽度来计算出
font-size
的值。
例如:设计稿宽度为 640px,其中有一个部分是轮播图,它的尺寸是 600*300,在样式中给 HTML 设定一个font-size
的值为 100px,则轮播图大小应该为 6rem×3rem,那如果手机屏幕宽度为 375px,其font-size
应该设置为多少。
1 | 375/640*100->font-size=58.59375//此时轮播图能自适应手机屏幕大小 |
根据当前屏幕宽度和设计稿宽度的比例,动态计算一下当前宽度下的font-size
值应该是多少,如果font-size
的值改变了,之前设定的所有 REM 单位的值自动会跟着放大或者缩小。可以通过以下这段代码实现:
1 | <script> |
但如果当前屏幕宽度大于设计稿宽度,图片会被拉长而失真,所以以上代码需要稍微做些修改:
1 | //html部分 |