@duanyubin
2016-03-29T10:12:42.000000Z
字数 2230
阅读 640
移动开发
参见PPT41-47页
1. 设备像素: 设备屏幕的物理像素,任意设备物理像素数量固定
2. css像素 : 为web创造的,css和js中使用的一个抽象层
实际情况中,几乎从来用不到设备像素,某些设备可以通过
screen.width/height获取,但是存在严重的兼容问题
结论: 用户放大的越大,一个css像素覆盖的设备像素就越多
正常状态:
放大页面:![]()
缩小页面:![]()
由于最早的手机浏览器都要考虑显示针对桌面浏览器开发的网站,所以才有了如下的区分
参见PPT3-15页



结论: 桌面浏览器中,viewport为浏览器可视区域;手机浏览器中,viewport不等于可视区域
原因: 桌面浏览器中,放大缩小浏览器界面,会导致页面重新排列,但是由于手机的性能或出于省电这样的考虑,移动端放大缩小页面,不会导致页面重排,这就需要区分两个概念布局视图和视觉视图
<meta name="viewport" content="width=320">中的width一值声明document.documentElement.clientWidth获取宽度 
window.innerWidth获取宽度 
<meta name="viewport" content="width=device-width">设置布局视图为理想视图的宽度作用: 针对特性宽度的屏幕,显示特性的css样式
例如: 在当前一般的移动页面中,都是采用rem为单位实现页面,但是如果字体也使用rem的话,导致视觉上出现在iphone5上字号过小,而在iphone6plus上字号过大的情况。
.px2px(@name, @px){@media screen{@media (max-width: 321px){@{name}: @px * 1px;}@media (min-width: 321px){@media(max-width: 400px){@{name}: round(@px + 1) * 1px;}}@media(min-width: 400px){@{name}: round(@px + 3) * 1px;}}}// 使用.px2px(font-size, 32);
假设页面如此声明<meta name="viewport" content="width=device-width">, 此时css中的1px边框,实际上占据1*dpr的物理像素。
.border(@bdv, @w, @s, @c){@{bdv}: @w @s @c;.iosx2 &{@{bdv}: @w/2 @s @c;}.iosx3 &{@{bdv}: @w/2.8 @s @c;}}
<meta name="viewport" content="width=750">
// css.row {margin: 10px;}
<meta name="viewport" content="width=device-width">
// css.row {margin: 10px 10%;}
<meta name="viewport" content="width=device-width">
// css.row {margin: .1rem;}
// html<div class="container"><div class="sidebar"></div><div class="content"><header></header><section></section><footer></footer></div></div>// css.container {display: flex;height: 100%;}.sidebar{width: 100px;}.content {display: flex;flex-direction: column;flex-grow: 1;}header {.px2px(height, 20);}section {// display: flex;flex-grow: 1;}footer {.px2px(height, 30);}