1. 程式人生 > >Web移動端裝置適配

Web移動端裝置適配

一、前導 在CSS3新定義的rem之前,可能大家都會想到之前CSS中的設定頁面字型大小的單位:px、em、pt等。 但在相比之下,CSS3新定義的rem更加適合用來做移動端的響應式。 在相容性方面:在移動端方面的      iOS:6.1系統以上的都支援      android:  2.1系統以上的都支援 大部分主流的瀏覽器都支援 rem與em的區別:      rem在官網的解釋為:(font size of the root element)      em在官網的解釋為:(font size of the element) 就是根據網頁的根元素來設定字型的大小。而不同的是:em是根據其父元素的字型大小來設定;rem則是根據網頁的根元素(html)來設定大小。 在大部分的主流瀏覽器IE9+、Firefox、Chrome、Safari、Opera中,如果我們不修改字型配置,則font-size預設為16px,也就是 html
{
    font-size16px;
}
那我們想要用rem來給div的字型大小設定為14px,我們需要這樣寫 div{
    font-size0.875rem;/* 14 / 16 = 0.875 */
}
二、rem螢幕適配 在用rem進行螢幕適配之前,回想一下我們之前進行適配的一些方法: 1、比較簡單的情況下,高度一般設定為定高,然後寬度鋪滿整個螢幕。 2、相對複雜的情況下,可以利用百分比進行適配,或是實用flex彈性佈局等css設定某些定製的寬度。 3、最後,針對再複雜的響應式,可以根據css3的media query屬性進行適配;就是說根據不同的裝置的大小來設定相應的css樣式。 以上的這些個方法都可以做到響應式,那既然出現rem這個新東西;那麼也能夠做到響應式這方面。 既然rem是根據html元素來改變的值的大小;所以我們可以根據需要設定html的大小來實現我們css樣式中的適配效果。 rem數值計算 使用rem來設定css值,一般都會經過一層的計算才會得到數值,例如:在沒有設定過html大小(font-size);想要把一個div的width設定為100px,所以需要計算出100px對應的rem值;100/16=6.25rem。如果這樣設定我們寫css的時候就非常的繁瑣。 對於寫css樣式,我們可以使用sass來寫,也可以不用直接寫 在沒有使用sass的時候;為了方便一點,可以講html的font-size設定為100px;這樣我們在轉化rem的時候;直接除以100再加上rem單位就可以了。 如果我們使用了sass:就可以利用sass來解決這個問題,可以利用函式來解決,定義一個預設變數;然後通過函式來轉化為rem $baseSize
75px !default;

html,body{
  margin:0;
}

@function pxToRem($px){
  @return $px $baseSize 1rem;
}

.mobile{
  widthpxToRem(375px);
  height200px;
  background#00B7FF;
}
說到這;關於rem需要有一個其準值;就是設定別的有單位的大小,都是參考這個其準值來設定的;預設的其準值就是16px 和html的font-size有關。 我們寫的樣式由於需要相容不同的螢幕裝置;所以我們需要選取一個確定的螢幕裝置作為參考;其他的裝置都是在其的基礎上變化。 比如我們選取iphone6來作為參考其準設計;iphone6的解析度為375x667 所以我們可以設定rem的其準值為 var 
window.innerWidth;
document.documentElement.style.fontSize w/10 'px';
即 1rem = 37.5px 通過上面的js程式碼,可以動態的改變其準值; 這樣我們可以通過上面的sass檔案;改變 @function pxToRem($px){        @return $px $baseSize 1rem; } 函式傳入的值就可以設定我們想要設定的寬度大小 rem進階用法 進階前,需要了解幾個概念: 1、視窗 viewport 可以這麼說,viewport指的是瀏覽器的視窗,在pc端瀏覽器中,就是等於視窗的寬高; 但是在移動端的有點不一樣,因為其viewport過小;所以提供了兩個viewport:虛擬的viewportvisualviewport和佈局的viewportlayoutviewport。 2、物理畫素(physical pixel) 物理畫素又被稱為裝置畫素,就是在裝置中顯示的最小物理部件;就是這些微小的裝置畫素阻礙了我們肉眼看影象的效果。 3、裝置獨立畫素(density-independent pixel) 裝置獨立畫素又被叫為密度無關畫素,就是可以這樣認為是計算機座標系統的一個點,這一個點可以經過程式使用虛擬畫素(比如CSS畫素),經過系統轉化為 物理畫素。 4、CSS畫素 稱為一個抽象的單位,用來精確度量Web頁面上的內容,又被稱為虛擬畫素。 5、螢幕密度 螢幕密度是指一個裝置表面上存在的畫素數量,通常以每英寸有多少畫素來計算(PPI)。 6、裝置畫素比(device pixel ratio) 簡稱dpr,就是     裝置畫素比 = 物理畫素 / 裝置獨立畫素 裝置獨立畫素與螢幕密度有關。dip可以用來輔助區分視網膜裝置(Retina)還是非視網膜裝置 在不同的螢幕上,CSS畫素所呈現的物理尺寸是一致的,而不同的是CSS畫素所對應的物理畫素具數是不一致的。在普通螢幕下1個CSS畫素對應1個物理畫素,而在Retina螢幕下,1個CSS畫素對應的卻是4個物理畫素 通常我們拿到的設計稿一般為 iphone6的,尺寸為兩倍大小 一般的手機的dpr是1,像iphone4、iphone5、iphone6是2、iphone6s plus這種高清屏是3;可以通過js來獲取window.devicePixelRatio當前的裝置畫素比; 獲取dpr之後,可以通過建立meta標籤自己設定viewport中的內容; var window.innerWidth;
document.documentElement.style.fontSize w/10 'px';

