为了适应各种移动端设备,完美呈现现应有的布局效果,各个移动端设备,分辨率大小不一致,网页想铺满整个屏幕,并在各种分辨下等比缩放。常见适配方案如: 固定高度宽度自适应
、固定宽度,viewport等比缩放
、Rem适配
、像素比适配
、vw适配
、媒体查询
等。
单位
px像素
px是固定单位,不会随着视口大的大小而变化em
相对于当前元素字体大小,当前元素未设置字体大小则继承父级字体大小 默认 1em=16px em作为font-size使用时,相对于父元素字体大小 em作为宽高等其他属性使用时 相对于自身字体大小 例如默认font-size:2em;width:2em; // width为64px
rem
相对于根元素(html)字体大小的单位,会随着根元素字体大小的变化而变化,默认1rem为16pxvw
和vh
相对于屏幕(可视窗口宽度)宽度100vw
和高度100vh
vmin
是指vw和vh中最小的那个,vmax
是vw和vh中最大的那个百分比
动态单位,以当前元素的父元素作为参考进行计算
适配方案
- 固定高度,宽度自适应(百分比,flex布局)或者响应式
高度固定(单位可以是px 百分比 auto) 常用flex布局或百分比宽度
- 固定宽度,viewport等比缩放
设计图的宽度就是网页显示的宽度,动态改变视口的缩放比例,页面宽度写死
1 | // 弊端: 统一宽度之后 无法做响应式,富文本编辑器上传的内容也会被缩放 |
- Rem做宽度自适应,窗口为设备宽度
根据屏幕的分辨率,动态设置html的文字大小,达到等比缩放的功能
1 | (function(win){ |
- 像素比适配(rem做宽度,viewport缩放)
物理像素(设备像素)--手机屏幕分辨率 独立像素(css像素)--屏幕宽度
像素比 =物理像素 / 独立像素 window.devicePixelRatio
1 | var dpr = window.devicePixelRatio; |
- 直接给
html
设置font-size:13.33333vw
需要给body设置初始字体大小
1 | // body{ font-size:12px } |
移动端横竖屏切换
window.orientation
竖屏为0 横屏为90或-90
1 | function set_html_fontsize() { |
媒体查询
max-device-width
和max-width
的区别1
2
3
4
5
6/* 1、max-device-width是设备整个显示区域的宽度,例如,真实的设备屏幕宽度。
2、max-width是目标显示区域的宽度,例如,浏览器宽度。
3、如果使用max-device-width,那么在PC浏览器上浏览网页时,缩小或放大浏览器时是不执行CSS的,因为“PC设备”没有变化。但如果使用max-width,缩小或放大浏览器时是执行CSS的,因为“显示区域”即浏览器大小发生了变化。
4、如果使用max-device-width,那么当手机由竖变横时,CSS是不执行的,因为“手机宽度”并没有变化。如果使用max-width,那么当手机由竖变横时,CSS是执行的,因为“显示区域”发生了变化。
5、通常,面向“移动设备”用户使用max-device-width;面向“PC设备”用户使用max-width。
*/link标签
<link rel="stylesheet" type="text/css" media="screen and (max-width:767px)" href="phone.css" />
如果屏幕宽度小于767像素(max-width:767px
)就加载phone.css
文件<link rel="stylesheet" type="text/css" media="screen and (min-width:768px)" href="phone.css" />
如果屏幕宽度大于768像素(min-width:768px
)就加载pc.css
文件css @media
媒体查询(不同屏幕大小使用不同的样式)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23.d1{
width:200px;
height:600px;
background:#000;
}
/* 超小屏幕 手机> */
@media (max-width:768px){
.d1{ background:skyblue; }
}
/* 小屏幕 平板 */
@media (min-width:768px) and (max-width:992px){
.d1{ background:#999; }
}
/* 中等屏幕 桌面显示器 */
@media (min-width:992px) and (max-width:1200px){
.d1{ background:blue; }
}
/* 大屏幕 大桌面显示器> */
@media (min-width:1200px){
.d1{ background:pink; }
}