像素基礎知識css
px:css pixels 邏輯像素,瀏覽器使用的抽象單位html
dp(Android),pt(iOS):device independent pixels 設備無關像素,邏輯像素web
dpr:devicePixelRatio 設備像素縮放比數組
DPi:打印機每英寸能夠噴的墨汁點(印刷行業)瀏覽器
PPI:屏幕每英寸的像素數量,即單位英寸內的像素密度app
目前,在計算機顯示設備參數描述上,兩者意思表達的是同樣的。框架
計算公式:以 iPhone5 爲例,dom
ppi = √(11362 + 6402) / 4 = 326 ppiiphone
ldpi | mdpi | hdpi | xhdpi | |
ppi | 120 | 160 | 240 | 320 |
默認縮放比 | 0.75 | 1.0 | 1.5 | 2.0 |
注意:Retina屏(高清屏):dpr 都是大於等於 2 。ide
Viewport
<meta name="viewport" content="name1=value1,name2="value2" />
width:設置佈局 viewport 的特定值("device-width")
initial-scake:設置頁面的初始縮放
minimum-scale:最小縮放
maximum-scale:最大縮放
user-scalable:用戶可否縮放
移動web最佳viewport設置
【佈局viewport】=【設備寬度】=【度量viewport】
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
Flexbox 彈性盒子佈局
不定寬高的水平垂直居中
1 .myoff-wrapper {
2 position: absolute;
3 top: 50%;
4 left: 50px;
5 transform: translate(-50%, -50%);
6 }
【flexbox版】不定寬高的水平垂直居中
1 .parent {
2 display: flex;
3 justify-content: center; /*子元素水平居中*/
4 align-items: center; /*子元素垂直居中*/
5 }
響應式設計
經常使用媒體查詢參數
設計點一:百分比佈局
設計點二:彈性圖片
img {
max-width: 100%;
height: auto;
}
設計點三:從新佈局,顯示與隱藏
注意:常常須要切換位置元素使用【絕對定位】,減小重繪提升渲染性能。
權衡利弊
移動 web 特別樣式處理
width: (w_value / dpr)px;
height: (h_value / dpr)px
li {
/*border-bottom: 0.5px solid #ddd*/
position: relative;
padding: 8px 0 8px 15px;
color: #7c7c7c;
cursor: pointer;
}
li:before {
position: absolute;
top: -1px;
left: 0;
content: "";
width: 100%;
hieght: 1px;
border-top: 1px solid #ddd;
transform: scaleY(0.5);
}
em:根據父節點的 font-size 爲相對單位。(多層嵌套時,難以使用)
rem:根據 html 的 font-size 爲相對單位。(建議使用)
1.設置rem 的基值:rem = screen,width / 20 。
2.設置 html 的 font-size 值。
//默認320px
html { font-size: 32px; }
//iphone 6
@media (min-device-width: 375px) { html { font-size: 37.5px; } }
//iphone 6 plus
@media (min-device-width: 414px) { html { font-size: 41.4px; } }
3.width: px / rem; height: px / rem; (rem 表示 rem 的基值)
/*單行文本溢出*/
.inaline {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
/*多行文本溢出*/
.intowline {
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
box-orient: vertical;
line-clamp: 2; //顯示到第二行
}
Touch 基礎事件
觸摸事件
觸摸事件的屬性
每一個 touch 對象包含的屬性
BUG:Android 只會觸發一次 touchstart,一次 touchmove,touchend 不觸發。
解決方案:在 touchmove 中加入 event.preventDefault()。
注意:event.preventDefault() 會致使默認行爲不發生,如 scroll,致使頁面不滾動。
Tap 基礎事件
300 毫秒的故事:移動 web 頁面上的 click 事件響應都要慢 300ms(須要 300ms 的延時來判斷用戶 「雙擊」 仍是 「單擊」)。
自定義 Tap 事件原理:在 touchstart、touchend 時記錄時間和手指的位置,在 touchend 時進行比較,若是手指位置爲同一位置(或容許移動一個很是小的位移值)且時間間隔較短(通常認爲是 200ms),且過程當中不曾處罰過 touchmove 事件,便可認爲觸發了手持設備上的 「click」事件,通常稱它爲 「tap」 事件。通常使用移動框架庫 Zepto.js。
Tap 透傳 BUG:
Tap 透傳的解決方案
彈性滾動
當客戶端的頁面滾動到頂部或底部的時候,滾動條會收縮並讓咱們多滑動必定距離,就想慣性同樣。
局部滾動實現彈性滾動
body {
overflow: sceoll;
overflow-scrolling: touch;
}
注意:Android 不支持原生的彈性滾動!須要藉助第三方庫 iScroll 來實現。
下拉刷新 / 上拉加載
sceoll 屬性判斷 document 是否在頂部 / 底部。
總結
資源:慕課網