var dpr window.devicePixelRatio;
var metaE document.createElement('meta');
metaE.setAttribute('name''viewport');
metaE.setAttribute('content','initial-scale=' 1/dpr ',maximum-scale=' 1/dpr ',minimum-scale=' 1/dpr ',user-scalable=no');
document.documentElement.firstElementChild.appendChild(metaE);
參考網址:http://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html   http://www.alloyteam.com/2016/03/mobile-web-adaptation-tool-rem/

相關推薦

Web移動裝置

一、前導 在CSS3新定義的rem之前,可能大家都會想到之前CSS中的設定頁面字型大小的單位:px、em、pt等。 但在相比之下,CSS3新定義的rem更加適合用來做移動端的響應式。 在相容性方面:在移動端方面的      iOS:6.1系統以上的都支援      

移動問題

相關 素數 相對 nim 但是 scale 模式 測試 asc 設備像素、CSS像素==設備獨立像素 這三者的關系 在PC端可以通過 screen.width/height 屬性來獲取設備獨立像素值,在PC端這個值把它當成我們常說的屏幕分辨率(實際上它不是屏幕分辨率,但是由

移動文字

style 不同 根據 調整 data- 進行 點陣 note bsp 移動端普遍使用rem進行適配,但是文字不合適使用rem。很多瀏覽器自帶點陣字體,當碰到font-size:13px,font-size:15px時會有很多問題。因此一般建議使用px。根據不同的dpr進行

移動前端方案20170707

and rect() keyword 不同 響應 屏幕 win rect class 1.Meida Queries meida queries 的方式可以說是我早期采用的布局方式,它主要是通過查詢設備的寬度來執行不同的 css 代碼,最終達到界面的配置。核心語法是: @m

移動頁面---rem

client logs dom color mco fun win window event (function(doc, win) { var docEl = doc.documentElement, resizeEvt = ‘orientati

移動主流方案

兩種 fonts rip 出發 script 一個 比例 適配方案 ie瀏覽器 1、流式布局(百分比布局) 案例:京東移動端 優點:簡單方便,只需要固定高度,寬度自適應; 缺點:大屏幕手機實際顯示的不協調。 2、響應式布局 優點:可以節約成本,不用再做專門的web a

一個簡單的 PC移動(通過UA)

one div cat log 一個 else sougou 添加 iphone 只需在header引用個js文件, 原理就是判斷UA裏面的標識. 加下面代碼添加到js文件,在頭文件引用即可 var Pc_url = ‘http://www.baidu.com‘; //P

移動頁面ipad?

header mini index use 處理 name pre var minimum 1、 @custom-media --sm (min-width: 576px); @custom-media --md (min-width: 768px); @custom-me

移動頁面解決方案

ems 基本上 min win 定位 劃分 單位 scrip 一個 一、流體布局 所謂的流體布局,就是用百分比來定義寬度,最外層容器的寬度設置為100%,就可以適配不同的屏幕,子元素按照比例來設置百分比,子元素整體的百分比之和就是100%,但是如果有子元素設置了邊框,或者p

移動rem flex.js

(function() { document.addEventListener('DOMContentLoaded', function () { var html = document.documentElement; var windowWidth = html.clientWi

移動

網頁移動端適配的胡亂分析 由viewport到移動端頁面適配   如果你想認真仔細地瞭解可以看看這一篇部落格   對於viewport,字面意思是視口,也就是我們正常能看見的視窗。有大神把viewport分為layout viewport(瀏覽器預設的viewport,基本大於瀏

基於vue-cli3的vue項目移動樣式,lib-flexible和postcss-px2rem

rop import 命令 就會 cal org 重啟 init pos 1,安裝 flexible和 postcss-px2rem(命令行安裝) npm install lib-flexible --save npm install postcss-px2rem --

移動rem程式碼

rem字型設定是根據font-size相對設定: <script type="text/javascript"> function rems(){ // 獲取螢幕寬度(此處是一個相容的寫法) var htmlWidth=document.

移動rem,以及要注意的問題

移動端配置程式碼 html 中的程式碼 <meta name='viewport' content='width=device-width, user-scale=no, maximum-scale=1, minimum-scale=1, viewport-fit=cover,

移動REM的幾種方法

移動端REM適配的幾種方法 一、網易採用的方式 步驟: 根據設計稿尺寸完成頁面; 設定meta,控制視口寬度,讓頁面以1:1比例渲染頁面 動態設定html的font-size; 把各元素的px值除以100轉換為rem(字型除外) 關鍵程式碼 設定視

移動螢幕 (@media )

@media screen and (max-width: 300px) {     body {         background-color:lightblue;     } } Media Queries能在不同的條件下使用不同的樣式,使頁面在不同在終端裝置下達到

移動螢幕(通俗易懂理解viewport-真機除錯)

真機vivo x5pro 除錯,體驗 當設定元標籤時,彈出螢幕寬度是320(個人理解單位就是px) 因為這個標籤指定了理想視口寬度,為裝置出廠固定的裝置獨立畫素 解析度320(重點:它是固定的) 註釋掉 彈出螢幕寬度 是視口預設的980(個人理解單位就是px) css

移動 頁面

1.js 原生 ;(function(win, doc) { change() function change() { var remSize = window.innerWidth / 7.5 || 50 /*設計稿是以width = 750p

html移動頁面js(採用rem+百分比形式)

(function(win, lib) { var doc = win.document; var docEl = doc.documentElement; var metaEl = doc.querySelector('meta[name="vie

rem與media標籤實現移動螢幕

下面四個方案來自同事共享,原理都是採用等比縮放的方式 —— 獲得目標螢幕寬度和設計稿寬度的比,作為 rem 的基值(縮放係數),設定為html標籤的字型大小。不同的只是在於效能取捨和書寫習慣。方案1@media screen and (min-width: 320px) {html{font-size:50