Flexible承载的使命
<!-- dpr = 1-->
<meta name="viewport" content="initial-scale=scale,maximum-scale=scale,minimum-scale=scale,user-scalable=no">
<!-- dpr = 2-->
<meta name="viewport" content="initial-scale=0.5,maximum-scale=0.5,minimum-scale=0.5,user-scalable=no">
<!-- dpr = 3-->
<meta name="viewport" content="initial-scale=0.3333333333,maximum-scale=0.3333333333,minimum-scale=0.3333333333,user-scalable=no">
-
根据dpr的值来修改viewport实现1px的线
-
根据dpr的值来修改html的font-size,从而使用rem实现等比缩放
-
使用Hack手段用rem模拟vw特性
先上菜,再唠嗑
品牌
|
型号
|
系统版本
|
分辨率
|
屏幕尺寸
|
手淘APP
|
优酷APP
|
原生浏览器
|
QQ浏览器
|
UC浏览器
|
Chrome浏览器
|
---|
华为
|
Mate9
|
Android7.0
|
1080 x 1920
|
5英寸
|
Yes
|
Yes
|
No
|
Yes
|
Yes
|
Yes
|
华为
|
Mate7
|
Android4.2
|
1080 x 1920
|
5.2英寸
|
Yes
|
Yes
|
No
|
Yes
|
Yes
|
Yes
|
魅族
|
Mx4 (M460 移动4G)
|
Android4.4.2
|
1152 x 1920
|
5.36英寸
|
Yes
|
No
|
No
|
Yes
|
Yes
|
Yes
|
Oppo
|
R7007
|
Android4.3
|
1280 x 720
|
5英寸
|
Yes
|
No
|
No
|
Yes
|
Yes
|
No
|
三星
|
N9008 (Galaxy Note3)
|
Android4.4.2
|
1080 x 1920
|
5.7英寸
|
Yes
|
No
|
Yes
|
Yes
|
Yes
|
Yes
|
华硕
|
ZenFone5(x86)
|
Android4.3
|
720 x 280
|
5英寸
|
No
|
No
|
No
|
Yes
|
No
|
No
|
适配方案
适配终端
-
vw:是Viewport's width的简写,1vw等于window.innerWidth的1%
-
vh:和vw类似,是Viewport's height的简写,1vh等于window.innerHeihgt的1%
-
vmin:vmin的值是当前vw和vh中较小的值
-
vmax:vmax的值是当前vw和vh中较大的值
[w-369]{
width: 369px;
}
[w-369] h2 span {
background: #FF5000;
color: #fff;
display: inline-block;
border-radius: 4px;
font-size: 20px;
text-shadow: 0 2px 2px #FF5000;
padding: 2px 5px;
margin-right: 5px;
}
[w-369] {
width: 49.2vw;
}
[w-369] h2 span {
background: #ff5000;
color: #fff;
display: inline-block;
border-radius: .53333vw;
text-shadow: 0 0.26667vw 0.26667vw #ff5000;
padding: .26667vw .66667vw;
}
[w-369] h2 span,
[w-369] i {
font-size: 2.66667vw;
margin-right: .66667vw;
}
"postcss-px-to-viewport": {
viewportWidth: 750,
viewportHeight: 1334,
unitPrecision: 5,
viewportUnit: 'vw',
selectorBlackList: [],
minPixelValue: 1,
mediaQuery: false
}
-
容器适配,可以使用vw
-
文本的适配,可以使用vw
-
大于1px的边框、圆角、阴影都可以使用vw
-
内距和外距,可以使用vw
[w-188-246] {
width: 188px;
}
[w-187-246]{
width: 187px
}
[aspectratio] {
position: relative;
}
[aspectratio]::before {
content: '';
display: block;
width: 1px;
margin-left: -1px;
height: 0;
}
[aspectratio-content] {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
}
[aspectratio][aspect-ratio="188/246"]{
aspect-ratio: '188:246';
}
[aspectratio][aspect-ratio="188/246"]:before {
padding-top: 130.85106382978725%;
}
解决1px方案
@svg 1px-border {
height: 2px;
@rect {
fill: var(--color, black);
width: 100%;
height: 50%;
}
}
.example {
border: 1px solid transparent;
border-image: svg(1px-border param(--color #00b1ff)) 2 2 stretch;
}
.example {
border: 1px solid transparent;
border-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='2px'%3E%3Crect fill='%2300b1ff' width='100%25' height='50%25'/%3E%3C/svg%3E") 2 2 stretch;
}
@svg square {
@rect {
fill: var(--color, black);
width: 100%;
height: 100%;
}
}
#example {
background: white svg(square param(--color #00b1ff));
}
#example {
background: white url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect fill='%2300b1ff' width='100%25' height='100%25'/%3E%3C/svg%3E");
}
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
降级处理
Viewport不足之处
如何判断自己的应用是否支持
总结