移動端基礎概念javascript
▪ 作移動端(wap)和作PC端區別:css
一、系統 PC:Windows/mac區別不大 ; 移動端:ios/android/windows有區別html
二、瀏覽器 PC:區別很大 ; 移動端:區別不大java
三、分辨率(尺寸) PC:有區別 ; 移動端:區別很大android
調試方法:可在谷歌瀏覽器的手機模式下查看,可是始終與真機效果有差異,因此還可在sublime裏真機測試,不過這裏有一個更方便的辦法,可將作好的demo地址放入二維碼生成器中,生成二維碼,手機掃描便可。PS:如何將作好的demo生成二維碼?得到本機電腦的ipv4地址(windows+r,輸入cmd,進入系統運行界面,ipconfig),再替換到demo地址,進入二維碼生成器。ios
▪ 設備獨立像素:屏幕的大小、屏幕的尺寸(別名叫作點points,是個單位),獲取window.screen.width/window.screen.heightcss3
注意:一、橫豎屏切換時,真機裏的這個值不會改變,但在模擬器裏會切換web
二、在一個點裏,能夠放下多個像素windows
三、這個值能夠經過縮放改變瀏覽器
▪ 設備像素(物理像素):屏幕的分辨率(實際放的像素值),買手機時廠家告訴你的分辨率,這個值是虛擬的,沒法獲取
▪ 像素比(DPR,這個值沒法改變),縮放的比例=設備像素/設備獨立像素,獲取window.devicePixelRatio
http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions,可在該網址瞭解細節
▪ viewport 視口(可視區窗口),經過meta標籤設置
未設置時
一、屏幕的高度通常爲980,可是不一樣型號設備相應不一樣
二、真機與模擬器的值也會不一樣
三、用window.innerWidth/window.innerHeight方法獲取
設置後
Content:視口的相關設置
Width:屏幕的寬度,通常不設置成肯定數值,安卓設備有些不支持 device-width:設備的實際寬度 height同理
User-scalable:可否縮放 yes-容許縮放 no-不容許縮放
Initial-scale:初始比例(要與最小比例保持一致) maximum-scale:最大可以縮放的比例 minium-scale:最小可以縮放的比例
一、若設置縮放的話,就把width與user-scalable去掉
二、用了縮放後,並非真正地縮放了,而是改變了設備的獨立像素(屏幕的尺寸)
移動端適配方案
▪ 適配:在不一樣尺寸的手機設備上,頁面相對性的達到合理的展現(自適應)或者保持必定效果的等比縮放(看起來差很少)
適配的元素:一、字體 二、寬高 三、間距 四、圖像(圖片、圖標)這個比較難
適配的方法:一、百分比適配 二、比例縮放適配 三、viewport適配 四、rem適配 五、彈性佈局適配
▪ 百分比佈局問題(通常狀況下,百分比佈局配合其餘適配方式使用):
一、百分比的值很差計算
二、須要肯定父級元素的大小,由於要根據父級元素的大小進行計算
三、寬度能夠設置,可是高度很差設置
▪ 比例縮放適配:把全部機型的設備設置成一致的
<!DOCTYPE html> <html> <head> <meta charset="UTF-8">
<!--切記必定要寫移動端優先-->
<meta name="viewport" content="width=device-width,user-scalable=no"/>
<title></title>
<style type="text/css">
body{
margin:0px; } div{ width:25%; height:500px; float:left; } div:nth-child(1){ background:red; } div:nth-child(2){ background:green; } div:nth-child(3){ background:blue; } div:nth-child(4){ background:pink; } </style> <script type="text/javascript"> (function(){ var curWidth=window.screen.width; var targetWidth=375; // 計算縮放比 var scale=curWidth/targetWidth; // 動態建立meta元素 var meta=document.createElement("meta"); meta.name="viewport"; meta.content="'initial-scale='+scale+',minimun-scale='+scale+',maximum-scale='+scale"; // 將建立好的meta標籤插入頭部 document.head.appendChild(meta); })(); </script> </head> <body> <div></div> <div></div> <div></div> <div></div> </body> </html>
一、viewport須要經過js動態的設置(不能直接把device設置成數值)
二、經過設置比例(初始比例和縮放比例的),把寬度縮放成
一致的
注意:viewport裏給了縮放之後的值後,最終的頁面的寬度是拿來的值除以縮放比例
缺點:全部的手機將會看上去是一樣大小,沒有分別,用戶體驗很是很差;有時會算出小數,致使有一些偏差(可有可無)
▪ viewport適配跟比例縮放適配類似,看下面的代碼
<!DOCTYPE html> <html> <head> <meta charset="UTF-8">
<!--切記必定要寫移動端優先-->
<meta name="viewport" content="width=device-width,user-scalable=no"/>
<title></title>
<style type="text/css">
body{ margin:0px; } div{ width:25%; height:500px; float:left; } div:nth-child(1){ background:red; } div:nth-child(2){ background:green; } div:nth-child(3){ background:blue; } div:nth-child(4){ background:pink; } </style> <script type="text/javascript"> (function(){ /* * 320/scale=640 * scale=320/640(設備獨立像素/設備像素)=1/2 * scale=414/1242=1/3 */ // 計算縮放比 var scale=1/window.devicePixelRatio; // 動態建立meta元素 var meta=document.createElement("meta"); meta.name="viewport"; meta.content="'initial-scale='+scale+',minimun-scale='+scale+',maximum-scale='+scale"; // 將建立好的meta標籤插入頭部 document.head.appendChild(meta); })(); </script> </head> <body> <div></div> <div></div> <div></div> <div></div> </body> </html>
▪ rem: css3新增的一個相對單位,相對於根節點(html)字體的大小的值
Html{font-size=10px} 2em=20px
經過它能夠作到只修改根元素的大小,能成比例地調整全部字體大小,只依賴html字體的大小,在移動端開發裏經常使用。
靜態設置rem:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8">
<!--切記必定要寫移動端優先-->
<meta name="viewport" content="width=device-width,user-scalable=no"/>
<title></title>
<style type="text/css">
body{
margin:0; } div{ width:4rem; height:4rem; background:yellow; float:left; } section{ width:16rem; height:4rem; background:pink; /*在元素佐佑兩側均不容許浮動*/ clear:both; } p{ width:2.35rem;/*47px*/ height:2.35rem; background:gray; clear:both; } </style> <script type="text/javascript"> window.onload=function(){ // 獲取html var html=document.documentElement; // 獲取整個界面寬度 var width=window.screen.width; // 在控制檯輸出 console.log(width); // 設置根節點字體大小,將屏幕均分紅16份,關於被除數,只要以基準換算出來是整數均可以 html.style.fontSize=width/16+"px"; // iphone5下,1rem=320/16=20px } </script> </head> <body> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <section></section> <p></p> </body> </html>
動態設置rem,方法有二
一、
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!--切記必定要寫移動端優先-->
<meta name="viewport" content="width=device-width,user-scalable=no"/>
<link rel="stylesheet" type="text/css" href="rem.css"/>
<title></title>
<script type="text/javascript">
window.onload=function(){ var html=document.documentElement; var width=window.screen.width; // 要有單位px html.style.fontSize=width/15+"px"; } </script> </head> <body> <div>1</div> <div>2</div> </body> </html>
建立一個less文件:
//結尾有冒號
@rem:25rem;
body{
margin:0px;
}
div:nth-child(1){
// 只是數值,沒有單位了
width:187/@rem;
height:100/@rem;
background:red;
}
//寫好之後右鍵,選擇編譯,就會編譯出一個同名的css文件,沒修改一些就要編譯一次,css文件裏會出現算好的rem值
編譯後造成css文件
div:nth-child(1) { width: 7.48rem; height: 4rem; background: red; }
二、利用HBuilder自帶的px轉換成rem的功能
點擊工具,再選擇選項,單擊左側的HBuilder,就會彈出下面的窗口,打開px轉rem功能,設置相關參數,就能夠直接在css裏設置了,此時輸入px值會自動換成rem值
一、必須動態地區設置html的大小,才能適配
二、根據頁面(注意:是psd圖,也就是真實大小)的寬度除以一個係數,把算出類的這個值賦值給html的font-Size屬性
特色:一、全部有單位的屬性會根據屏幕的尺寸自動加算
二、一樣的一個元素,在不一樣設備下的大小是不同的,在尺寸小的設備下顯示的小,反之,大
三、通常以iphone6爲基準,以它的寬度750除上一個係數,再去計算rem
爲何要除以一個數字呢?給你一大屏思考!
一、一個頁面裏,不可能所有都是整屏的元素,確定有一行放多個的元素,因此就把一行等分紅n份
二、不除以一個數字的話,那1個rem就是一整個屏幕的寬度了,這個值太大,若是元素的寬度比它小的話,不容易計算
三、這個係數能夠本身定,建議給一個能整除的值
▪ vw:相對於視口的寬度,視口被均分爲100單位的vw
h1 {font-size: 8vw;}
若是視口的寬度是200mm,那麼上述代碼中h1元素的字號將爲16mm,即(8x200)/100
▪ px:絕對單位,給多少是多少,不會變,作不到適配,在移動端開發裏不多用
▪ em:相對單位,相對於自身字體大小的值
Font-size:12px; 1em=12px
問題:一、chrom下有最小字體限制,必須爲12px,因此這個值不能小於12
二、若是有兩個同樣的元素,可是裏面的字體不同,那就不能統一設置了,或者元素字體變化了,就又要統一設置一遍
▪ 移動端一些問題
一、固定定位問題
固定定位在移動端的兼容性不是很好,之前老版本的某些安卓手機不支持,ios4之前的版本也不支持
qq瀏覽器下有時候網上滑動的話,就會隱藏掉header
當打開鍵盤時,固定定位會失效
二、body下的overflow問題
body加了overflow:hidden後,橫向沒效果(ios),安卓下沒問題
▪ 移動端的樣式重置
一、鏈接點擊時候,默認有一個背景
-webkit-tap-highlight-color:rgba(0,0,0,0);
二、按鈕在ios下都是圓角
-webkit-appearance:none; //清除輸入框和按鈕的默認外觀
Border-radius:0;
三、每臺設備裏的默認字體是不同的(移動端設備裏大部分沒有宋體和微軟雅黑)
Font-family:helvetica;
四、橫豎屏切換或用戶本身經過瀏覽器設置的話,能夠改變字體的大小(須要給body下的全部元素)
-webkit-text-size-adjust:100%;
五、長按文字ios下會選中文字,安卓下無效
-webkit-user-select:none;
六、固定定位在一些ios低版本下不兼容,以及一些國產手機裏也不兼容