1. 程式人生 > 其它 >前端適配筆記

前端適配筆記

一.媒體查詢

媒體查詢可以讓我們根據裝置顯示器的特性(如視口寬度,螢幕比例,裝置方向:橫向或縱向)為其設定CSS樣式,媒體查詢由媒體型別和一個或多個檢測媒體特性的條件表示式組成;

css3

必須設定<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

viewport:視口

width=device-width:就將佈局視口設定成了理想的視口。

initial-scale:[0,10] 初始縮放比例,1表示不縮放

maximum-scale:[0,10] 最小縮放比例

maximum-scale: [0,10] 最大縮放比例

user-scalable: yes/no 是否允許手動縮放頁面,預設值為yes

語法:

@media mediatype and|not|only (media feature) {* CSS-Code; *}

第一種方法是css2媒體查詢用法,最大的弊端是他會增加頁面http的請求次數,增加了頁面負擔,

我們一般用第二種方法CSS3把樣式都寫在一個檔案裡面才是最佳的方法。

但是媒體查詢的缺點也很明顯,如果在瀏覽器大小改變時,需要改變的樣式太多,那麼多套樣式程式碼會很繁瑣;

二,rem佈局(彈性佈局)移動端

rem是指相對於根元素(html)的字型大小的單位

1.媒體查詢結合rem佈局

媒體查詢動態修改根元素的大小,使得rem一直在跟著變化,響應式就成功了。

為什麼使用媒體查詢結合rem佈局

一個物體在一個超大空間中顯得很小,但是在小的空間存放不下,為使得頁面佈局不管在什麼裝置上都是正常,協調的情況,就會採用媒體查詢+rem,來根據不同的裝置去相應的元素的大小;

3、rem+VW佈局

必須設定<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

為了方便計算可把html中font-size設定成100px;但是100px固定大小不會自動適配。所以把100px轉換成vw

100px=?vw等於他的視口寬度

假如:裝置:640px dpr:2 320px

因為 100vw=320px

所以 1vw=3.2px;

所以 100px=31.25vw

假如 裝置750px dpr為2 375px

因為 100vw=375px;

所以 1vw=3.75px;

所以 100px=26.67vw

當裝置640px :31.25vw

當裝置750px :26.67vw

注意文字要單獨設定單位為px,否則文字為100px太大,要用媒體查詢的方式改變文字大小。

優點:理想狀態是所有螢幕的高寬比和最初的設計高寬比一樣,或者相差不多,完美適應。

缺點:這種rem+js只不過是寬度自適應,高度沒有做到自適應,一些對高度,或者元素間距要求比較高的設計,則這種佈局沒有太大的意義。如果只是寬度自適應,更推薦響應式設計。

四、百分比佈局 (***流式佈局)***

以百分比作為頁面的基本單位,可以適應一定範圍內所有的尺寸的裝置螢幕及瀏覽器寬度,並能完美利用有效空間展現最佳效果

五、混合式佈局

同彈性佈局類似,可以適應一定範圍內所有尺寸的裝置螢幕及瀏覽器寬度,並能完美利用有效空間展現最佳效果;只是混合畫素、和百分比兩種單位作為頁面單位

六、響應式佈局

1、佈局特點:每個螢幕解析度下面會有一個佈局樣式,即元素位置和大小都會變。

2、設計方法:媒體查詢+流式佈局。通常使用 @media 媒體查詢 和網格系統 (Grid System) 配合相對佈局單位進行佈局,實際上就是綜合響應式、流動等上述技術通過 CSS 給單一網頁不同裝置返回不同樣式的技術統稱。

優點:適應pc和移動端,如果足夠耐心,效果完美

缺點:(1)媒體查詢是有限的,也就是可以枚舉出來的,只能適應主流的寬高。(2)要匹配足夠多的螢幕大小,工作量不小,設計也需要多個版本。

響應式頁面在頭部會加上這一段程式碼:

<meta name="applicable-device" content="pc,mobile">
<meta http-equiv="Cache-Control" content="no-transform ">

例:

var coverSupport = 'CSS'in window && typeof CSS.supports === 'function' && (CSS.supports('top:env(a)') || CSS.supports('top:constant(a)'))

document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')