移动web学习总结
最近學習了些移動web開發的基礎知識,稍微做下記錄總結:
- Hello,移動web: https://www.imooc.com/learn/494
一、基礎知識
1. 關于Pixel
- px : CSS px,邏輯像素,瀏覽器使用的抽象單位
- dp,pt: device independence pixel 物理像素:設備無關像素
- dpr : devicePixelRatio 設備像素縮放比
計算公式: 1px = (dpr)2 * dp 一個CSS像素對iphone5相當于4個物理像素
在一維上,一個CSS 像素,相當于兩個物理像素。
- DPI:打印機每英寸可以噴的墨汁點
- PPI:屏幕每英寸的像素數量,即單位英寸內的像素密度,PPI越高,默認的dpr越大。
以iphone 5 為例:
2. Viewport視圖概念
作用
- 將頁面渲染在一個默認980px(ios)的viewport中,andriod可自定義
- 縮放
viewport分layout viewport和visual viewport一般不使用默認的980的viewport,而是使用meta標簽改變viewport。
3. Viewport_Meta標簽
定義布局content寬度和縮放比,期望縮放比統一。
直接使用980的默認設置并不適合。
最佳實踐:布局viewport = 設備寬度 = 度量viewport
- 方案一:根據設備的實際寬度設計——手機寬320px,就用320px設計。
- 方案二:縮放比設為0.5,使得設備的物理像素等于抽象像素來設計。1px邊框和高清圖片不需要額外設計。
二、響應式移動Web排版布局
布局主要分為固定布局和流體布局,其中PC端的布局偏向于使用固定布局。但是移動端使用固定布局并不合適,因為移動端的屏幕尺寸呈現碎片化。移動端web需要有良好的自適應性。
1. Flex彈性盒布局
Flex是Flexible Box的縮寫,意為”彈性布局”,用來為盒狀模型提供最大的靈活性。
任何一個容器都可以指定為Flex布局。可根據元素的個數不同,自動填充容器。
1.1 Flex 使用
- 父元素使用flex布局:display:flex;webkit內核的瀏覽器加前綴-webkit
- 子元素可按照比例劃分或者混合劃分:
一般來說,圖片的寬高是固定的,文字部分按照等比填充。
1.2 Flex 容器屬性
Flex布局思維導圖
| 1 | flex-direction | row (default) / row-reverse / column / column-reverse; | 決定主軸的方向(即項目的排列方向) |
| 2 | flex-wrap | nowrap (default) / wrap / wrap-reverse; | 默認情況下,項目都排在一條線(又稱”軸線”)上。flex-wrap屬性定義,如果一條軸線排不下,如何換行。 |
| 3 | flex-flow | row nowrap (default) | flex-direction屬性和flex-wrap屬性的簡寫形式 |
| 4 | justify-content | flex-start (default) / flex-end / center / space-between / space-around; | 定義了項目在橫向上的對齊方式。 |
| 5 | align-items | flex-start/ flex-end / center / baseline / stretch (default); | 定義項目在縱向上如何對齊。 |
| 6 | align-content | flex-start / flex-end / center / space-between / space-around / stretch (default); | 定義了多根軸線的對齊方式。如果項目只有一根軸線,該屬性不起作用。 |
1.3 子元素屬性
| 1 | order | init | 排列順序。數值越小,排列越靠前,默認為0。 |
| 2 | flex-grow | number | 放大比例,默認為0。即如果存在剩余空間,也不放大。 |
| 3 | flex-shrink | number | 縮小比例,默認為1,即如果空間不足,該項目將縮小 |
| 4 | flex-basis | length eg:360px | 定義了在分配多余空間之前,項目占據的主軸空間(main size)。瀏覽器根據這個屬性,計算主軸是否有多余空間。它的默認值為auto,即項目的本來大小。 |
| 5 | flex | flex-grow, flex-shrink 和 flex-basis的簡寫,默認值為0 1 auto。后兩個屬性可選 | |
| 6 | align-self | auto / flex-start / flex-end / center / baseline / stretch; | 允許單個項目有與其他項目不一樣的對齊方式,可覆蓋align-items屬性。默認值為auto,表示繼承父元素的align-items屬性,如果沒有父元素,則等同于stretch。 |
詳細介紹:Flex布局語法教程
2. 使用媒體查詢 MediaQuery
媒體類型:
- screen (屏幕)
- print (打印機)
- handheld (手持設備)
- all (通用)
常用媒體查詢參數:
- width —— 視口寬度
- height —— 視口高度
- device-height —— 設備高度
- device-weight —— 設備高度
- orientation —— 檢查設備處于橫屏(landscape)還是豎屏(portrait)
設計點:
- 使用百分比布局,實現平滑適應
- 使用彈性圖片(外加容器,圖片使用100%寬度)
- 重新布局,顯示與隱藏,隱藏冗余元素 經常需要切換位置的元素使用【絕對定位】,減少重繪,提高渲染性能
權衡利弊,不要為了響應式而響應式。
待續:高清圖片和一像素邊框問題
1. 關于高清圖片:為了避免圖片產生模糊,圖片的寬高應該使用物理像素渲染。
2. 一像素邊框,使用scaleY(.5).
3. 相對單位 em 和 rem
- em:以父節點的font-size為相對單位
- rem :以html 的font-size 為相對單位 (推薦)
為了適應手機屏幕 rem = screen.width/10;rem可結合sass使用。
4. 多行文本溢出 加 ...
-webkit-box-orient:vertical; -webkit-line-clamp: 3三、終端交互
1、使用自定義Tap事件代替click事件避免300ms問題,(Tap事件可能存在點透bug,遮罩層被點透)。
2、 Touch事件
每個touch對象包含以下屬性:
3、彈性滾動
body層滾動:
自帶彈性滾動,overflow:hidden失效,GIF和定時器暫停
局部滾動:
4、下拉刷新
使用touch事件,判斷是否拉到頂層,如果是,對頁面進行重新加載。
5、上拉加載
使用scroll事件。
總結
- 上一篇: 制作Jexus的Docker镜像
- 下一篇: MyChrome制作Chrome浏览器便