@duanyubin
2016-03-29T10:12:42.000000Z
字数 2230
阅读 557
移动开发
参见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);
}